Browse Source

python 3.8 and pydantic 1 compat

pull/13464/head
sneakers-the-rat 1 month ago
parent
commit
a2ad8b187f
No known key found for this signature in database GPG Key ID: 6DCB96EF1E4D232D
  1. 52
      tests/test_forms_defaults.py

52
tests/test_forms_defaults.py

@ -1,29 +1,49 @@
from typing import Annotated, Optional from importlib.metadata import version
from typing import Optional
import pytest import pytest
from fastapi import FastAPI, Form from fastapi import FastAPI, Form
from pydantic import BaseModel, Field, model_validator from pydantic import BaseModel, Field
from starlette.testclient import TestClient from starlette.testclient import TestClient
from typing_extensions import Annotated
PYDANTIC_V2 = int(version("pydantic")[0]) >= 2
if PYDANTIC_V2:
from pydantic import model_validator
else:
from pydantic import root_validator
def _validate_input(value: dict) -> dict:
"""
model validators in before mode should receive values passed
to model instantiation before any further validation
"""
# we should not be double-instantiating the models
assert isinstance(value, dict)
value["init_input"] = value.copy()
# differentiate between explicit Nones and unpassed values
if "true_if_unset" not in value:
value["true_if_unset"] = True
return value
class Parent(BaseModel): class Parent(BaseModel):
init_input: dict init_input: dict
# importantly, no default here # importantly, no default here
@model_validator(mode="before") if PYDANTIC_V2:
def validate_inputs(cls, value: dict) -> dict:
""" @model_validator(mode="before")
model validators in before mode should receive values passed def validate_inputs(cls, value: dict) -> dict:
to model instantiation before any further validation return _validate_input(value)
""" else:
# we should not be double-instantiating the models
assert isinstance(value, dict) @root_validator(pre=True)
value["init_input"] = value.copy() def validate_inputs(cls, value: dict) -> dict:
return _validate_input(value)
# differentiate between explicit Nones and unpassed values
if "true_if_unset" not in value:
value["true_if_unset"] = True
return value
class StandardModel(Parent): class StandardModel(Parent):

Loading…
Cancel
Save