@xibolba

Как автоматизировать подключение роутов?

Имеется следующая структура:
handlers
|
-- __init__.py
-- handler_admin.py
-- handler_callback.py
-- handler_filter.py
|
webhook.py

в "webhook.py" я подключаю роуты из папки handlers:
dp.include_router(handler_admin.router)
dp.include_router(handler_callback.router)
dp.include_router(handler_filter.router)


Давайте представим что таких роутов сотни, возможно ли как-нибудь, без ущерба, красиво, подключать их, не заботясь о редактировании webhook.py при добавлении новых хендлеров?
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Можно сделать что-то в таком духе. Не супернадёжно, но сработает, пожалуй.
from pathlib import Path
import importlib
import sys

SCRIPT = Path(sys.argv[0]).parent.resolve()
IMPORT_FROM = 'webhooks'
for fpath in (SCRIPT / IMPORT_FROM).iterdir():
    # импортим .py файлы и подкаталоги c __init__.py внутри
    # игнорим __init__.py и подобное, а также файлы, начинающиеся с .
    if not fpath.stem.startswith('_') and not fpath.stem.startswith('.') and \
            ((fpath.suffix == '.py') or (fpath.is_dir() and (fpath / '__init__.py').is_file())):  
        try:
            # эквивалент import webhooks.имяфайла as module
            module = importlib.import_module(f'{IMPORT_FROM}.{fpath.stem}')
            dp.include_router(module.router)
        except Exception as err:
            print(err)  # журналируй ошибку
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы