Source code for slowly.models.user

from datetime import datetime
import logging
from typing import Any, Dict

from . import abc
from ..state import ConnectionState
from .letter import AsyncLetterIterator

log = logging.getLogger(__name__)


[docs] class BaseUser(abc.User): __slots__ = ( "_state", "dob", "age", "allowaudio", "allowphotos", "audiorequest", "avatar", "by_id", "created_at", "customdesc", "deactivated", "dob_privacy", "emoji_status", "fav", "gender", "id", "identity", "joined", "joined_at", "joined_audio", "joined_photos", "latest_comment", "latest_sent_by", "location_code", "name", "openletter", "photorequest", "plus", "show_last_login", "status", "total", "unread", "updated_at", "user_audio", "user_id", "user_photos", "user_status", ) def __init__(self, state: ConnectionState, *, data: Dict[str, Any]) -> None: """ Initialize a BaseUser instance. :param state: The connection state. :param data: The data to initialize the user with. """ self._state: ConnectionState = state self._update(data) def __str__(self) -> str: """ Return the string representation of the user. :return: The name of the user. """ return self.name def _update(self, data: Dict[str, Any]) -> None: """ Update the user attributes with the provided data. :param data: The data to update the user with. """ for attr in BaseUser.__slots__: if attr.startswith("_"): continue if attr in [ "created_at", "latest_comment", "updated_at", "joined_at", ] and data.get(attr): date_object = datetime.strptime(data[attr], "%Y-%m-%d %H:%M:%S") setattr(self, attr, date_object) continue elif attr == "dob" and data.get("dob"): date_object = datetime.strptime(data["dob"], "%Y-%m-%d") setattr(self, attr, date_object) continue setattr(self, attr, data.get(attr, None)) def __repr__(self) -> str: """ Return the official string representation of the user. :return: The official string representation of the user. """ return "<User name={0.name!r} id={0.id!r}>".format(self)
[docs] class User(BaseUser): def __init__(self, state: ConnectionState, *, data: Dict[str, Any]) -> None: """ Initialize a User instance. :param state: The connection state. :param data: The data to initialize the user with. """ super().__init__(state, data=data)
[docs] def letters(self) -> AsyncLetterIterator: """ Return an iterator for the user's letters. :return: An AsyncLetterIterator instance. """ return AsyncLetterIterator(self._state, self.id)