infinite scroll
This commit is contained in:
55
app/models.py
Normal file
55
app/models.py
Normal file
@@ -0,0 +1,55 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user