Обновить

LitestarCatsCV. Тренируемся на кошках. Реализация API и работа с данными. Часть 2

Уровень сложностиПростой
Время на прочтение17 мин
Охват и читатели1.4K
Всего голосов 8: ↑8 и ↓0+11
Комментарии2

Комментарии 2

Откуда на этапе настройки alembic/env.py взялось следующее?

from src.postgres.models.base import Base

Кстати, почему бы не использовать pathlib вместо os.path, который везде помечается не иначе, как obsolete? Да и множество вложенных вызовов делают код трудночитаемым.

from importlib import import_module
from pathlib import Path

from src.postgres.models.base import Base


src_dir = Path(__file__).absolute().parent.parent.parent

# Настройка конфигурации
config = context.config
config_file = src_dir / "configs" / "alembic.ini"
fileConfig(config_file)

# Динамически импортируем все модели из src/models/
models_dir = src_dir / "postgres" / "models"
for path in models_dir.glob("*.py"):
    if path.stem in ("__init__", "base"):
        continue
    module_name = '.'.join((*models_dir.parts[-3:], path.stem))
    import_module(module_name)

#Добавляем Метаданные модели
target_metadata = Base.metadata

Спасибо, что обратили внимание! Насчёт `from src.postgres.models.base import Base` — вы правы, это действительно отголосок первоначальной задумки. Изначально я хотел использовать базовый класс Base для всех моделей, но потом перешёл на другой подход, для репозитория нужно использовать другой класс, а в статье забыл обновить этот момент в процессе редактирования. Сейчас там используется более подходящий вариант —

from litestar.plugins.sqlalchemy import base

Исправлю в тексте, чтобы не вводить в заблуждение!

Про pathlib скажу, что он действительно удобнее, os.path использовал как говориться "по-умолчанию", по привычке. Пожалуй, внесу эту правку в код. Спасибо за полезный комментарий!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации