from pydantic import BaseModel, PositiveInt, computed_field, field_validator from .TabSchema import TabSchema import datetime import re class RequestSchema(BaseModel): username: str expiry: PositiveInt = 1 tab: TabSchema = TabSchema() @field_validator('username') def validate_username(cls, value): if not re.fullmatch(r'[a-zA-Z0-9_-]{4,16}', value): raise ValueError("Invalid username format") return value @computed_field(return_type=PositiveInt) def validated_expiry(self): if self.expiry > 10**5: try: expiry_datetime = datetime.datetime.utcfromtimestamp(self.expiry) if expiry_datetime <= datetime.datetime.utcnow(): raise ValueError("Expiry timestamp must be in the future") return self.expiry except ValueError: raise ValueError("Invalid timestamp format") else: if self.expiry != 0: now = datetime.datetime.utcnow() return int((now + datetime.timedelta(days=self.expiry)).timestamp()) else: return 0