Задача курса

Python: Форматировщик записей лога с Literal, X | None и TypeAlias

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Optional, Union, Literal и алиасы типов»

Условие

Форматировщик записей лога с Literal, X | None и TypeAlias

Ты пишешь функцию для форматирования структурированных записей лога. Каждая запись имеет уровень серьёзности, обязательное сообщение и необязательный контекст.

Что уже дано

Проверяющая система вызывает твою функцию format_log_entry с разными аргументами. Никаких глобальных переменных или файлов заранее не создаётся.

В редакторе уже есть импорты и объявление алиаса. Тебе нужно дополнить код.

Что нужно сделать

Объяви на верхнем уровне:

  1. LogLevel: TypeAlias — алиас для типа Literal["DEBUG", "INFO", "WARNING", "ERROR"]. Используй TypeAlias из typing.

  2. Context: TypeAlias — алиас для типа dict[str, str | int]. Это словарь с произвольными ключами-строками и значениями, которые могут быть строкой или целым числом.

  3. Функцию format_log_entry со следующей сигнатурой:

def format_log_entry(
 level: LogLevel,
 message: str,
 context: Context | None = None,
) -> str:

Функция должна:

  • Формировать строку вида "[LEVEL] message", если context равен None или пустому словарю.
  • Формировать строку вида "[LEVEL] message | key1=value1 key2=value2", если контекст не пуст. Пары key=value должны быть перечислены в алфавитном порядке ключей, разделены пробелом.
  • Работать корректно для всех четырёх значений level.
  • Принимать context=None (параметр не передан) и context={} (пустой словарь) одинаково — без блока контекста.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система вызывает format_log_entry(level, message, context) напрямую и сравнивает возвращаемое значение с ожидаемым. Аргументы:

  • level — строка из допустимого набора ("DEBUG", "INFO", "WARNING", "ERROR");
  • message — произвольная строка;
  • context — словарь dict[str, str | int] или None (по умолчанию).

Функция возвращает str.

Пример использования

print(repr(format_log_entry('INFO', 'server started')))

Результат:

'[INFO] server started'

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется