from pydantic import BaseModel, AnyHttpUrl from sqlmodel import Field, SQLModel, Relationship from datetime import datetime from typing import Optional, List, TYPE_CHECKING from bs4 import BeautifulSoup from diyalgo.models.links import EmojiAccountLink, EmojiStatusLink if TYPE_CHECKING: from diyalgo.models import Status from diyalgo.models import CustomEmoji class Account(SQLModel, table=True): """https://docs.joinmastodon.org/entities/Account/""" id: int = Field(primary_key=True) acct: str avatar: str avatar_static: str bot: bool # created_at:datetime discoverable:bool display_name:str emojis: List['CustomEmoji'] = Relationship(back_populates='accounts', link_model=EmojiAccountLink) # fields: List["AccountField"] = Relationship(back_populates='account') followers_count:int following_count:int group: bool header: str # last_status_at: Optional[datetime] = None limited: Optional[bool] = None locked: bool # moved: Optional['Account'] = Relationship() noindex: Optional[bool] = None header_static: str note: str statuses: List['Status'] = Relationship(back_populates='account') statuses_count: int suspended: Optional[bool] = None url: AnyHttpUrl username: str # class Config: # extra = 'ignore' class AccountField(SQLModel): id: Optional[int] = Field(primary_key=True, default=None) name: str value: str # verified_at: Optional[datetime] = None # url: Optional[AnyHttpUrl] = None account_id: Optional[int] = Field(default=None, foreign_key='account.id') account: Account = Relationship(back_populates='fields') # def __init__(self, value:str, **kwargs): # soup = BeautifulSoup(value, 'lxml') # a = soup.find('a') # if a is not None: # url = a.get('href') # else: # url = None # super().__init__(value=value, url=url, **kwargs) # # class Config: # extra = "ignore"