user.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from datetime import datetime
  2. from typing import Optional
  3. from uuid import UUID
  4. from pydantic import BaseModel, Field
  5. from shared.abstractions import R2RSerializable
  6. from ..utils import generate_default_user_collection_id
  7. class Collection(BaseModel):
  8. id: UUID
  9. name: str
  10. description: Optional[str] = None
  11. created_at: datetime = Field(
  12. default_factory=datetime.utcnow,
  13. )
  14. updated_at: datetime = Field(
  15. default_factory=datetime.utcnow,
  16. )
  17. class Config:
  18. populate_by_name = True
  19. from_attributes = True
  20. def __init__(self, **data):
  21. super().__init__(**data)
  22. if self.id is None:
  23. self.id = generate_default_user_collection_id(self.name)
  24. class Token(BaseModel):
  25. token: str
  26. token_type: str
  27. class TokenData(BaseModel):
  28. email: Optional[str] = None
  29. token_type: Optional[str] = None
  30. exp: Optional[datetime] = None
  31. class User(R2RSerializable):
  32. id: UUID
  33. email: str
  34. is_active: bool = True
  35. is_superuser: bool = False
  36. created_at: datetime = datetime.now()
  37. updated_at: datetime = datetime.now()
  38. is_verified: bool = False
  39. collection_ids: list[UUID] = []
  40. graph_ids: list[UUID] = []
  41. document_ids: list[UUID] = []
  42. # Optional fields (to update or set at creation)
  43. hashed_password: Optional[str] = None
  44. verification_code_expiry: Optional[datetime] = None
  45. name: Optional[str] = None
  46. bio: Optional[str] = None
  47. profile_picture: Optional[str] = None
  48. total_size_in_bytes: Optional[int] = None
  49. num_files: Optional[int] = None