Как получить доступ к зависимости приложения в FastAPI, когда не выполняется внедрение в конечную точкуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как получить доступ к зависимости приложения в FastAPI, когда не выполняется внедрение в конечную точку

Сообщение Anonymous »

В моем файле main.py, где определено приложение FastApi, мне нужно выполнить некоторую инициализацию, при которой я загружаю данные из базы данных в кеш. Когда мое приложение работает нормально, оно вызывает функцию get_db() для возврата сеанса SqlServer, и эта функция get_db используется в конечных точках с использованием session=Depends(get_db) в параметрах. Мне нужен какой-то вызов, чтобы получить правильную функцию get_db на основе зависимостей приложения, чтобы она использовала версию переопределения, которую я определил в testconf.py, когда я запускаю pytests. Как мне это сделать?
#database.py
engine = create_engine("sqlserver connection string here")
SessionLocal - sessionmaker(autocommit=False,autoflush=False,bind=engine)
def get_db ():
# standard way to get db in FastAPI
db = SessionLocal()
yield db

#main.py
from database import get_db

# When running pytests, its not finding the override version in
# in the app dependencies
if fn := app.dependency_overrides.get(get_db):
sess = next(fn())
else:
sess = next(get_db())
CacheService.load_cache(sess)

testconf.py

#defines fixtures used by pytests
@pytest.fixture
def engine():
url = "sqlite://"
return create_engine(url, ...)

@pytest.fixture
def app_session(engine):
TestingSessionLocal = sessionmaker(...bind=engine)
def override_get_db():
db = TestingSessionLocal()
yield db
app.dependency_overrides[get_db] = override_get_db
return app

@pytest.fixture
def client(app_session):
return TestClient(app=appsession)

#some test
def test_something(app_session, client):
# It loads the caches using a sqlserver session
client.get("url")



Подробнее здесь: https://stackoverflow.com/questions/786 ... o-endpoint
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»