"""Шаблон патча Здесь вы можете добавить описание патча, его назначение и другие детали. Каждый патч должен независеть от других патчей и проверять себя при применении. Он не должен вернуть True, если есть проблемы. На данный момент каждый патч должен иметь функцию `apply`, которая принимает на вход конфигурацию и возвращает True или False. И модель `Config`, которая наследуется от `PatchTemplate` (поле `enabled` добавлять не нужно). Это позволяет упростить конфигурирование и проверять типы данных, и делать значения по умолчанию. При успешном применении патча, функция apply должна вернуть True, иначе False. Ошибка будет интерпретирована как False. С выводом ошибки в консоль. Ещё патч должен иметь переменную `priority`, которая указывает приоритет патча, чем выше, тем раньше он будет применен. Коротко о конфигурации. Она состоит из двух частей `config` (на основе модели `Config` и из файла `configs/название_патча.json`). И постоянной не типизированной переменной `base` из `config.json` и флага `verbose`. ``` python ./main.py build --verbose ``` В конце docstring может быть дополнительное описание конфигурации патча (основное описание получается из модели `Config`). Это может быть как короткий фрагмент из названия патча и одной опции "enabled", которая обрабатывается в коде патчера. "todo_template": { "enabled": true, // Пример описания тк этот текст просто пример "example": true // Пример кастомного параметра } """ __author__ = "wowlikon " __version__ = "1.0.0" from typing import Any, Dict, List from pydantic import Field from tqdm import tqdm from utils.config import PatchTemplate class Patch(PatchTemplate): example: bool = Field(True, description="Пример кастомного параметра") def apply( self, base: Dict[str, Any] ) -> bool: # Анотации типов для удобства, читаемости и поддержки IDE priority: int = Field( frozen=True, exclude=True, default=0 ) # Приоритет патча, чем выше, тем раньше он будет применен tqdm.write("Вывод информации через tqdm, чтобы не мешать прогресс-бару") tqdm.write("Пример включен" if self.example else "Пример отключен") if base["verbose"]: tqdm.write( "Для вывода подробной и отладочной информации используйте флаг --verbose" ) return True