Похожие чаты

Сейчас БД алхими для FastAPI подменяется примерно так (Через dependency_override).

Но возникла потребность заменить не только в том случае когда она используется в Depends, а так же и напрямую. Как будет корректно подменить БД на другую?

6 ответов

22 просмотра

https://www.core27.co/post/transactional-unit-tests-with-pytest-and-async-sqlalchemy

У тебя ещё сессия неправильно используется, тебе надо её открывать в скопе функции и там оверрайдить

Артём-Кутузов Автор вопроса
Yegor 𓃰
У тебя ещё сессия неправильно используется, тебе н...

Зачем в тестовой функции оверрайдить? Это ж куча повторяющегося когда

Я вот так вот писал, движок, приложение и фабрика сессий создаются со скоупом сессии тоже в фикстурах @asynccontextmanager async def test_session(session_factory, engine): # noqa connection = await engine.connect() trans = await connection.begin() async_session = session_factory(bind=connection) nested = await connection.begin_nested() @event.listens_for(async_session.sync_session, "after_transaction_end") def end_savepoint(session, transaction): nonlocal nested if not nested.is_active: nested = connection.sync_connection.begin_nested() yield async_session await trans.rollback() await async_session.close() await connection.close() @pytest_asyncio.fixture(scope="function") async def session( session_factory, engine, app, ) -> AsyncGenerator[AsyncSession, None]: """Get session and aquire after completion.""" async with test_session(session_factory, engine) as session: async def get_test_async_session(): yield session # runtime session sync for server and client app.dependency_overrides[get_session] = get_test_async_session yield session

Yegor 𓃰
Я вот так вот писал, движок, приложение и фабрика ...

Вот тут сессия в рантайме меняется чтоб можно было в кейсе её переиспользовать на одном уровне изоляции

Не проще ли подменить параметры подключения к БД на другие? Я сам пользуюсь оверайдом т.к. для тестирования функция session всегда в конце ролбек и клоусе делает. И в целом Я данные тестовые в сессию загоняю, и эту же сессию использую для теста методов репозитория. Т.е. методы гет, берут данные из сессии. По сути, коннекта к БД и не требуется.

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
any reference of this implementation?
BitBuddha
29
Ⓐrtto, [4/23/24 7:02 PM] Please explain more fully how it is not working exactly, and what are the steps you are taking, and what error messages come or what happens. Ⓐrtto, ...
Ezza Kezza
2
sounds like people have lost their kaspa on tradeogre... does this mean tradeogre not trustworthy?
Ezza Kezza
15
Страшнейшая правда про списки ЦБ. С первых дней жизни P2P сферы, молодые человеки, начитавшись законодательной базы и "внутренних" документов, решили, что им противостоит сер...
Foxcool
3
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
So much speculation in the last week. So much volatility in price. This is because Hedera has a GC that isn't using the network it's governing. Why aren't people asking why a...
Summit Seeker R
9
Карта сайта