Conversation
build(requirements): Понижение версии pydantic для совместимости с workflow
Создан pylint.yml для workflow github
feat(NC): Интеграция с nextcloud
- Докстринги в хендлере - Докстринги в логировании #15
- Разделение логики обработки команд - Подключение роутов в единый основной роут - Добавление модели стека - Отключен Isort на стороне pre-commit #12
Feature/deck show cards
- Выборка осуществляется только по указанной доске и стеку - Отображение деталей карточки - Добавление покупок в карточку - Удаление покупок из карточки - Отметка о выполненной покупке - Разбиение логики на отдельные суброуты - Упрощение моделей и отказ от лишних моделей - Отказ от лишних хендлеров #12 #13 #9
- Оптимизация кода, чистка, упрощение - Убран flake
- Добавление элементов в текущую открытую карточку - Отслеживание нахождения в конкретной карточке
Feature/deck show cards
- Оптимизация обработки условий - Изменение строки с версией для sonar gate
style(Bot): Полировка кода
|
| :param prefix: Префикс для отступов | ||
| :return: Генератор строк с древовидной структурой | ||
| """ | ||
| ignore_dirs = [] if ignore_dirs is None else ignore_dirs |
There was a problem hiding this comment.
лучше используй
ignore_dirs = ignore_dirs or []
| LOG_LEVEL: str = Field("INFO", description="Уровень логирования") | ||
| LOG_LEVEL: str = "INFO" | ||
|
|
||
| class Config: |
There was a problem hiding this comment.
Pydantic рекомендует использовать ConfigDict
| VERSION: str = "v.:0.0.3.0" | ||
|
|
||
| # Токен бота Telegram | ||
| BOT_TOKEN: Optional[str] = Field(None, description="Токен бота от @BotFather") |
There was a problem hiding this comment.
Токен бота обязательный аргумент, так что он не должен быть None
There was a problem hiding this comment.
С python 3.10 рекомендуется использовать str | None вместо Optional
|
|
||
|
|
||
| # Создаем глобальный экземпляр настроек | ||
| settings = Settings() |
There was a problem hiding this comment.
У обязательных полей не должно быть значение None.
У тебя приложение не должно запускаться без правильных настрое
| for line in lines: | ||
| line = line.strip() | ||
| if not line: | ||
| continue |
There was a problem hiding this comment.
Старайся избегать оператора continue
Вместо этого лучше используй filter на итерируемом объекте
for line in filter(lambda r: r, lines):
логика цикла
| ELLIPSIS_LENGTH = 3 | ||
|
|
||
| # Простой кэш карточек на время сессии | ||
| _card_cache = {} |
There was a problem hiding this comment.
Посмотри в строну базы данных
так твои данные будут структурированные.
А кэш используй потом, когда будет необходим быстрый доступ к данных
|
|
||
| view_router = Router() | ||
|
|
||
| MAX_ITEM_PREVIEW_LENGTH = 50 |
|
|
||
| list_router = Router() | ||
|
|
||
| MAX_TITLE_LENGTH = 30 |
| :type callback_data: CardCallback | ||
| """ | ||
| try: | ||
| del callback_data |
There was a problem hiding this comment.
Зачем ты удаляешь callback_data?
Если она тебе не нужна, то просто не передавай ее в функцию.
There was a problem hiding this comment.
чтобы линтер не ругался
| @@ -1,3 +1,5 @@ | |||
| """Точка входа приложения""" | |||
|
|
|||
There was a problem hiding this comment.
Тут опишу общие рекомендации по структуре проекта
- весь исполняемы код, который относится к проекту помести в одну директорию (я предпочитаю называть ее "internal")
- раздели внутри все в логические модули. Если это router то в них только точки входа в приложение. Какая то бизнес логика в отдельном пакете, dto тоже в отдельном
Структура которую использую я:
├── internal -- храним весь используемый код
│ ├── app
│ ├── bot -- все что связно с ботом в проекте
│ │ ├── keyboard
│ │ ├── message
│ │ ├── middleware
│ │ └── scenes
│ ├── config
│ │ └── settings -- настройки api
│ ├── controller -- точки входа в приложение (роутеры)
│ │ ├── bot -- точки входа для бота
│ │ │ └── v1
│ │ └── http -- точки входа для fastapi
│ │ └── v1
│ ├── dto -- объекты с данными
│ ├── models -- модели базы данных
│ ├── service -- бизнес логика приложения
│ └── utils -- прочие универсальные инструменты
└── main -- точка запуска приложения
There was a problem hiding this comment.
Не дублируй название файлов и директории. Ты для этого и создаешь папочную структура, чтобы логически разделить проект
у тебя routers -> routers_webhook
называй routers -> webhooks

No description provided.