fastapi

Форк
0
/
test_read_with_orm_mode.py 
88 строк · 2.4 Кб
1
from typing import Any
2

3
from fastapi import FastAPI
4
from fastapi.testclient import TestClient
5
from pydantic import BaseModel, ConfigDict
6

7
from .utils import needs_pydanticv1, needs_pydanticv2
8

9

10
@needs_pydanticv2
11
def test_read_with_orm_mode() -> None:
12
    class PersonBase(BaseModel):
13
        name: str
14
        lastname: str
15

16
    class Person(PersonBase):
17
        @property
18
        def full_name(self) -> str:
19
            return f"{self.name} {self.lastname}"
20

21
        model_config = ConfigDict(from_attributes=True)
22

23
    class PersonCreate(PersonBase):
24
        pass
25

26
    class PersonRead(PersonBase):
27
        full_name: str
28

29
        model_config = {"from_attributes": True}
30

31
    app = FastAPI()
32

33
    @app.post("/people/", response_model=PersonRead)
34
    def create_person(person: PersonCreate) -> Any:
35
        db_person = Person.model_validate(person)
36
        return db_person
37

38
    client = TestClient(app)
39

40
    person_data = {"name": "Dive", "lastname": "Wilson"}
41
    response = client.post("/people/", json=person_data)
42
    data = response.json()
43
    assert response.status_code == 200, response.text
44
    assert data["name"] == person_data["name"]
45
    assert data["lastname"] == person_data["lastname"]
46
    assert data["full_name"] == person_data["name"] + " " + person_data["lastname"]
47

48

49
@needs_pydanticv1
50
def test_read_with_orm_mode_pv1() -> None:
51
    class PersonBase(BaseModel):
52
        name: str
53
        lastname: str
54

55
    class Person(PersonBase):
56
        @property
57
        def full_name(self) -> str:
58
            return f"{self.name} {self.lastname}"
59

60
        class Config:
61
            orm_mode = True
62
            read_with_orm_mode = True
63

64
    class PersonCreate(PersonBase):
65
        pass
66

67
    class PersonRead(PersonBase):
68
        full_name: str
69

70
        class Config:
71
            orm_mode = True
72

73
    app = FastAPI()
74

75
    @app.post("/people/", response_model=PersonRead)
76
    def create_person(person: PersonCreate) -> Any:
77
        db_person = Person.from_orm(person)
78
        return db_person
79

80
    client = TestClient(app)
81

82
    person_data = {"name": "Dive", "lastname": "Wilson"}
83
    response = client.post("/people/", json=person_data)
84
    data = response.json()
85
    assert response.status_code == 200, response.text
86
    assert data["name"] == person_data["name"]
87
    assert data["lastname"] == person_data["lastname"]
88
    assert data["full_name"] == person_data["name"] + " " + person_data["lastname"]
89

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.