Задача курса
Python: Форматировщик записей лога с Literal, X | None и TypeAlias
Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Optional, Union, Literal и алиасы типов»
Условие
Форматировщик записей лога с Literal, X | None и TypeAlias
Ты пишешь функцию для форматирования структурированных записей лога. Каждая запись имеет уровень серьёзности, обязательное сообщение и необязательный контекст.
Что уже дано
Проверяющая система вызывает твою функцию format_log_entry с разными аргументами. Никаких глобальных переменных или файлов заранее не создаётся.
В редакторе уже есть импорты и объявление алиаса. Тебе нужно дополнить код.
Что нужно сделать
Объяви на верхнем уровне:
LogLevel: TypeAlias— алиас для типаLiteral["DEBUG", "INFO", "WARNING", "ERROR"]. ИспользуйTypeAliasизtyping.Context: TypeAlias— алиас для типаdict[str, str | int]. Это словарь с произвольными ключами-строками и значениями, которые могут быть строкой или целым числом.Функцию
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'
