Проверьте настройки Pydantic в FastAPIPython

Программы на Python
Ответить
Anonymous
 Проверьте настройки Pydantic в FastAPI

Сообщение Anonymous »

Предположим, мой файл main.py такой (это упрощенный пример: в моем приложении я использую реальную базу данных и у меня есть два разных URI базы данных для разработки и тестирования):

Код: Выделить всё

from fastapi import FastAPI
from pydantic import BaseSettings

app = FastAPI()

class Settings(BaseSettings):
ENVIRONMENT: str

class Config:
env_file = ".env"
case_sensitive = True

settings = Settings()

databases = {
"dev": "Development",
"test": "Testing"
}
database = databases[settings.ENVIRONMENT]

@app.get("/")
def read_root():
return {"Environment": database}
в то время как .env

Код: Выделить всё

ENVIRONMENT=dev
Предположим, я хочу протестировать свой код и хочу установить ENVIRONMENT=test для использования тестовой базы данных. Что я должен делать? В документации FastAPI (https://fastapi.tiangolo.com/advanced/s ... nd-testing) есть хороший пример, но он касается зависимостей, поэтому, насколько мне известно, это другой случай.

Моя идея заключалась в следующем ():

Код: Выделить всё

import pytest

from fastapi.testclient import TestClient

from main import app

@pytest.fixture(scope="session", autouse=True)
def test_config(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")

@pytest.fixture(scope="session")
def client():
return TestClient(app)

def test_root(client):
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Environment": "Testing"}
но это не работает.

Кроме того, я получаю эту ошибку:

Код: Выделить всё

ScopeMismatch: You tried to access the 'function' scoped fixture 'monkeypatch' with a 'session' scoped request object, involved factories
test.py:7:  def test_config(monkeypatch)
env\lib\site-packages\_pytest\monkeypatch.py:16:  def monkeypatch()
хотя из официальной документации pytest все должно работать (https://docs.pytest.org/en/3.0.1/monkey ... l#example- установка-переменной-среды-для-тестовой-сессии). У меня установлена ​​последняя версия pytest.

Из-за этого я пытался использовать определенные переменные тестовой среды: https://pydantic-docs.helpmanual. io/usage/settings/#field-value-priority.

Честно говоря, я запутался, моя единственная реальная цель — иметь другую тестовую конфигурацию (в так же работает Flask: https://flask.palletsprojects.com/en/1. ... d-fixtures). Я подхожу к проблеме неправильно?

Подробнее здесь: https://stackoverflow.com/questions/615 ... in-fastapi
Ответить

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

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

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

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

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