Skip to content

Commit

Permalink
feat: ユーザーモデルを作り直した #96
Browse files Browse the repository at this point in the history
  • Loading branch information
yupix committed Oct 16, 2023
1 parent d472837 commit 5d81c3d
Show file tree
Hide file tree
Showing 21 changed files with 570 additions and 372 deletions.
32 changes: 16 additions & 16 deletions mipac/actions/follow.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
from mipac.abstract.action import AbstractAction
from mipac.http import Route
from mipac.models.follow import FollowRequest
from mipac.models.user import LiteUser
from mipac.models.user import PartialUser
from mipac.types.follow import IFollowRequest

if TYPE_CHECKING:
from mipac.http import HTTPClient
from mipac.manager.client import ClientManager
from mipac.types.user import ILiteUser
from mipac.types.user import IPartialUser


class FollowActions(AbstractAction):
Expand All @@ -20,7 +20,7 @@ def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: C
self.__session = session
self.__client = client

async def add(self, user_id: str | None = None) -> LiteUser:
async def add(self, user_id: str | None = None) -> PartialUser:
"""
Follow a user
Expand All @@ -33,21 +33,21 @@ async def add(self, user_id: str | None = None) -> LiteUser:
user_id = user_id or self.__user_id

data = {"userId": user_id}
res: ILiteUser = await self.__session.request(
res: IPartialUser = await self.__session.request(
Route("POST", "/api/following/create"),
json=data,
auth=True,
lower=True,
)
return LiteUser(res, client=self.__client)
return PartialUser(res, client=self.__client)

async def remove(self, user_id: str | None = None) -> LiteUser:
async def remove(self, user_id: str | None = None) -> PartialUser:
"""
Unfollow a user
Returns
-------
LiteUser
PartialUser
The user that you unfollowed
"""

Expand All @@ -57,25 +57,25 @@ async def remove(self, user_id: str | None = None) -> LiteUser:
res = await self.__session.request(
Route("POST", "/api/following/delete"), json=data, auth=True
)
return LiteUser(res, client=self.__client)
return PartialUser(res, client=self.__client)

async def invalidate(self, user_id: str | None = None) -> LiteUser:
async def invalidate(self, user_id: str | None = None) -> PartialUser:
"""
Make the user unfollows you
Returns
-------
LiteUser
PartialUser
The user that followed you
"""

user_id = user_id or self.__user_id

data = {"userId": user_id}
res: ILiteUser = await self.__session.request(
res: IPartialUser = await self.__session.request(
Route("POST", "/api/following/invalidate"), json=data, auth=True
)
return LiteUser(res, client=self.__client)
return PartialUser(res, client=self.__client)


class FollowRequestActions(AbstractAction):
Expand Down Expand Up @@ -153,7 +153,7 @@ async def reject(self, user_id: str | None = None) -> bool:
)
)

async def cancel(self, user_id: str | None = None) -> LiteUser:
async def cancel(self, user_id: str | None = None) -> PartialUser:
"""
Cancel a follow request
Expand All @@ -164,17 +164,17 @@ async def cancel(self, user_id: str | None = None) -> LiteUser:
Returns
-------
LiteUser
PartialUser
The user that you canceled to follow
"""

user_id = user_id or self.__user_id

data = {"userId": user_id}
res: ILiteUser = await self.__session.request(
res: IPartialUser = await self.__session.request(
Route("POST", "/api/following/requests/cancel"),
json=data,
auth=True,
lower=True,
)
return LiteUser(res, client=self.__client)
return PartialUser(res, client=self.__client)
29 changes: 15 additions & 14 deletions mipac/actions/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
from mipac.errors.base import NotExistRequiredData, ParameterError
from mipac.http import HTTPClient, Route
from mipac.models.clip import Clip
from mipac.models.lite.user import PartialUser
from mipac.models.note import Note
from mipac.models.user import Achievement, LiteUser, UserDetailed
from mipac.models.user import Achievement, UserDetailed
from mipac.types.clip import IClip
from mipac.types.note import INote
from mipac.types.user import ILiteUser, IUserDetailed
from mipac.types.user import IPartialUser, IUserDetailed
from mipac.utils.cache import cache
from mipac.utils.format import remove_dict_empty
from mipac.utils.pagination import Pagination, pagination_iterator
Expand All @@ -20,18 +21,18 @@

__all__ = ["UserActions"]

T = TypeVar("T", bound=Union[LiteUser, UserDetailed])
T = TypeVar("T", bound=Union[PartialUser, UserDetailed])


class UserActions:
def __init__(
self,
session: HTTPClient,
client: ClientManager,
user: Optional[LiteUser] = None,
user: Optional[PartialUser] = None,
):
self.__session: HTTPClient = session
self.__user: Optional[LiteUser] = user
self.__user: Optional[PartialUser] = user
self.__client: ClientManager = client

async def get_me(self) -> UserDetailed:
Expand Down Expand Up @@ -173,7 +174,7 @@ async def get_notes(
if get_all is False or pagination.is_final:
break

def get_mention(self, user: Optional[LiteUser] = None) -> str:
def get_mention(self, user: Optional[PartialUser] = None) -> str:
"""
Get mention name of user.
Expand Down Expand Up @@ -204,7 +205,7 @@ async def search(
detail: Literal[False] = ...,
*,
get_all: bool = False,
) -> AsyncGenerator[LiteUser, None]:
) -> AsyncGenerator[PartialUser, None]:
...

