code: def analyze(self, config_string=None):
          
          try:
              if config_string is not None:
                  self.log(u"Analyzing container with the given config string")
                  return self._analyze_txt_config(config_string=config_string)
              elif self.container.has_config_xml:
                  self.log(u"Analyzing container with XML config file")
                  return self._analyze_xml_config(config_contents=None)
              elif self.container.has_config_txt:
                  self.log(u"Analyzing container with TXT config file")
                  return self._analyze_txt_config(config_string=None)
              else:
                  self.log(u"No configuration file in this container, returning None")
          except (OSError, KeyError, TypeError) as exc:
              self.log_exc(u"An unexpected error occurred while analyzing", exc, True, None)
          return None
docs: Analyze the given container and
          return the corresponding job object.
  
          On error, it will return ``None``.
  
          :param string config_string: the configuration string generated by wizard
          :rtype: :class:`~aeneas.job.Job` or ``None``