Skip to content

Commit

Permalink
feat: FollowActionsをClientと分けた
Browse files Browse the repository at this point in the history
  • Loading branch information
yupix committed Feb 21, 2024
1 parent bb93d03 commit dc00a0e
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 36 deletions.
111 changes: 78 additions & 33 deletions mipac/actions/follow.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
from __future__ import annotations

from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, override

from mipac.abstract.action import AbstractAction
from mipac.http import Route
from mipac.http import HTTPClient, Route
from mipac.models.follow import FollowRequest
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 IPartialUser


class FollowActions(AbstractAction):
def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager):
self.__user_id: str | None = user_id
self.__session = session
self.__client = client
class SharedFollowActions(AbstractAction):
def __init__(self, *, session: HTTPClient, client: ClientManager):
self._session = session
self._client = client

async def add(self, user_id: str | None = None) -> PartialUser:
async def add(self, *, user_id: str) -> PartialUser:
"""
Follow a user
Expand All @@ -29,19 +27,16 @@ async def add(self, user_id: str | None = None) -> PartialUser:
UserLite:
The user that you followed
"""

user_id = user_id or self.__user_id

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

async def remove(self, user_id: str | None = None) -> PartialUser:
async def remove(self, *, user_id: str) -> PartialUser:
"""
Unfollow a user
Expand All @@ -50,16 +45,65 @@ async def remove(self, user_id: str | None = None) -> PartialUser:
PartialUser
The user that you unfollowed
"""
data = {"userId": user_id}
raw_user: IPartialUser = await self._session.request(
Route("POST", "/api/following/delete"), json=data, auth=True
)
return PartialUser(raw_user=raw_user, client=self._client)

user_id = user_id or self.__user_id
async def invalidate(self, *, user_id: str) -> PartialUser:
"""
Make the user unfollows you
Returns
-------
PartialUser
The user that followed you
"""
data = {"userId": user_id}
raw_user: IPartialUser = await self.__session.request(
Route("POST", "/api/following/delete"), json=data, auth=True
res: IPartialUser = await self._session.request(
Route("POST", "/api/following/invalidate"), json=data, auth=True
)
return PartialUser(raw_user=raw_user, client=self.__client)
return PartialUser(res, client=self._client)


async def invalidate(self, user_id: str | None = None) -> PartialUser:
class ClientFollowActions(SharedFollowActions):
def __init__(self, user_id: str, *, session: HTTPClient, client: ClientManager):
super().__init__(session=session, client=client)
self.__user_id: str = user_id

@override
async def add(self, *, user_id: str | None = None) -> PartialUser:
"""
Follow a user
Returns
-------
UserLite:
The user that you followed
"""

user_id = user_id or self.__user_id

return await super().add(user_id=user_id)

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

user_id = user_id or self.__user_id

return await super().remove(user_id=user_id)

@override
async def invalidate(self, *, user_id: str | None = None) -> PartialUser:
"""
Make the user unfollows you
Expand All @@ -71,18 +115,19 @@ async def invalidate(self, user_id: str | None = None) -> PartialUser:

user_id = user_id or self.__user_id

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


class FollowActions(SharedFollowActions):
def __init__(self, *, session: HTTPClient, client: ClientManager):
super().__init__(session=session, client=client)


class FollowRequestActions(AbstractAction):
def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager):
self.__user_id: str | None = user_id
self.__session = session
self.__client = client
self._session = session
self._client = client

async def get_all(self) -> list[FollowRequest]:
"""
Expand All @@ -94,12 +139,12 @@ async def get_all(self) -> list[FollowRequest]:
List of follow requests
"""

res: list[IFollowRequest] = await self.__session.request(
res: list[IFollowRequest] = await self._session.request(
Route("POST", "/api/following/requests/list"),
auth=True,
lower=True,
)
return [FollowRequest(follow_request=i, client=self.__client) for i in res]
return [FollowRequest(follow_request=i, client=self._client) for i in res]

async def accept(self, user_id: str | None = None) -> bool:
"""
Expand All @@ -120,7 +165,7 @@ async def accept(self, user_id: str | None = None) -> bool:

data = {"userId": user_id}
return bool(
await self.__session.request(
await self._session.request(
Route("POST", "/api/following/requests/accept"),
json=data,
auth=True,
Expand All @@ -146,7 +191,7 @@ async def reject(self, user_id: str | None = None) -> bool:

data = {"userId": user_id}
return bool(
await self.__session.request(
await self._session.request(
Route("POST", "/api/following/requests/reject"),
json=data,
auth=True,
Expand All @@ -171,10 +216,10 @@ async def cancel(self, user_id: str | None = None) -> PartialUser:
user_id = user_id or self.__user_id

data = {"userId": user_id}
res: IPartialUser = await self.__session.request(
res: IPartialUser = await self._session.request(
Route("POST", "/api/following/requests/cancel"),
json=data,
auth=True,
lower=True,
)
return PartialUser(res, client=self.__client)
return PartialUser(res, client=self._client)
18 changes: 17 additions & 1 deletion mipac/manager/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.manager import AbstractManager
from mipac.actions.follow import FollowActions, FollowRequestActions
from mipac.actions.follow import ClientFollowActions, FollowActions, FollowRequestActions
from mipac.http import HTTPClient

if TYPE_CHECKING:
Expand All @@ -12,6 +12,22 @@
__all__ = ("FollowManager", "FollowRequestManager")


class ClientFollowManager(AbstractManager):
def __init__(self, user_id: str, *, session: HTTPClient, client: ClientManager):
# self.request: ClientFollowRequestManager = ClientFollowRequestManager(
# session=session, client=client
# )
self.__action: ClientFollowActions = ClientFollowActions(
user_id=user_id,
session=session,
client=client,
)

@property
def action(self) -> ClientFollowActions:
return self.__action


class FollowManager(AbstractManager):
def __init__(self, *, session: HTTPClient, client: ClientManager):
self.__session: HTTPClient = session
Expand Down
6 changes: 4 additions & 2 deletions mipac/manager/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from mipac.actions.user import ClientUserActions, UserActions
from mipac.http import HTTPClient
from mipac.manager.blocking import BlockingManager, ClientBlockingManager
from mipac.manager.follow import FollowManager
from mipac.manager.follow import ClientFollowManager, FollowManager
from mipac.manager.users.list import (
ClientPartialUserListManager,
ClientUserListManager,
Expand All @@ -29,7 +29,9 @@ def __init__(self, user: PartialUser, *, session: HTTPClient, client: ClientMana
self.__action: ClientUserActions = ClientUserActions(
user=user, session=session, client=client
)
# self.follow: FollowManager = FollowManager(session=session, client=client) TODO: Client版のFollowManagerを作る
self.follow: ClientFollowManager = ClientFollowManager(
user_id=user.id, session=session, client=client
)
self.mute: ClientMuteManager = ClientMuteManager(
user_id=user.id, session=session, client=client
)
Expand Down

0 comments on commit dc00a0e

Please sign in to comment.