@overload
Expand All @@ -229,7 +230,7 @@ async def search(
detail: Literal[True, False] = True,
*,
get_all: bool = False,
) -> AsyncGenerator[UserDetailed | LiteUser, None]:
) -> AsyncGenerator[UserDetailed | PartialUser, None]:
"""
Search users by keyword.
Expand All @@ -250,7 +251,7 @@ async def search(
Returns
-------
AsyncGenerator[Union[LiteUser, UserDetailed], None]
AsyncGenerator[Union[PartialUser, UserDetailed], None]
A AsyncGenerator of users.
"""

Expand All @@ -275,15 +276,15 @@ async def search(
pagination, get_all, model=UserDetailed, client=self.__client
)
else:
pagination = Pagination[ILiteUser](
pagination = Pagination[IPartialUser](
self.__session,
Route("POST", "/api/users/search"),
json=body,
pagination_type="count",
)

iterator = pagination_iterator(
pagination, get_all=get_all, model=LiteUser, client=self.__client
pagination, get_all=get_all, model=PartialUser, client=self.__client
)
async for user in iterator:
yield user
Expand All @@ -294,7 +295,7 @@ async def search_by_username_and_host(
host: str,
limit: int = 100,
detail: bool = True,
) -> list[UserDetailed | LiteUser]:
) -> list[UserDetailed | PartialUser]:
"""
Search users by username and host.
Expand All @@ -311,7 +312,7 @@ async def search_by_username_and_host(
Returns
-------
list[UserDetailed | LiteUser]
list[UserDetailed | PartialUser]
A list of users.
"""

