Phasing out Pydantic v1's class Config
This commit is contained in:
@@ -4,7 +4,7 @@ from enum import Enum
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from beanie import PydanticObjectId
|
from beanie import PydanticObjectId
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field, ConfigDict
|
||||||
from pydantic.json_schema import SkipJsonSchema
|
from pydantic.json_schema import SkipJsonSchema
|
||||||
|
|
||||||
from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry, ForeignKey
|
from firm.core.models import CrudDocument, RichtextSingleline, RichtextMultiline, DictionaryEntry, ForeignKey
|
||||||
@@ -27,13 +27,13 @@ class ContractDraftStatus(str, Enum):
|
|||||||
|
|
||||||
|
|
||||||
class DraftParty(BaseModel):
|
class DraftParty(BaseModel):
|
||||||
|
model_config = ConfigDict(title='Partie')
|
||||||
|
|
||||||
entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
|
entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
|
||||||
part: str = Field(title="Rôle")
|
part: str = Field(title="Rôle")
|
||||||
representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
|
representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
|
||||||
|
|
||||||
entity: SkipJsonSchema[Entity] = Field(default=None, exclude=True, )
|
entity: SkipJsonSchema[Entity] = Field(default=None, exclude=True, )
|
||||||
class Config:
|
|
||||||
title = 'Partie'
|
|
||||||
|
|
||||||
|
|
||||||
class Party(BaseModel):
|
class Party(BaseModel):
|
||||||
@@ -49,15 +49,16 @@ class ContractProvisionType(Enum):
|
|||||||
template = 'template'
|
template = 'template'
|
||||||
|
|
||||||
class ProvisionGenuine(BaseModel):
|
class ProvisionGenuine(BaseModel):
|
||||||
|
model_config = ConfigDict(title='Clause personalisée')
|
||||||
|
|
||||||
type: Literal['genuine'] = ContractProvisionType.genuine
|
type: Literal['genuine'] = ContractProvisionType.genuine
|
||||||
title: str = RichtextSingleline(props={"parametrized": True}, default="", title="Titre")
|
title: str = RichtextSingleline(props={"parametrized": True}, default="", title="Titre")
|
||||||
body: str = RichtextMultiline(props={"parametrized": True}, default="", title="Corps")
|
body: str = RichtextMultiline(props={"parametrized": True}, default="", title="Corps")
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Clause personalisée'
|
|
||||||
|
|
||||||
|
|
||||||
class ContractProvisionTemplateReference(BaseModel):
|
class ContractProvisionTemplateReference(BaseModel):
|
||||||
|
model_config = ConfigDict(title='Template de clause')
|
||||||
|
|
||||||
type: Literal['template'] = ContractProvisionType.template
|
type: Literal['template'] = ContractProvisionType.template
|
||||||
provision_template_id: PydanticObjectId = ForeignKey(
|
provision_template_id: PydanticObjectId = ForeignKey(
|
||||||
"templates/provisions",
|
"templates/provisions",
|
||||||
@@ -68,15 +69,11 @@ class ContractProvisionTemplateReference(BaseModel):
|
|||||||
title="Template de clause"
|
title="Template de clause"
|
||||||
)
|
)
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Template de clause'
|
|
||||||
|
|
||||||
|
|
||||||
class DraftProvision(BaseModel):
|
class DraftProvision(BaseModel):
|
||||||
provision: ContractProvisionTemplateReference | ProvisionGenuine = Field(..., discriminator='type')
|
model_config = ConfigDict(title='Clause')
|
||||||
|
|
||||||
class Config:
|
provision: ContractProvisionTemplateReference | ProvisionGenuine = Field(..., discriminator='type')
|
||||||
title = 'Clause'
|
|
||||||
|
|
||||||
|
|
||||||
class Provision(BaseModel):
|
class Provision(BaseModel):
|
||||||
@@ -91,6 +88,7 @@ class ContractDraft(CrudDocument):
|
|||||||
"""
|
"""
|
||||||
Brouillon de contrat à remplir
|
Brouillon de contrat à remplir
|
||||||
"""
|
"""
|
||||||
|
model_config = ConfigDict(title='Brouillon de contrat')
|
||||||
|
|
||||||
name: str = Field(title="Nom")
|
name: str = Field(title="Nom")
|
||||||
title: str = Field(title="Titre")
|
title: str = Field(title="Titre")
|
||||||
@@ -109,9 +107,6 @@ class ContractDraft(CrudDocument):
|
|||||||
hour=0, minute=0, second=0)
|
hour=0, minute=0, second=0)
|
||||||
}
|
}
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Brouillon de contrat'
|
|
||||||
|
|
||||||
async def check_is_ready(self, db):
|
async def check_is_ready(self, db):
|
||||||
if self.status == ContractDraftStatus.published:
|
if self.status == ContractDraftStatus.published:
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import datetime
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from beanie import PydanticObjectId
|
from beanie import PydanticObjectId
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field, ConfigDict
|
||||||
|
|
||||||
from firm.contract.models import ContractDraft, DraftProvision, DraftParty, Contract
|
from firm.contract.models import ContractDraft, DraftProvision, DraftParty, Contract
|
||||||
|
|
||||||
@@ -42,32 +42,29 @@ class ContractDraftUpdate(ContractDraftCreate):
|
|||||||
|
|
||||||
|
|
||||||
class ForeignEntityRead(BaseModel):
|
class ForeignEntityRead(BaseModel):
|
||||||
label: str
|
model_config = ConfigDict(title='Avocat')
|
||||||
|
|
||||||
class Config:
|
label: str
|
||||||
title = "Avocat"
|
|
||||||
|
|
||||||
|
|
||||||
class PartyRead(BaseModel):
|
class PartyRead(BaseModel):
|
||||||
|
model_config = ConfigDict(title='Partie')
|
||||||
|
|
||||||
signature_affixed: bool = Field(title='Signature apposée?')
|
signature_affixed: bool = Field(title='Signature apposée?')
|
||||||
signature_uuid: str = Field(props={"display": "signature-link"}, title="Lien vers signature")
|
signature_uuid: str = Field(props={"display": "signature-link"}, title="Lien vers signature")
|
||||||
part: str = Field(title='Rôle')
|
part: str = Field(title='Rôle')
|
||||||
entity: ForeignEntityRead = Field(title='Client')
|
entity: ForeignEntityRead = Field(title='Client')
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = "Partie"
|
|
||||||
|
|
||||||
|
|
||||||
class ContractRead(Reader, Contract):
|
class ContractRead(Reader, Contract):
|
||||||
|
model_config = ConfigDict(title='Contrat')
|
||||||
|
|
||||||
parties: List[PartyRead] = Field(
|
parties: List[PartyRead] = Field(
|
||||||
props={"items_per_row": "2"},
|
props={"items_per_row": "2"},
|
||||||
title='Parties'
|
title='Parties'
|
||||||
)
|
)
|
||||||
lawyer: ForeignEntityRead
|
lawyer: ForeignEntityRead
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = "Contrat"
|
|
||||||
|
|
||||||
|
|
||||||
class ContractCreate(Writer):
|
class ContractCreate(Writer):
|
||||||
date: datetime.date
|
date: datetime.date
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import List, Literal, Optional
|
from typing import List, Literal, Optional
|
||||||
|
|
||||||
from pydantic import Field, BaseModel
|
from pydantic import Field, BaseModel, ConfigDict
|
||||||
from beanie import Indexed, PydanticObjectId
|
from beanie import Indexed, PydanticObjectId
|
||||||
|
|
||||||
from firm.core.models import CrudDocument, ForeignKey
|
from firm.core.models import CrudDocument, ForeignKey
|
||||||
@@ -15,6 +15,8 @@ class EntityType(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Individual(EntityType):
|
class Individual(EntityType):
|
||||||
|
model_config = ConfigDict(title='Particulier')
|
||||||
|
|
||||||
type: Literal['individual'] = 'individual'
|
type: Literal['individual'] = 'individual'
|
||||||
firstname: Indexed(str) = Field(title='Prénom')
|
firstname: Indexed(str) = Field(title='Prénom')
|
||||||
middlename: Indexed(str) = Field(default="", title='Autres prénoms')
|
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 '{} "{}" {}'.format(self.firstname, self.surnames[0], self.lastname)
|
||||||
return f"{self.firstname} {self.lastname}"
|
return f"{self.firstname} {self.lastname}"
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Particulier'
|
|
||||||
|
|
||||||
|
|
||||||
class Employee(BaseModel):
|
class Employee(BaseModel):
|
||||||
|
model_config = ConfigDict(title='Fiche Employé')
|
||||||
|
|
||||||
position: Indexed(str) = Field(title='Poste')
|
position: Indexed(str) = Field(title='Poste')
|
||||||
entity_id: PydanticObjectId = ForeignKey("entities", "Entity", title='Employé')
|
entity_id: PydanticObjectId = ForeignKey("entities", "Entity", title='Employé')
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Fiche Employé'
|
|
||||||
|
|
||||||
|
|
||||||
class Corporation(EntityType):
|
class Corporation(EntityType):
|
||||||
|
model_config = ConfigDict(title='Entreprise')
|
||||||
|
|
||||||
type: Literal['corporation'] = 'corporation'
|
type: Literal['corporation'] = 'corporation'
|
||||||
title: Indexed(str) = Field(title='Dénomination sociale')
|
title: Indexed(str) = Field(title='Dénomination sociale')
|
||||||
activity: Indexed(str) = Field(title='Activité')
|
activity: Indexed(str) = Field(title='Activité')
|
||||||
employees: List[Employee] = Field(default=[], title='Employés')
|
employees: List[Employee] = Field(default=[], title='Employés')
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Entreprise'
|
|
||||||
|
|
||||||
|
|
||||||
class Institution(Corporation):
|
class Institution(Corporation):
|
||||||
type: Literal['institution'] = 'institution'
|
model_config = ConfigDict(title='Institution')
|
||||||
|
|
||||||
class Config:
|
type: Literal['institution'] = 'institution'
|
||||||
title = 'Institution'
|
|
||||||
|
|
||||||
|
|
||||||
class Entity(CrudDocument):
|
class Entity(CrudDocument):
|
||||||
"""
|
"""
|
||||||
Fiche d'un client
|
Fiche d'un client
|
||||||
"""
|
"""
|
||||||
|
model_config = ConfigDict(title='Client')
|
||||||
|
|
||||||
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
|
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
|
||||||
address: str = Field(default="", title='Adresse')
|
address: str = Field(default="", title='Adresse')
|
||||||
|
|
||||||
@@ -83,9 +81,6 @@ class Entity(CrudDocument):
|
|||||||
hour=0, minute=0, second=0)
|
hour=0, minute=0, second=0)
|
||||||
}
|
}
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Client'
|
|
||||||
|
|
||||||
|
|
||||||
class EntityFilters(FilterSchema):
|
class EntityFilters(FilterSchema):
|
||||||
class Constants(Filter.Constants):
|
class Constants(Filter.Constants):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from pydantic import Field
|
from pydantic import Field, ConfigDict
|
||||||
|
|
||||||
from firm.entity.models import Entity, Institution, Individual, Corporation
|
from firm.entity.models import Entity, Institution, Individual, Corporation
|
||||||
from firm.core.schemas import Writer, Reader
|
from firm.core.schemas import Writer, Reader
|
||||||
@@ -7,12 +7,11 @@ class EntityRead(Reader, Entity):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
class EntityCreate(Writer):
|
class EntityCreate(Writer):
|
||||||
|
model_config = ConfigDict(title="Création d'un client")
|
||||||
|
|
||||||
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
|
entity_data: Individual | Corporation | Institution = Field(..., discriminator='type')
|
||||||
address: str = Field(default="", title='Adresse')
|
address: str = Field(default="", title='Adresse')
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = "Création d'un client"
|
|
||||||
|
|
||||||
class EntityIndividualCreate(EntityCreate):
|
class EntityIndividualCreate(EntityCreate):
|
||||||
entity_data: Individual
|
entity_data: Individual
|
||||||
|
|
||||||
|
|||||||
@@ -2,20 +2,19 @@ from typing import List, Optional
|
|||||||
from html import unescape
|
from html import unescape
|
||||||
|
|
||||||
from beanie import PydanticObjectId
|
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.models import CrudDocument, RichtextMultiline, RichtextSingleline, DictionaryEntry, ForeignKey
|
||||||
from firm.core.filter import Filter, FilterSchema
|
from firm.core.filter import Filter, FilterSchema
|
||||||
|
|
||||||
|
|
||||||
class PartyTemplate(BaseModel):
|
class PartyTemplate(BaseModel):
|
||||||
|
model_config = ConfigDict(title="Partie")
|
||||||
|
|
||||||
entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
|
entity_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Partie")
|
||||||
part: str = Field(title="Rôle")
|
part: str = Field(title="Rôle")
|
||||||
representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
|
representative_id: Optional[PydanticObjectId] = ForeignKey("entities", "Entity", default=None, title="Représentant")
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Partie'
|
|
||||||
|
|
||||||
|
|
||||||
def remove_html_tags(text):
|
def remove_html_tags(text):
|
||||||
"""Remove html tags from a string"""
|
"""Remove html tags from a string"""
|
||||||
@@ -28,6 +27,7 @@ class ProvisionTemplate(CrudDocument):
|
|||||||
"""
|
"""
|
||||||
Modèle de clause à décliner
|
Modèle de clause à décliner
|
||||||
"""
|
"""
|
||||||
|
model_config = ConfigDict(title="Template de clause")
|
||||||
|
|
||||||
name: str = Field(title="Nom")
|
name: str = Field(title="Nom")
|
||||||
title: str = RichtextSingleline(title="Titre")
|
title: str = RichtextSingleline(title="Titre")
|
||||||
@@ -39,11 +39,10 @@ class ProvisionTemplate(CrudDocument):
|
|||||||
class Settings(CrudDocument.Settings):
|
class Settings(CrudDocument.Settings):
|
||||||
fulltext_search = ['name', 'title', 'body']
|
fulltext_search = ['name', 'title', 'body']
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Template de clause'
|
|
||||||
|
|
||||||
|
|
||||||
class ProvisionTemplateReference(BaseModel):
|
class ProvisionTemplateReference(BaseModel):
|
||||||
|
model_config = ConfigDict(title="Clause")
|
||||||
|
|
||||||
provision_template_id: PydanticObjectId = ForeignKey(
|
provision_template_id: PydanticObjectId = ForeignKey(
|
||||||
"templates/provisions",
|
"templates/provisions",
|
||||||
"TemplateProvision",
|
"TemplateProvision",
|
||||||
@@ -52,14 +51,13 @@ class ProvisionTemplateReference(BaseModel):
|
|||||||
title="Template de clause"
|
title="Template de clause"
|
||||||
)
|
)
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Clause'
|
|
||||||
|
|
||||||
|
|
||||||
class ContractTemplate(CrudDocument):
|
class ContractTemplate(CrudDocument):
|
||||||
"""
|
"""
|
||||||
Modèle de contrat à décliner
|
Modèle de contrat à décliner
|
||||||
"""
|
"""
|
||||||
|
model_config = ConfigDict(title="Template de contrat")
|
||||||
|
|
||||||
name: str = Field(title="Nom")
|
name: str = Field(title="Nom")
|
||||||
title: str = Field(title="Titre")
|
title: str = Field(title="Titre")
|
||||||
parties: List[PartyTemplate] = Field(default=[], title="Parties")
|
parties: List[PartyTemplate] = Field(default=[], title="Parties")
|
||||||
@@ -72,9 +70,6 @@ class ContractTemplate(CrudDocument):
|
|||||||
class Settings(CrudDocument.Settings):
|
class Settings(CrudDocument.Settings):
|
||||||
fulltext_search = ['name', 'title']
|
fulltext_search = ['name', 'title']
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Template de contrat'
|
|
||||||
|
|
||||||
|
|
||||||
class ContractTemplateFilters(FilterSchema):
|
class ContractTemplateFilters(FilterSchema):
|
||||||
class Constants(Filter.Constants):
|
class Constants(Filter.Constants):
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from pydantic import Field
|
from pydantic import Field, ConfigDict
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from firm.template.models import ContractTemplate, ProvisionTemplate, PartyTemplate, ProvisionTemplateReference, DictionaryEntry
|
from firm.template.models import ContractTemplate, ProvisionTemplate, PartyTemplate, ProvisionTemplateReference, DictionaryEntry
|
||||||
@@ -11,6 +11,8 @@ class ContractTemplateRead(Reader, ContractTemplate):
|
|||||||
|
|
||||||
|
|
||||||
class ContractTemplateCreate(Writer):
|
class ContractTemplateCreate(Writer):
|
||||||
|
model_config = ConfigDict(title="Template de Contrat")
|
||||||
|
|
||||||
name: str = Field(title="Nom")
|
name: str = Field(title="Nom")
|
||||||
title: str = Field(title="Titre")
|
title: str = Field(title="Titre")
|
||||||
parties: List[PartyTemplate] = Field(
|
parties: List[PartyTemplate] = Field(
|
||||||
@@ -28,9 +30,6 @@ class ContractTemplateCreate(Writer):
|
|||||||
title="Variables"
|
title="Variables"
|
||||||
)
|
)
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Template de Contrat'
|
|
||||||
|
|
||||||
|
|
||||||
class ContractTemplateUpdate(ContractTemplateCreate):
|
class ContractTemplateUpdate(ContractTemplateCreate):
|
||||||
pass
|
pass
|
||||||
@@ -41,13 +40,12 @@ class ProvisionTemplateRead(Reader, ProvisionTemplate):
|
|||||||
|
|
||||||
|
|
||||||
class ProvisionTemplateCreate(Writer):
|
class ProvisionTemplateCreate(Writer):
|
||||||
|
model_config = ConfigDict(title="Template de Clause")
|
||||||
|
|
||||||
name: str = Field(title="Nom")
|
name: str = Field(title="Nom")
|
||||||
title: str = RichtextSingleline(title="Titre")
|
title: str = RichtextSingleline(title="Titre")
|
||||||
body: str = RichtextMultiline(title="Corps")
|
body: str = RichtextMultiline(title="Corps")
|
||||||
|
|
||||||
class Config:
|
|
||||||
title = 'Template de Clause'
|
|
||||||
|
|
||||||
|
|
||||||
class ProvisionTemplateUpdate(ProvisionTemplateCreate):
|
class ProvisionTemplateUpdate(ProvisionTemplateCreate):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -229,7 +229,7 @@
|
|||||||
"resource_plural": "Contract Templates"
|
"resource_plural": "Contract Templates"
|
||||||
},
|
},
|
||||||
"party_template": {
|
"party_template": {
|
||||||
"entity_id": "Party Template",
|
"entity_id": "Entity",
|
||||||
"representative_id": "Representative",
|
"representative_id": "Representative",
|
||||||
"part": "Part",
|
"part": "Part",
|
||||||
"resource_title": "Party"
|
"resource_title": "Party"
|
||||||
|
|||||||
Reference in New Issue
Block a user