Skip to content

Commit

Permalink
WIP: add model to schema utils
Browse files Browse the repository at this point in the history
  • Loading branch information
jmaupetit committed Apr 23, 2024
1 parent 63841e4 commit 719a243
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 2 deletions.
4 changes: 3 additions & 1 deletion src/api/qualicharge/models/static.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down Expand Up @@ -87,7 +89,7 @@ class FrenchPhoneNumber(PhoneNumber):
]


class Statique(BaseModel):
class Statique(ModelSchemaMixin, BaseModel):
"""IRVE static model."""

nom_amenageur: Optional[str]
Expand Down
11 changes: 11 additions & 0 deletions src/api/qualicharge/models/utils.py
Original file line number Diff line number Diff line change
@@ -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()))
13 changes: 13 additions & 0 deletions src/api/qualicharge/schemas/utils.py
Original file line number Diff line number Diff line change
@@ -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."""
24 changes: 23 additions & 1 deletion src/api/tests/models/test_static.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down Expand Up @@ -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

0 comments on commit 719a243

Please sign in to comment.