diff --git a/src/api/qualicharge/models/static.py b/src/api/qualicharge/models/static.py index 158e93ce..a1842f95 100644 --- a/src/api/qualicharge/models/static.py +++ b/src/api/qualicharge/models/static.py @@ -19,6 +19,8 @@ from pydantic_extra_types.phone_numbers import PhoneNumber from typing_extensions import Annotated +from .utils import ModelSchemaMixin + class ImplantationStationEnum(StrEnum): """Statique.implantation_station field enum.""" @@ -87,7 +89,7 @@ class FrenchPhoneNumber(PhoneNumber): ] -class Statique(BaseModel): +class Statique(ModelSchemaMixin, BaseModel): """IRVE static model.""" nom_amenageur: Optional[str] diff --git a/src/api/qualicharge/models/utils.py b/src/api/qualicharge/models/utils.py new file mode 100644 index 00000000..00cc9662 --- /dev/null +++ b/src/api/qualicharge/models/utils.py @@ -0,0 +1,11 @@ +"""QualiCharge models utilities.""" + +from sqlmodel import SQLModel + + +class ModelSchemaMixin: + """A mixin that adds Pydantic to SQLModel helpers.""" + + def get_fields_for_schema(self, schema: SQLModel): + """Get input schema-related fields/values as a dict.""" + return self.model_dump(include=set(schema.model_fields.keys())) diff --git a/src/api/qualicharge/schemas/utils.py b/src/api/qualicharge/schemas/utils.py new file mode 100644 index 00000000..6539006b --- /dev/null +++ b/src/api/qualicharge/schemas/utils.py @@ -0,0 +1,13 @@ +"""QualiCharge schemas utilities.""" + +from sqlmodel import SQLModel + +from ..models.static import Statique + + +def get_or_create(schema: SQLModel, **kwargs): + """Get or create schema instance.""" + + +def save_statique(statique: Statique): + """Save Statique instance to database.""" diff --git a/src/api/tests/models/test_static.py b/src/api/tests/models/test_static.py index 14f9635d..b7ec6d8c 100644 --- a/src/api/tests/models/test_static.py +++ b/src/api/tests/models/test_static.py @@ -2,8 +2,9 @@ from pydantic_extra_types.coordinate import Coordinate -from qualicharge.factories.static import StatiqueFactory +from qualicharge.factories.static import StatiqueFactory, AmenageurFactory from qualicharge.models.static import Statique +from qualicharge.schemas.static import Amenageur def test_statique_model_coordonneesXY(): @@ -56,3 +57,24 @@ def test_statique_model_json_schema(): assert schema["properties"]["coordonneesXY"]["title"] == "coordonneesXY" assert schema["properties"]["coordonneesXY"]["description"] == expected_description assert schema["properties"]["coordonneesXY"]["examples"] == ["[12.3, 41.5]"] + + +def test_statique_model_get_fields_for_schema(): + """Test the Statique model get_fields_for_schema method.""" + # FIXME should improve this factory + statique = StatiqueFactory.build( + id_station_itinerance="ESZUNP8891687432127666088", + id_pdc_itinerance="ESZUNE1111ER1", + telephone_operateur = "0123456789", + ) + + assert statique.get_fields_for_schema(Amenageur) == { + "nom_amenageur": statique.nom_amenageur, + "siren_amenageur": statique.siren_amenageur, + "contact_amenageur": statique.contact_amenageur, + } + + amenageur = Amenageur(**statique.get_fields_for_schema(Amenageur)) + assert amenageur.nom_amenageur == statique.nom_amenageur + assert amenageur.siren_amenageur == statique.siren_amenageur + assert amenageur.contact_amenageur == statique.contact_amenageur