diff --git a/config/redmine.py b/config/redmine.py index 17c94b5..96408d9 100644 --- a/config/redmine.py +++ b/config/redmine.py @@ -1,3 +1,6 @@ +REDMINE_ISSUE_URL_TEMPLATE = "https://redmine.sbps.ru/issues/{issue_id}" + + class RedmineConfig: def __init__(self): self.base_url = "https://redmine.sbps.ru" diff --git a/main.py b/main.py index 4bf0df6..6222247 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,25 @@ import logging +import re import sys +from config.redmine import REDMINE_ISSUE_URL_TEMPLATE + + +class ConsoleFormatter(logging.Formatter): + """Форматирует консольные логи и делает номера задач Redmine кликабельными.""" + + ISSUE_PATTERN = re.compile(r"(?\d+)") + + def format(self, record): + message = super().format(record) + return self.ISSUE_PATTERN.sub(self._format_issue_link, message) + + def _format_issue_link(self, match): + issue_id = match.group("issue_id") + issue_text = match.group(0) + issue_url = REDMINE_ISSUE_URL_TEMPLATE.format(issue_id=issue_id) + return f"\033]8;;{issue_url}\033\\{issue_text}\033]8;;\033\\" + def configure_logging(level: int = logging.INFO): """Настраивает короткий консольный лог и подробный файловый лог.""" @@ -11,7 +30,7 @@ def configure_logging(level: int = logging.INFO): file_handler.setLevel(level) console_handler = logging.StreamHandler(sys.stdout) - console_handler.setFormatter(logging.Formatter('%(message)s')) + console_handler.setFormatter(ConsoleFormatter('%(message)s')) console_handler.setLevel(level) logging.basicConfig(