arxplorer / src /schema /profile.py
Subhadeep Mandal
Fresh deploy
54eb2ce
Raw
History Blame Contribute Delete
1.27 kB
from pydantic import BaseModel, field_validator
from typing import Optional
from ..lib.categories import VALID_CATEGORY_CODES
class ProfileBase(BaseModel):
phone: Optional[str] = None
bio: Optional[str] = None
avatar_url: Optional[str] = None
topic_preferences: Optional[str] = None
@field_validator("topic_preferences")
@classmethod
def validate_topic_preferences(cls, v: Optional[str]) -> Optional[str]:
if v is None or v.strip() == "":
return None
tags = [t.strip() for t in v.split(",") if t.strip()]
invalid = [t for t in tags if t not in VALID_CATEGORY_CODES]
if invalid:
raise ValueError(
f"Invalid arXiv categories: {', '.join(invalid)}. "
f"Must be valid CS/stat/eess categories (e.g. cs.AI, stat.ML)."
)
return ",".join(tags)
class ProfileCreate(ProfileBase):
pass
class ProfileUpdate(ProfileBase):
pass
class ProfileResponse(BaseModel):
id: int
user_id: int
phone: Optional[str] = None
bio: Optional[str] = None
avatar_url: Optional[str] = None
topic_preferences: Optional[str] = None
class Config:
from_attributes = True