Expand All @@ -330,7 +331,7 @@ async def search_by_username_and_host(
return [
UserDetailed(user, client=self.__client)
if detail
else LiteUser(user, client=self.__client)
else PartialUser(user, client=self.__client)
for user in res
]

Expand Down
4 changes: 2 additions & 2 deletions mipac/manager/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

if TYPE_CHECKING:
from mipac.config import Config
from mipac.models.lite.user import LiteUser
from mipac.models.lite.user import PartialUser
from mipac.models.user import UserDetailed


Expand Down Expand Up @@ -54,7 +54,7 @@ def __init__(self, session: HTTPClient, config: Config):
def action(self) -> ClientActions:
return ClientActions(session=self.__session, client=self)

def _create_user_instance(self, user: LiteUser) -> UserManager:
def _create_user_instance(self, user: PartialUser) -> UserManager:
return UserManager(session=self.__session, client=self, user=user)

def _create_note_instance(self, note_id: str) -> NoteManager:
Expand Down
6 changes: 3 additions & 3 deletions mipac/manager/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@

if TYPE_CHECKING:
from mipac.manager.client import ClientManager
from mipac.models.lite.user import LiteUser
from mipac.models.lite.user import PartialUser


__all__ = ("UserManager",)


class UserManager(AbstractManager):
def __init__(
self, user: LiteUser | None = None, *, session: HTTPClient, client: ClientManager
self, user: PartialUser | None = None, *, session: HTTPClient, client: ClientManager
):
user_id: str | None = user.id if user else None
self.__session: HTTPClient = session
self.__client: ClientManager = client
self.__user: LiteUser | None = user
self.__user: PartialUser | None = user
self.follow: FollowManager = FollowManager(user_id=user_id, session=session, client=client)
self.mute: MuteManager = MuteManager(user_id=user_id, session=session, client=client)
self.block = BlockingManager(user_id=user_id, session=session, client=client)
Expand Down
6 changes: 3 additions & 3 deletions mipac/models/clip.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import TYPE_CHECKING

from mipac.abstract.model import AbstractModel
from mipac.models.lite.user import LiteUser
from mipac.models.lite.user import PartialUser
from mipac.types.clip import IClip

if TYPE_CHECKING:
Expand Down Expand Up @@ -37,9 +37,9 @@ def user_id(self) -> str:
return self.__clip["user_id"]

@property
def user(self) -> LiteUser:
def user(self) -> PartialUser:
"""The user who created the clip"""
return LiteUser(self.__clip["user"], client=self.__client)
return PartialUser(self.__clip["user"], client=self.__client)

@property
def name(self) -> str:
Expand Down
10 changes: 5 additions & 5 deletions mipac/models/follow.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from typing import TYPE_CHECKING

from mipac.abstract.model import AbstractModel
from mipac.models.lite.user import LiteUser
from mipac.models.lite.user import PartialUser
from mipac.types.follow import IFollowRequest

if TYPE_CHECKING:
Expand All @@ -21,12 +21,12 @@ def id(self) -> str:
return self.__follow_request["id"]

@property
def follower(self) -> LiteUser:
return LiteUser(self.__follow_request["follower"], client=self.__client)
def follower(self) -> PartialUser:
return PartialUser(self.__follow_request["follower"], client=self.__client)

@property
def followee(self) -> LiteUser:
return LiteUser(self.__follow_request["followee"], client=self.__client)
def followee(self) -> PartialUser:
return PartialUser(self.__follow_request["followee"], client=self.__client)

@property
def api(self) -> FollowRequestManager:
Expand Down
6 changes: 3 additions & 3 deletions mipac/models/invite.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from typing import TYPE_CHECKING, Generic, TypeVar

from mipac.abstract.model import AbstractModel
from mipac.models.lite.user import LiteUser
from mipac.models.lite.user import PartialUser
from mipac.types.invite import IInviteCode, IPartialInviteCode
from mipac.utils.format import str_to_datetime

Expand Down Expand Up @@ -58,9 +58,9 @@ def created_by(self) -> datetime | None:
)

@property
def used_by(self) -> LiteUser | None:
def used_by(self) -> PartialUser | None:
return (
LiteUser(self._raw_invite_code["used_by"], client=self._client)
PartialUser(self._raw_invite_code["used_by"], client=self._client)
if self._raw_invite_code["used_by"]
else None
)
Expand Down
6 changes: 3 additions & 3 deletions mipac/models/lite/note.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from mipac.abstract.model import AbstractModel
from mipac.models.drive import File
from mipac.models.lite.user import LiteUser
from mipac.models.lite.user import PartialUser
from mipac.types.note import INoteVisibility, IPartialNote
from mipac.types.reaction import IReactionAcceptance
from mipac.utils.format import str_to_datetime
Expand Down Expand Up @@ -101,8 +101,8 @@ def content(self) -> str | None:
return self._note.get("text")

@property
def author(self) -> LiteUser:
return LiteUser(self._note["user"], client=self._client)
def author(self) -> PartialUser:
return PartialUser(self._note["user"], client=self._client)

@property
def user_id(self) -> str:
Expand Down
Loading

0 comments on commit 5d81c3d

Please sign in to comment.