Simplified pydantic models' name

This commit is contained in:
fanilo 2026-01-02 12:09:38 +01:00
parent 5e4231e115
commit 06c9fbb929
15 changed files with 133 additions and 133 deletions

View file

@ -39,7 +39,7 @@ settings = Settings()
def validate_settings():
"""Validation au démarrage"""
if not settings.chemin_base or not settings.mot_de_passe:
raise ValueError(" CHEMIN_BASE et MOT_DE_PASSE requis dans .env")
raise ValueError(" CHEMIN_BASE ou MOT_DE_PASSE requis dans .env")
if not settings.sage_gateway_token:
raise ValueError(" SAGE_GATEWAY_TOKEN requis (doit être identique sur Linux)")
return True

108
main.py
View file

@ -8,36 +8,36 @@ import win32com.client
from config import settings, validate_settings
from sage_connector import SageConnector
from schemas import (
TiersListRequest,
ContactCreateRequest,
ContactDeleteRequest,
ContactGetRequest,
ContactListRequest,
ContactUpdateRequest,
ClientCreateRequest,
ClientUpdateGatewayRequest,
TiersList,
ContactCreate,
ContactDelete,
ContactGet,
ContactList,
ContactUpdate,
ClientCreate,
ClientUpdate,
FiltreRequest,
ChampLibreRequest,
ChampLibre,
CodeRequest,
DevisRequest,
DocumentGetRequest,
FournisseurCreateRequest,
FournisseurUpdateGatewayRequest,
AvoirCreateGatewayRequest,
AvoirUpdateGatewayRequest,
CommandeCreateRequest,
CommandeUpdateGatewayRequest,
FactureCreateGatewayRequest,
FactureUpdateGatewayRequest,
LivraisonCreateGatewayRequest,
LivraisonUpdateGatewayRequest,
ArticleCreateRequest,
ArticleUpdateGatewayRequest,
EntreeStockRequest,
SortieStockRequest,
DocumentGet,
FournisseurCreate,
FournisseurUpdate,
AvoirCreate,
AvoirUpdate,
CommandeCreate,
CommandeUpdate,
FactureCreate,
FactureUpdate,
LivraisonCreate,
LivraisonUpdate,
ArticleCreate,
ArticleUpdate,
EntreeStock,
SortieStock,
FamilleCreate,
PDFGenerationRequest,
DevisUpdateGatewayRequest,
PDFGeneration,
DevisUpdate,
)
logging.basicConfig(
@ -58,7 +58,7 @@ def verify_token(x_sage_token: str = Header(...)):
app = FastAPI(
title="Sage Gateway - Windows Server",
version="1.0.0",
version="4.0.0",
description="Passerelle d'accès à Sage 100c pour VPS Linux",
)
@ -126,7 +126,7 @@ def clients_list(req: FiltreRequest):
@app.post("/sage/clients/update", dependencies=[Depends(verify_token)])
def modifier_client_endpoint(req: ClientUpdateGatewayRequest):
def modifier_client_endpoint(req: ClientUpdate):
try:
resultat = sage.modifier_client(req.code, req.client_data)
return {"success": True, "data": resultat}
@ -155,7 +155,7 @@ def client_get(req: CodeRequest):
@app.post("/sage/clients/create", dependencies=[Depends(verify_token)])
def create_client_endpoint(req: ClientCreateRequest):
def create_client_endpoint(req: ClientCreate):
"""Création d'un client dans Sage"""
try:
resultat = sage.creer_client(req.dict())
@ -288,7 +288,7 @@ def changer_statut_document(numero: str, type_doc: int, nouveau_statut: int):
@app.post("/sage/documents/get", dependencies=[Depends(verify_token)])
def lire_document(req: DocumentGetRequest):
def lire_document(req: DocumentGet):
"""Lecture d'un document (commande, facture, etc.)"""
try:
doc = sage.lire_document(req.numero, req.type_doc)
@ -351,7 +351,7 @@ def transformer_document(
@app.post("/sage/documents/champ-libre", dependencies=[Depends(verify_token)])
def maj_champ_libre(req: ChampLibreRequest):
def maj_champ_libre(req: ChampLibre):
try:
success = sage.mettre_a_jour_champ_libre(
req.doc_id, req.type_doc, req.nom_champ, req.valeur
@ -520,7 +520,7 @@ def fournisseurs_list(req: FiltreRequest):
@app.post("/sage/fournisseurs/create", dependencies=[Depends(verify_token)])
def create_fournisseur_endpoint(req: FournisseurCreateRequest):
def create_fournisseur_endpoint(req: FournisseurCreate):
try:
resultat = sage.creer_fournisseur(req.dict())
@ -538,7 +538,7 @@ def create_fournisseur_endpoint(req: FournisseurCreateRequest):
@app.post("/sage/fournisseurs/update", dependencies=[Depends(verify_token)])
def modifier_fournisseur_endpoint(req: FournisseurUpdateGatewayRequest):
def modifier_fournisseur_endpoint(req: FournisseurUpdate):
try:
resultat = sage.modifier_fournisseur(req.code, req.fournisseur_data)
return {"success": True, "data": resultat}
@ -665,7 +665,7 @@ def livraison_get(req: CodeRequest):
@app.post("/sage/devis/update", dependencies=[Depends(verify_token)])
def modifier_devis_endpoint(req: DevisUpdateGatewayRequest):
def modifier_devis_endpoint(req: DevisUpdate):
try:
resultat = sage.modifier_devis(req.numero, req.devis_data)
return {"success": True, "data": resultat}
@ -679,7 +679,7 @@ def modifier_devis_endpoint(req: DevisUpdateGatewayRequest):
@app.post("/sage/commandes/create", dependencies=[Depends(verify_token)])
def creer_commande_endpoint(req: CommandeCreateRequest):
def creer_commande_endpoint(req: CommandeCreate):
try:
commande_data = {
"client": {"code": req.client_id, "intitule": ""},
@ -701,7 +701,7 @@ def creer_commande_endpoint(req: CommandeCreateRequest):
@app.post("/sage/commandes/update", dependencies=[Depends(verify_token)])
def modifier_commande_endpoint(req: CommandeUpdateGatewayRequest):
def modifier_commande_endpoint(req: CommandeUpdate):
try:
resultat = sage.modifier_commande(req.numero, req.commande_data)
return {"success": True, "data": resultat}
@ -715,7 +715,7 @@ def modifier_commande_endpoint(req: CommandeUpdateGatewayRequest):
@app.post("/sage/livraisons/create", dependencies=[Depends(verify_token)])
def creer_livraison_endpoint(req: LivraisonCreateGatewayRequest):
def creer_livraison_endpoint(req: LivraisonCreate):
try:
client = sage.lire_client(req.client_id)
if not client:
@ -741,7 +741,7 @@ def creer_livraison_endpoint(req: LivraisonCreateGatewayRequest):
@app.post("/sage/livraisons/update", dependencies=[Depends(verify_token)])
def modifier_livraison_endpoint(req: LivraisonUpdateGatewayRequest):
def modifier_livraison_endpoint(req: LivraisonUpdate):
try:
resultat = sage.modifier_livraison(req.numero, req.livraison_data)
return {"success": True, "data": resultat}
@ -755,7 +755,7 @@ def modifier_livraison_endpoint(req: LivraisonUpdateGatewayRequest):
@app.post("/sage/avoirs/create", dependencies=[Depends(verify_token)])
def creer_avoir_endpoint(req: AvoirCreateGatewayRequest):
def creer_avoir_endpoint(req: AvoirCreate):
try:
client = sage.lire_client(req.client_id)
if not client:
@ -781,7 +781,7 @@ def creer_avoir_endpoint(req: AvoirCreateGatewayRequest):
@app.post("/sage/avoirs/update", dependencies=[Depends(verify_token)])
def modifier_avoir_endpoint(req: AvoirUpdateGatewayRequest):
def modifier_avoir_endpoint(req: AvoirUpdate):
"""
Modification d'un avoir dans Sage
"""
@ -798,7 +798,7 @@ def modifier_avoir_endpoint(req: AvoirUpdateGatewayRequest):
@app.post("/sage/factures/create", dependencies=[Depends(verify_token)])
def creer_facture_endpoint(req: FactureCreateGatewayRequest):
def creer_facture_endpoint(req: FactureCreate):
try:
client = sage.lire_client(req.client_id)
if not client:
@ -824,7 +824,7 @@ def creer_facture_endpoint(req: FactureCreateGatewayRequest):
@app.post("/sage/factures/update", dependencies=[Depends(verify_token)])
def modifier_facture_endpoint(req: FactureUpdateGatewayRequest):
def modifier_facture_endpoint(req: FactureUpdate):
try:
resultat = sage.modifier_facture(req.numero, req.facture_data)
return {"success": True, "data": resultat}
@ -838,7 +838,7 @@ def modifier_facture_endpoint(req: FactureUpdateGatewayRequest):
@app.post("/sage/articles/create", dependencies=[Depends(verify_token)])
def create_article_endpoint(req: ArticleCreateRequest):
def create_article_endpoint(req: ArticleCreate):
try:
resultat = sage.creer_article(req.dict())
return {"success": True, "data": resultat}
@ -853,7 +853,7 @@ def create_article_endpoint(req: ArticleCreateRequest):
@app.post("/sage/articles/update", dependencies=[Depends(verify_token)])
def modifier_article_endpoint(req: ArticleUpdateGatewayRequest):
def modifier_article_endpoint(req: ArticleUpdate):
try:
resultat = sage.modifier_article(req.reference, req.article_data)
return {"success": True, "data": resultat}
@ -975,7 +975,7 @@ async def stats_familles():
@app.post("/sage/documents/generate-pdf", dependencies=[Depends(verify_token)])
def generer_pdf_document(req: PDFGenerationRequest):
def generer_pdf_document(req: PDFGeneration):
try:
logger.info(f" Génération PDF: {req.doc_id} (type={req.type_doc})")
@ -1152,7 +1152,7 @@ def lister_depots():
@app.post("/sage/stock/entree", dependencies=[Depends(verify_token)])
def creer_entree_stock(req: EntreeStockRequest):
def creer_entree_stock(req: EntreeStock):
try:
logger.info(
f"📦 [ENTREE STOCK] Création bon d'entrée : {len(req.lignes)} ligne(s)"
@ -1182,7 +1182,7 @@ def creer_entree_stock(req: EntreeStockRequest):
@app.post("/sage/stock/sortie", dependencies=[Depends(verify_token)])
def creer_sortie_stock(req: SortieStockRequest):
def creer_sortie_stock(req: SortieStock):
try:
logger.info(
f"📤 [SORTIE STOCK] Création bon de sortie : {len(req.lignes)} ligne(s)"
@ -1229,7 +1229,7 @@ def lire_mouvement_stock(numero: str):
@app.post("/sage/contacts/create", dependencies=[Depends(verify_token)])
def contacts_create(req: ContactCreateRequest):
def contacts_create(req: ContactCreate):
"""Crée un nouveau contact"""
try:
contact = sage.creer_contact(req.dict())
@ -1243,7 +1243,7 @@ def contacts_create(req: ContactCreateRequest):
@app.post("/sage/contacts/list", dependencies=[Depends(verify_token)])
def contacts_list(req: ContactListRequest):
def contacts_list(req: ContactList):
"""Liste les contacts d'un client"""
try:
contacts = sage.lister_contacts(req.numero)
@ -1254,7 +1254,7 @@ def contacts_list(req: ContactListRequest):
@app.post("/sage/contacts/get", dependencies=[Depends(verify_token)])
def contacts_get(req: ContactGetRequest):
def contacts_get(req: ContactGet):
"""Récupère un contact spécifique"""
try:
contact = sage.obtenir_contact(req.numero, req.contact_numero)
@ -1269,7 +1269,7 @@ def contacts_get(req: ContactGetRequest):
@app.post("/sage/contacts/update", dependencies=[Depends(verify_token)])
def contacts_update(req: ContactUpdateRequest):
def contacts_update(req: ContactUpdate):
"""Modifie un contact existant"""
try:
contact = sage.modifier_contact(req.numero, req.contact_numero, req.updates)
@ -1283,7 +1283,7 @@ def contacts_update(req: ContactUpdateRequest):
@app.post("/sage/contacts/delete", dependencies=[Depends(verify_token)])
def contacts_delete(req: ContactDeleteRequest):
def contacts_delete(req: ContactDelete):
"""Supprime un contact"""
try:
result = sage.supprimer_contact(req.numero, req.contact_numero)
@ -1294,7 +1294,7 @@ def contacts_delete(req: ContactDeleteRequest):
@app.post("/sage/contacts/set-default", dependencies=[Depends(verify_token)])
def contacts_set_default(req: ContactGetRequest):
def contacts_set_default(req: ContactGet):
"""Définit un contact comme contact par défaut"""
try:
result = sage.definir_contact_defaut(req.numero, req.contact_numero)
@ -1305,7 +1305,7 @@ def contacts_set_default(req: ContactGetRequest):
@app.post("/sage/tiers/list", dependencies=[Depends(verify_token)])
def tiers_list(req: TiersListRequest):
def tiers_list(req: TiersList):
"""Liste des tiers avec filtres optionnels"""
try:
tiers = sage.lister_tous_tiers(type_tiers=req.type_tiers, filtre=req.filtre)

View file

@ -1,22 +1,22 @@
from schemas.tiers.tiers import (
TiersListRequest,
TiersList,
TypeTiers
)
from schemas.tiers.contact import (
ContactCreateRequest,
ContactDeleteRequest,
ContactGetRequest,
ContactListRequest,
ContactUpdateRequest,
ContactCreate,
ContactDelete,
ContactGet,
ContactList,
ContactUpdate,
)
from schemas.tiers.clients import (
ClientCreateRequest,
ClientUpdateGatewayRequest
ClientCreate,
ClientUpdate
)
from schemas.others.general_schema import (
FiltreRequest,
ChampLibreRequest,
ChampLibre,
CodeRequest,
StatutRequest
)
@ -24,84 +24,84 @@ from schemas.others.general_schema import (
from schemas.documents.documents import (
TransformationRequest,
TypeDocument,
DocumentGetRequest,
PDFGenerationRequest
DocumentGet,
PDFGeneration
)
from schemas.documents.devis import (
DevisRequest,
DevisUpdateGatewayRequest
DevisUpdate
)
from schemas.tiers.fournisseurs import (
FournisseurCreateRequest,
FournisseurUpdateGatewayRequest
FournisseurCreate,
FournisseurUpdate
)
from schemas.documents.avoirs import (
AvoirCreateGatewayRequest,
AvoirUpdateGatewayRequest
AvoirCreate,
AvoirUpdate
)
from schemas.documents.commandes import (
CommandeCreateRequest,
CommandeUpdateGatewayRequest
CommandeCreate,
CommandeUpdate
)
from schemas.documents.factures import (
FactureCreateGatewayRequest,
FactureUpdateGatewayRequest
FactureCreate,
FactureUpdate
)
from schemas.documents.livraisons import (
LivraisonCreateGatewayRequest,
LivraisonUpdateGatewayRequest
LivraisonCreate,
LivraisonUpdate
)
from schemas.articles.articles import (
ArticleCreateRequest,
ArticleUpdateGatewayRequest,
ArticleCreate,
ArticleUpdate,
MouvementStockLigneRequest,
EntreeStockRequest,
SortieStockRequest
EntreeStock,
SortieStock
)
from schemas.articles.famille_d_articles import FamilleCreate
__all__ = [
"TiersListRequest",
"ContactCreateRequest",
"ContactDeleteRequest",
"ContactGetRequest",
"ContactListRequest",
"ContactUpdateRequest",
"ClientCreateRequest",
"ClientUpdateGatewayRequest",
"TiersList",
"ContactCreate",
"ContactDelete",
"ContactGet",
"ContactList",
"ContactUpdate",
"ClientCreate",
"ClientUpdate",
"FiltreRequest",
"ChampLibreRequest",
"ChampLibre",
"CodeRequest",
"TransformationRequest",
"TypeDocument",
"DevisRequest",
"DocumentGetRequest",
"DocumentGet",
"StatutRequest",
"TypeTiers",
"DevisUpdateGatewayRequest",
"FournisseurCreateRequest",
"FournisseurUpdateGatewayRequest",
"AvoirCreateGatewayRequest",
"AvoirUpdateGatewayRequest",
"CommandeCreateRequest",
"CommandeUpdateGatewayRequest",
"FactureCreateGatewayRequest",
"FactureUpdateGatewayRequest",
"LivraisonCreateGatewayRequest",
"LivraisonUpdateGatewayRequest",
"ArticleCreateRequest",
"ArticleUpdateGatewayRequest",
"DevisUpdate",
"FournisseurCreate",
"FournisseurUpdate",
"AvoirCreate",
"AvoirUpdate",
"CommandeCreate",
"CommandeUpdate",
"FactureCreate",
"FactureUpdate",
"LivraisonCreate",
"LivraisonUpdate",
"ArticleCreate",
"ArticleUpdate",
"MouvementStockLigneRequest",
"EntreeStockRequest",
"SortieStockRequest",
"EntreeStock",
"SortieStock",
"FamilleCreate",
"PDFGenerationRequest"
"PDFGeneration"
]

View file

@ -4,7 +4,7 @@ from typing import Optional, List, Dict
from enum import Enum, IntEnum
from datetime import datetime, date
class ArticleCreateRequest(BaseModel):
class ArticleCreate(BaseModel):
reference: str = Field(..., description="Référence article (max 18 car)")
designation: str = Field(..., description="Désignation (max 69 car)")
famille: Optional[str] = Field(None, description="Code famille")
@ -18,7 +18,7 @@ class ArticleCreateRequest(BaseModel):
description: Optional[str] = Field(None, description="Description/Commentaire")
class ArticleUpdateGatewayRequest(BaseModel):
class ArticleUpdate(BaseModel):
"""Modèle pour modification article côté gateway"""
reference: str
@ -79,7 +79,7 @@ class MouvementStockLigneRequest(BaseModel):
return v
class EntreeStockRequest(BaseModel):
class EntreeStock(BaseModel):
"""Création d'un bon d'entrée en stock"""
date_entree: Optional[date] = Field(
@ -95,7 +95,7 @@ class EntreeStockRequest(BaseModel):
commentaire: Optional[str] = Field(None, description="Commentaire général")
class SortieStockRequest(BaseModel):
class SortieStock(BaseModel):
"""Création d'un bon de sortie de stock"""
date_sortie: Optional[date] = Field(

View file

@ -3,7 +3,7 @@ from typing import Optional, List, Dict
from datetime import date
class AvoirCreateGatewayRequest(BaseModel):
class AvoirCreate(BaseModel):
"""Création d'un avoir côté gateway"""
client_id: str
@ -13,7 +13,7 @@ class AvoirCreateGatewayRequest(BaseModel):
reference: Optional[str] = None
class AvoirUpdateGatewayRequest(BaseModel):
class AvoirUpdate(BaseModel):
"""Modèle pour modification avoir côté gateway"""
numero: str

View file

@ -3,7 +3,7 @@ from typing import Optional, List, Dict
from datetime import date
class CommandeCreateRequest(BaseModel):
class CommandeCreate(BaseModel):
"""Création d'une commande"""
client_id: str
@ -13,7 +13,7 @@ class CommandeCreateRequest(BaseModel):
lignes: List[Dict]
class CommandeUpdateGatewayRequest(BaseModel):
class CommandeUpdate(BaseModel):
"""Modèle pour modification commande côté gateway"""
numero: str

View file

@ -11,7 +11,7 @@ class DevisRequest(BaseModel):
lignes: List[Dict]
class DevisUpdateGatewayRequest(BaseModel):
class DevisUpdate(BaseModel):
"""Modèle pour modification devis côté gateway"""
numero: str

View file

@ -11,7 +11,7 @@ class TypeDocument(int, Enum):
FACTURE = 5
class DocumentGetRequest(BaseModel):
class DocumentGet(BaseModel):
numero: str
type_doc: int
@ -22,7 +22,7 @@ class TransformationRequest(BaseModel):
type_cible: int
class PDFGenerationRequest(BaseModel):
class PDFGeneration(BaseModel):
"""Modèle pour génération PDF"""
doc_id: str = Field(..., description="Numéro du document")

View file

@ -3,7 +3,7 @@ from typing import Optional, List, Dict
from datetime import date
class FactureCreateGatewayRequest(BaseModel):
class FactureCreate(BaseModel):
"""Création d'une facture côté gateway"""
client_id: str
@ -13,7 +13,7 @@ class FactureCreateGatewayRequest(BaseModel):
reference: Optional[str] = None
class FactureUpdateGatewayRequest(BaseModel):
class FactureUpdate(BaseModel):
"""Modèle pour modification facture côté gateway"""
numero: str

View file

@ -3,7 +3,7 @@ from typing import Optional, List, Dict
from datetime import date
class LivraisonCreateGatewayRequest(BaseModel):
class LivraisonCreate(BaseModel):
"""Création d'une livraison côté gateway"""
client_id: str
@ -13,7 +13,7 @@ class LivraisonCreateGatewayRequest(BaseModel):
reference: Optional[str] = None
class LivraisonUpdateGatewayRequest(BaseModel):
class LivraisonUpdate(BaseModel):
"""Modèle pour modification livraison côté gateway"""
numero: str

View file

@ -10,7 +10,7 @@ class CodeRequest(BaseModel):
code: str
class ChampLibreRequest(BaseModel):
class ChampLibre(BaseModel):
doc_id: str
type_doc: int
nom_champ: str

View file

@ -2,7 +2,7 @@ from pydantic import BaseModel, Field, field_validator
from typing import Optional, Dict
class ClientCreateRequest(BaseModel):
class ClientCreate(BaseModel):
intitule: str = Field(
..., max_length=69, description="Nom du client (CT_Intitule) - OBLIGATOIRE"
)
@ -404,7 +404,7 @@ class ClientCreateRequest(BaseModel):
}
class ClientUpdateGatewayRequest(BaseModel):
class ClientUpdate(BaseModel):
"""Modèle pour modification client côté gateway"""
code: str

View file

@ -2,7 +2,7 @@ from pydantic import BaseModel
from typing import Optional, Dict
class ContactCreateRequest(BaseModel):
class ContactCreate(BaseModel):
"""Requête de création de contact"""
numero: str
@ -20,20 +20,20 @@ class ContactCreateRequest(BaseModel):
skype: Optional[str] = None
class ContactListRequest(BaseModel):
class ContactList(BaseModel):
"""Requête de liste des contacts"""
numero: str
class ContactGetRequest(BaseModel):
class ContactGet(BaseModel):
"""Requête de récupération d'un contact"""
numero: str
contact_numero: int
class ContactUpdateRequest(BaseModel):
class ContactUpdate(BaseModel):
"""Requête de modification d'un contact"""
numero: str
@ -41,7 +41,7 @@ class ContactUpdateRequest(BaseModel):
updates: Dict
class ContactDeleteRequest(BaseModel):
class ContactDelete(BaseModel):
"""Requête de suppression d'un contact"""
numero: str

View file

@ -2,7 +2,7 @@ from pydantic import BaseModel, Field
from typing import Optional, Dict
class FournisseurCreateRequest(BaseModel):
class FournisseurCreate(BaseModel):
intitule: str = Field(..., description="Raison sociale du fournisseur")
compte_collectif: str = Field("401000", description="Compte général rattaché")
num: Optional[str] = Field(None, description="Code fournisseur (auto si vide)")
@ -16,7 +16,7 @@ class FournisseurCreateRequest(BaseModel):
tva_intra: Optional[str] = None
class FournisseurUpdateGatewayRequest(BaseModel):
class FournisseurUpdate(BaseModel):
"""Modèle pour modification fournisseur côté gateway"""
code: str

View file

@ -3,7 +3,7 @@ from typing import Optional
from enum import IntEnum
class TiersListRequest(BaseModel):
class TiersList(BaseModel):
"""Requête de listage des tiers"""
type_tiers: Optional[str] = Field(