54 lines
3.5 KiB
Python
54 lines
3.5 KiB
Python
"""Шаблон патча
|
||
|
||
Здесь вы можете добавить описание патча, его назначение и другие детали.
|
||
|
||
Каждый патч должен независеть от других патчей и проверять себя при применении. Он не должен вернуть 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
|