Files
DanceVideos/app/models.py
Gabriel Radureau 0fa5a30809 infinite scroll
2025-10-13 15:05:54 +02:00

56 lines
1.7 KiB
Python

# models.py
from pydantic import BaseModel, Field, validator
from typing import Optional, List
import db
class Video(BaseModel):
file_name: str
raw_file: str = Field(..., description="Identifiant unique de la vidéo")
duration: Optional[float] = None
mp4_file: Optional[str] = None
mp4_file_name: Optional[str] = None
rotated_file: Optional[str] = None
thumbnail_file: Optional[str] = None
record_datetime: Optional[str] = None
day_of_week: Optional[str] = None
lat: Optional[float] = None
long: Optional[float] = None
address: Optional[str] = None
difficulty_level: Optional[str] = Field("Tout niveau", description="Niveau de difficulté")
# --- propriétés pratiques ---
@property
def id(self) -> str:
"""Identifiant unique (basé sur file_name)."""
return self.file_name
@property
def title(self) -> str:
"""Nom court à afficher."""
return self.mp4_file_name or self.file_name
@property
def difficulty_display(self) -> str:
return self.difficulty_level or "Tout niveau"
# --- Méthodes métiers ---
def load_labels(self) -> List[str]:
return db.load_video_labels(self.file_name)
def save_labels(self, label_names: List[str]):
db.save_video_labels(self.file_name, label_names)
# --- Validation optionnelle ---
@validator("raw_file")
def validate_raw_file(cls, v):
if not v or not isinstance(v, str):
raise ValueError("raw_file doit être une chaîne non vide")
return v
@validator("duration")
def validate_duration(cls, v):
if v is not None and v < 0:
raise ValueError("duration ne peut pas être négative")
return v