Phasing out Pydantic v1's class Config

This commit is contained in:
2025-05-03 22:28:41 +02:00
parent 90a46ada2d
commit a9e9f97c14
7 changed files with 45 additions and 66 deletions

View File

@@ -4,7 +4,7 @@ from enum import Enum
from uuid import UUID
from beanie import PydanticObjectId
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, ConfigDict
from pydantic.json_schema import SkipJsonSchema
from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry, ForeignKey
@@ -27,13 +27,13 @@ class ContractDraftStatus(str, Enum):
class DraftParty(BaseModel):
model_config = ConfigDict(title='Partie')
entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
part: str = Field(title="Rôle")
representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
entity: SkipJsonSchema[Entity] = Field(default=None, exclude=True, )
class Config:
title = 'Partie'
class Party(BaseModel):
@@ -49,15 +49,16 @@ class ContractProvisionType(Enum):
template = 'template'
class ProvisionGenuine(BaseModel):
model_config = ConfigDict(title='Clause personalisée')
type: Literal['genuine'] = ContractProvisionType.genuine
title: str = RichtextSingleline(props={"parametrized": True}, default="", title="Titre")
body: str = RichtextMultiline(props={"parametrized": True}, default="", title="Corps")
class Config:
title = 'Clause personalisée'
class ContractProvisionTemplateReference(BaseModel):
model_config = ConfigDict(title='Template de clause')
type: Literal['template'] = ContractProvisionType.template
provision_template_id: PydanticObjectId = ForeignKey(
"templates/provisions",
@@ -68,15 +69,11 @@ class ContractProvisionTemplateReference(BaseModel):
title="Template de clause"
)
class Config:
title = 'Template de clause'
class DraftProvision(BaseModel):
provision: ContractProvisionTemplateReference | ProvisionGenuine = Field(..., discriminator='type')
model_config = ConfigDict(title='Clause')
class Config:
title = 'Clause'
provision: ContractProvisionTemplateReference | ProvisionGenuine = Field(..., discriminator='type')
class Provision(BaseModel):
@@ -91,6 +88,7 @@ class ContractDraft(CrudDocument):
"""
Brouillon de contrat à remplir
"""
model_config = ConfigDict(title='Brouillon de contrat')
name: str = Field(title="Nom")
title: str = Field(title="Titre")
@@ -109,9 +107,6 @@ class ContractDraft(CrudDocument):
hour=0, minute=0, second=0)
}
class Config:
title = 'Brouillon de contrat'
async def check_is_ready(self, db):
if self.status == ContractDraftStatus.published:
return

View File

@@ -2,7 +2,7 @@ import datetime
from typing import List
from beanie import PydanticObjectId
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, ConfigDict
from firm.contract.models import ContractDraft, DraftProvision, DraftParty, Contract
@@ -42,32 +42,29 @@ class ContractDraftUpdate(ContractDraftCreate):
class ForeignEntityRead(BaseModel):
label: str
model_config = ConfigDict(title='Avocat')
class Config:
title = "Avocat"
label: str
class PartyRead(BaseModel):
model_config = ConfigDict(title='Partie')
signature_affixed: bool = Field(title='Signature apposée?')
signature_uuid: str = Field(props={"display": "signature-link"}, title="Lien vers signature")
part: str = Field(title='Rôle')
entity: ForeignEntityRead = Field(title='Client')
class Config:
title = "Partie"
class ContractRead(Reader, Contract):
model_config = ConfigDict(title='Contrat')
parties: List[PartyRead] = Field(
props={"items_per_row": "2"},
title='Parties'
)
lawyer: ForeignEntityRead
class Config:
title = "Contrat"
class ContractCreate(Writer):
date: datetime.date

View File

@@ -1,7 +1,7 @@
from datetime import date, datetime
from typing import List, Literal, Optional
from pydantic import Field, BaseModel
from pydantic import Field, BaseModel, ConfigDict
from beanie import Indexed, PydanticObjectId
from firm.core.models import CrudDocument, ForeignKey
@@ -15,6 +15,8 @@ class EntityType(BaseModel):
class Individual(EntityType):
model_config = ConfigDict(title='Particulier')
type: Literal['individual'] = 'individual'
firstname: Indexed(str) = Field(title='Prénom')
middlename: Indexed(str) = Field(default="", title='Autres prénoms')
@@ -33,39 +35,35 @@ class Individual(EntityType):
# return '{} "{}" {}'.format(self.firstname, self.surnames[0], self.lastname)
return f"{self.firstname} {self.lastname}"
class Config:
title = 'Particulier'
class Employee(BaseModel):
model_config = ConfigDict(title='Fiche Employé')
position: Indexed(str) = Field(title='Poste')
entity_id: PydanticObjectId = ForeignKey("entities", "Entity", title='Employé')
class Config:
title = 'Fiche Employé'
class Corporation(EntityType):
model_config = ConfigDict(title='Entreprise')
type: Literal['corporation'] = 'corporation'
title: Indexed(str) = Field(title='Dénomination sociale')
activity: Indexed(str) = Field(title='Activité')
employees: List[Employee] = Field(default=[], title='Employés')
class Config:
title = 'Entreprise'
class Institution(Corporation):
type: Literal['institution'] = 'institution'
model_config = ConfigDict(title='Institution')
class Config:
title = 'Institution'
type: Literal['institution'] = 'institution'
class Entity(CrudDocument):
"""
Fiche d'un client
"""
model_config = ConfigDict(title='Client')
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
address: str = Field(default="", title='Adresse')
@@ -83,9 +81,6 @@ class Entity(CrudDocument):
hour=0, minute=0, second=0)
}
class Config:
title = 'Client'
class EntityFilters(FilterSchema):
class Constants(Filter.Constants):

