Обновление структуры проекта, использование pydantic для конфигураций, улучшение отчёта о патчах
Build mod / build (push) Successful in 6m39s
Build mod / build (push) Successful in 6m39s
This commit is contained in:
+18
-7
@@ -5,22 +5,24 @@
|
||||
|
||||
Каждый патч должен независеть от других патчей и проверять себя при применении. Он не должен вернуть True, если есть проблемы.
|
||||
На данный момент каждый патч должен иметь функцию `apply`, которая принимает на вход конфигурацию и возвращает True или False.
|
||||
И модель `Config`, которая наследуется от `PatchConfig` (поле `enabled` добавлять не нужно).
|
||||
Это позволяет упростить конфигурирование и проверять типы данных, и делать значения по умолчанию.
|
||||
При успешном применении патча, функция apply должна вернуть True, иначе False.
|
||||
Ошибка будет интерпретирована как False. С выводом ошибки в консоль.
|
||||
Ещё патч должен иметь переменную `priority`, которая указывает приоритет патча, чем выше, тем раньше он будет применен.
|
||||
|
||||
Коротко о конфигурации. Она получается из `config.json` из config["patches"][patch_name].
|
||||
Дополнительно в основном методе `apply` кроме этого есть "verbose" и содержимое "base".
|
||||
Эти поля передаются всем патчам. `verbose` может быть указан так-же как флаг запуска:
|
||||
Коротко о конфигурации. Она состоит из двух частей `config` (на основе модели `Config` и из файла `configs/название_патча.json`).
|
||||
И постоянной не типизированной переменной `base` из `config.json` и флага `verbose`.
|
||||
```
|
||||
python ./main.py build --verbose
|
||||
```
|
||||
|
||||
В конце файла должно быть описание конфигурации патча.
|
||||
В конце docstring может быть дополнительное описание конфигурации патча (основное описание получается из модели `Config`).
|
||||
Это может быть как короткий фрагмент из названия патча и одной опции "enabled", которая обрабатывается в коде патчера.
|
||||
|
||||
"todo_template": {
|
||||
"enabled": true // Пример описания тк этот текст просто пример
|
||||
"enabled": true, // Пример описания тк этот текст просто пример
|
||||
"example": true // Пример кастомного параметра
|
||||
}
|
||||
"""
|
||||
|
||||
@@ -28,11 +30,20 @@ priority = 0 # Приоритет патча, чем выше, тем раньш
|
||||
|
||||
# imports
|
||||
from tqdm import tqdm
|
||||
from typing import Dict, List, Any
|
||||
from pydantic import Field
|
||||
|
||||
from utils.config import PatchConfig
|
||||
|
||||
#Config
|
||||
class Config(PatchConfig):
|
||||
example: bool = Field(True, description="Пример кастомного параметра")
|
||||
|
||||
|
||||
# Patch
|
||||
def apply(config: dict) -> bool: # Анотации типов для удобства, читаемости и поддержки IDE
|
||||
def apply(config: Config, base: Dict[str, Any]) -> bool: # Анотации типов для удобства, читаемости и поддержки IDE
|
||||
tqdm.write("Вывод информации через tqdm, чтобы не мешать прогресс-бару")
|
||||
if config["verbose"]:
|
||||
tqdm.write("Пример включен" if config.example else "Пример отключен")
|
||||
if base["verbose"]:
|
||||
tqdm.write("Для вывода подробной и отладочной информации используйте флаг --verbose")
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user