def __init__(self, begin_message=None, log_config=None):
     super().__init__(begin_message)
     self._config = HtmlLogConfig() if log_config is None else log_config
     self._main = None
     self._log_setup = None
     self._log_iterations = []
     self._current_log = None
     self._files_path = None
def create_log(log_base_path, test_module, additional_args=None):
    Log.setup()
    log_cfg = HtmlLogConfig(base_dir=log_base_path,
                            presentation_policy=html_policy)
    log = Log(log_config=log_cfg)
    test_name = 'TestNameError'
    error_msg = None
    try:
        test_name = test_module
        if additional_args:
            test_name += f"__{'_'.join(additional_args)}"
    except Exception as ex:
        error_msg = f'Detected some problems during calculating test name: {ex}'
    finally:
        log.begin(test_name)
    print(f"\n<LogFile>{os.path.join(log.base_dir, 'main.html')}</LogFile>")
    if error_msg:
        log.exception(error_msg)
    return log
class HtmlLogManager(BaseLog):
    def __init__(self, begin_message=None, log_config=None):
        super().__init__(begin_message)
        self._config = HtmlLogConfig() if log_config is None else log_config
        self._main = None
        self._log_setup = None
        self._log_iterations = []
        self._current_log = None
        self._files_path = None

    def __add(self, msg):
        pass

    def begin(self, message):
        self._files_path = self._config.create_html_test_log(message)
        self._main = HtmlMainLog(message, self._config)
        self._log_setup = HtmlSetupLog(message, config=self._config)
        self._current_log = self._log_setup
        self._main.begin(message)
        self._current_log.begin(message)
        self.__add("begin: " + message)

    @property
    def base_dir(self):
        return self._files_path

    def get_result(self):
        log_result = self._log_setup.get_result()
        for iteration in self._log_iterations:
            if log_result.value < iteration.get_result().value:
                log_result = iteration.get_result()
        return log_result

    def end(self):
        self._log_setup.end()
        self._main.end_setup_iteration(self._log_setup.get_result())
        log_result = self.get_result()
        self._main.end(log_result)
        self.__add("end")

    def add_build_info(self, message):
        self._main.add_build_info(escape(message))

    def start_iteration(self, message):
        message = escape(message)
        self._log_iterations.append(
            HtmlIterationLog(message, message, self._config))
        self._main.start_iteration(self._config.get_iteration_id())
        self._current_log = self._log_iterations[-1]
        self._current_log.begin(message)
        self._log_setup.start_iteration(message)
        self.__add("start_iteration: " + message)

    def end_iteration(self):
        self._current_log.end()
        self._main.end_iteration(self._current_log.get_result())
        self._log_setup.end_iteration(self._current_log.get_result())
        self._current_log.iteration_closed = True
        self._current_log = self._log_setup
        self.__add("end_iteration: ")
        return self._current_log

    def debug(self, message):
        self._current_log.debug(escape(message))
        self.__add("debug: " + message)

    def info(self, message):
        self._current_log.info(escape(message))
        self.__add("info: " + message)

    def workaround(self, message):
        self._current_log.workaround(escape(message))
        self.__add(": " + message)

    def warning(self, message):
        self._current_log.warning(escape(message))
        self.__add(": " + message)

    def skip(self, message):
        self._current_log.skip(escape(message))
        self.__add("warning: " + message)

    def error(self, message):
        self._current_log.error(escape(message))
        self.__add("error: " + message)
        self.end_all_groups()

    def blocked(self, message):
        self._current_log.blocked(escape(message))
        self.__add(f'blocked: {message}')
        self.end_all_groups()

    def exception(self, message):
        self._current_log.exception(escape(message))
        self.__add("exception: " + message)
        self.end_all_groups()

    def critical(self, message):
        self._current_log.critical(escape(message))
        self.__add("critical: " + message)
        self.end_all_groups()

    def start_group(self, message):
        self._current_log.start_group(escape(message))
        self.__add("start_group: " + message)

    def end_group(self):
        self._current_log.end_group()
        self.__add("end_group")

    def end_all_groups(self):
        for iteration in reversed(self._log_iterations):
            if not iteration.iteration_closed:
                self.end_iteration()
        self._current_log.end_all_groups()