Files
patcher/patches/todo_example.py
2025-12-28 17:47:56 +03:00

54 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Шаблон патча
Здесь вы можете добавить описание патча, его назначение и другие детали.
Каждый патч должен независеть от других патчей и проверять себя при применении. Он не должен вернуть 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 <wowlikon@gmail.com>"
__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