Aller au contenu

Enum wrapping

Les enums utilisé·e·s par les façades (NomCode, TypeChampCode, SortCode, etc. dans pylegifrance/models/<fond>/enum.py) encapsulent les enums générés dans pylegifrance/models/generated/model.py.

# models/code/enum.py (domaine, public)
class NomCode(str, Enum):
CC = "Code civil"
CP = "Code pénal"
# …
def to_generated(self) -> GeneratedNomCode:
return GeneratedNomCode(self.value)
@classmethod
def from_generated(cls, g: GeneratedNomCode) -> "NomCode":
return cls(g.value)

Les modèles de domaine exposent to_generated() pour la sérialisation API, et — quand c’est pertinent — un from_generated() classmethod pour la désérialisation.

  • Les enums générés changent à chaque régénération depuis legifrance.json.
  • Les enums de domaine restent stables même si l’upstream renomme ou ajoute des valeurs.
  • Ça permet de nommer joliment côté public (NomCode.CC) et de mapper vers un identifiant brut côté API ("LEGITEXT000006070721" ou la valeur enum générée).
  • Classes : PascalCase (NomCode, TypeChampCode).
  • Valeurs : MAJUSCULES_AVEC_TIRETS_BAS pour les enums d’action (TypeRecherche.EXACTE, Operateur.ET). Valeurs lisibles (libellés de code) pour les enums « catalogue » (NomCode.CC).