60 lines
No EOL
1.6 KiB
Python
60 lines
No EOL
1.6 KiB
Python
from pydantic import BaseModel, RootModel
|
|
from typing import Optional, List
|
|
import json
|
|
|
|
class Medaille(BaseModel):
|
|
"""
|
|
Modèle Medaille
|
|
"""
|
|
id: Optional[int] = 0
|
|
type: str # Or, Argent, Bronze
|
|
sport: str
|
|
categorie: str # ex : 80kg pour le judo
|
|
pays: str # Nom FR du pays
|
|
|
|
def loadFromJsonData(self, data: str):
|
|
"""
|
|
Charge les données depuis une chaine json
|
|
|
|
:param data: Données json
|
|
:return: None
|
|
"""
|
|
data = json.loads(data)
|
|
for key, value in data.items():
|
|
setattr(self, key, value)
|
|
|
|
def validate(self) -> bool:
|
|
"""
|
|
Valide les données
|
|
|
|
:return: True si les données sont valides, False sinon
|
|
"""
|
|
if self.type not in ["Or", "Argent", "Bronze"]:
|
|
return False
|
|
return True
|
|
|
|
class ListeMedaille(RootModel):
|
|
root: List[Medaille] = []
|
|
def loadFromJson(self, path: str):
|
|
"""
|
|
Charge les données depuis un fichier json
|
|
|
|
:param path: Chemin du fichier json
|
|
:return: None
|
|
"""
|
|
try:
|
|
with open(path) as f:
|
|
data = json.load(f)
|
|
for discipline in data:
|
|
self.root.append(Medaille(**discipline))
|
|
except FileNotFoundError:
|
|
print(f"Le fichier {path} n'existe pas")
|
|
def loadFromJsonData(self, data: str):
|
|
"""
|
|
Charge les données depuis une chaine json
|
|
:param data: Données json
|
|
:return: None
|
|
"""
|
|
data = json.loads(data)
|
|
for discipline in data:
|
|
self.root.append(Medaille(**discipline)) |