View File

@@ -1,4 +1,4 @@
from pydantic import Field
from pydantic import Field, ConfigDict
from firm.entity.models import Entity, Institution, Individual, Corporation
from firm.core.schemas import Writer, Reader
@@ -7,12 +7,11 @@ class EntityRead(Reader, Entity):
pass
class EntityCreate(Writer):
model_config = ConfigDict(title="Création d'un client")
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
address: str = Field(default="", title='Adresse')
class Config:
title = "Création d'un client"
class EntityIndividualCreate(EntityCreate):
entity_data: Individual

View File

@@ -2,20 +2,19 @@ from typing import List, Optional
from html import unescape
from beanie import PydanticObjectId
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, ConfigDict
from firm.core.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry, ForeignKey
from firm.core.filter import Filter, FilterSchema
class PartyTemplate(BaseModel):
model_config = ConfigDict(title="Partie")
entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
part: str = Field(title="Rôle")
representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
class Config:
title = 'Partie'
def remove_html_tags(text):
"""Remove html tags from a string"""
@@ -28,6 +27,7 @@ class ProvisionTemplate(CrudDocument):
"""
Modèle de clause à décliner
"""
model_config = ConfigDict(title="Template de clause")
name: str = Field(title="Nom")
title: str = RichtextSingleline(title="Titre")
@@ -39,11 +39,10 @@ class ProvisionTemplate(CrudDocument):
class Settings(CrudDocument.Settings):
fulltext_search = ['name', 'title', 'body']
class Config:
title = 'Template de clause'
class ProvisionTemplateReference(BaseModel):
model_config = ConfigDict(title="Clause")
provision_template_id: PydanticObjectId = ForeignKey(
"templates/provisions",
"TemplateProvision",
@@ -52,14 +51,13 @@ class ProvisionTemplateReference(BaseModel):
title="Template de clause"
)
class Config:
title = 'Clause'
class ContractTemplate(CrudDocument):
"""
Modèle de contrat à décliner
"""
model_config = ConfigDict(title="Template de contrat")
name: str = Field(title="Nom")
title: str = Field(title="Titre")
parties: List[PartyTemplate] = Field(default=[], title="Parties")
@@ -72,9 +70,6 @@ class ContractTemplate(CrudDocument):
class Settings(CrudDocument.Settings):
fulltext_search = ['name', 'title']
class Config:
title = 'Template de contrat'
class ContractTemplateFilters(FilterSchema):
class Constants(Filter.Constants):

View File

@@ -1,4 +1,4 @@
from pydantic import Field
from pydantic import Field, ConfigDict
from typing import List
from firm.template.models import ContractTemplate, ProvisionTemplate, PartyTemplate, ProvisionTemplateReference, DictionaryEntry
@@ -11,6 +11,8 @@ class ContractTemplateRead(Reader, ContractTemplate):
class ContractTemplateCreate(Writer):
model_config = ConfigDict(title="Template de Contrat")
name: str = Field(title="Nom")
title: str = Field(title="Titre")
parties: List[PartyTemplate] = Field(
@@ -28,9 +30,6 @@ class ContractTemplateCreate(Writer):
title="Variables"
)
class Config:
title = 'Template de Contrat'
class ContractTemplateUpdate(ContractTemplateCreate):
pass
@@ -41,13 +40,12 @@ class ProvisionTemplateRead(Reader, ProvisionTemplate):
class ProvisionTemplateCreate(Writer):
model_config = ConfigDict(title="Template de Clause")
name: str = Field(title="Nom")
title: str = RichtextSingleline(title="Titre")
body: str = RichtextMultiline(title="Corps")
class Config:
title = 'Template de Clause'
class ProvisionTemplateUpdate(ProvisionTemplateCreate):
pass

View File

@@ -229,7 +229,7 @@
"resource_plural": "Contract Templates"
},
"party_template": {
"entity_id": "Party Template",
"entity_id": "Entity",
"representative_id": "Representative",
"part": "Part",
"resource_title": "Party"