diyalgo/diyalgo/models/account.py

68 lines
2.0 KiB
Python

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"