feat: FollowActionsをClientと分けた

pull/134/head
yupix 7 months ago
parent bb93d034c4
commit dc00a0e395
No known key found for this signature in database
GPG Key ID: 2FF705F5C56D9C06

@ -1,26 +1,24 @@
from __future__ import annotations from __future__ import annotations
from typing import TYPE_CHECKING from typing import TYPE_CHECKING, override
from mipac.abstract.action import AbstractAction 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.follow import FollowRequest
from mipac.models.user import PartialUser from mipac.models.user import PartialUser
from mipac.types.follow import IFollowRequest from mipac.types.follow import IFollowRequest
if TYPE_CHECKING: if TYPE_CHECKING:
from mipac.http import HTTPClient
from mipac.manager.client import ClientManager from mipac.manager.client import ClientManager
from mipac.types.user import IPartialUser from mipac.types.user import IPartialUser
class FollowActions(AbstractAction): class SharedFollowActions(AbstractAction):
def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager): def __init__(self, *, session: HTTPClient, client: ClientManager):
self.__user_id: str | None = user_id self._session = session
self.__session = session self._client = client
self.__client = client
async def add(self, user_id: str | None = None) -> PartialUser: async def add(self, *, user_id: str) -> PartialUser:
""" """
Follow a user Follow a user
@ -29,19 +27,16 @@ class FollowActions(AbstractAction):
UserLite: UserLite:
The user that you followed The user that you followed
""" """
user_id = user_id or self.__user_id
data = {"userId": user_id} data = {"userId": user_id}
res: IPartialUser = await self.__session.request( res: IPartialUser = await self._session.request(
Route("POST", "/api/following/create"), Route("POST", "/api/following/create"),
json=data, json=data,
auth=True, auth=True,
lower=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 Unfollow a user
@ -50,16 +45,65 @@ class FollowActions(AbstractAction):
PartialUser PartialUser
The user that you unfollowed 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} data = {"userId": user_id}
raw_user: IPartialUser = await self.__session.request( res: IPartialUser = await self._session.request(
Route("POST", "/api/following/delete"), json=data, auth=True 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 Make the user unfollows you
@ -71,18 +115,19 @@ class FollowActions(AbstractAction):
user_id = user_id or self.__user_id user_id = user_id or self.__user_id
data = {"userId": user_id} return await super().invalidate(user_id=user_id)
res: IPartialUser = await self.__session.request(
Route("POST", "/api/following/invalidate"), json=data, auth=True
) class FollowActions(SharedFollowActions):
return PartialUser(res, client=self.__client) def __init__(self, *, session: HTTPClient, client: ClientManager):
super().__init__(session=session, client=client)
class FollowRequestActions(AbstractAction): class FollowRequestActions(AbstractAction):
def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager): def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager):
self.__user_id: str | None = user_id self.__user_id: str | None = user_id
self.__session = session self._session = session
self.__client = client self._client = client
async def get_all(self) -> list[FollowRequest]: async def get_all(self) -> list[FollowRequest]:
""" """
@ -94,12 +139,12 @@ class FollowRequestActions(AbstractAction):
List of follow requests List of follow requests
""" """
res: list[IFollowRequest] = await self.__session.request( res: list[IFollowRequest] = await self._session.request(
Route("POST", "/api/following/requests/list"), Route("POST", "/api/following/requests/list"),
auth=True, auth=True,
lower=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: async def accept(self, user_id: str | None = None) -> bool:
""" """
@ -120,7 +165,7 @@ class FollowRequestActions(AbstractAction):
data = {"userId": user_id} data = {"userId": user_id}
return bool( return bool(
await self.__session.request( await self._session.request(
Route("POST", "/api/following/requests/accept"), Route("POST", "/api/following/requests/accept"),
json=data, json=data,
auth=True, auth=True,
@ -146,7 +191,7 @@ class FollowRequestActions(AbstractAction):
data = {"userId": user_id} data = {"userId": user_id}
return bool( return bool(
await self.__session.request( await self._session.request(
Route("POST", "/api/following/requests/reject"), Route("POST", "/api/following/requests/reject"),
json=data, json=data,
auth=True, auth=True,
@ -171,10 +216,10 @@ class FollowRequestActions(AbstractAction):
user_id = user_id or self.__user_id user_id = user_id or self.__user_id
data = {"userId": user_id} data = {"userId": user_id}
res: IPartialUser = await self.__session.request( res: IPartialUser = await self._session.request(
Route("POST", "/api/following/requests/cancel"), Route("POST", "/api/following/requests/cancel"),
json=data, json=data,
auth=True, auth=True,
lower=True, lower=True,
) )
return PartialUser(res, client=self.__client) return PartialUser(res, client=self._client)

@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from mipac.abstract.manager import AbstractManager 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 from mipac.http import HTTPClient
if TYPE_CHECKING: if TYPE_CHECKING:
@ -12,6 +12,22 @@ if TYPE_CHECKING:
__all__ = ("FollowManager", "FollowRequestManager") __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): class FollowManager(AbstractManager):
def __init__(self, *, session: HTTPClient, client: ClientManager): def __init__(self, *, session: HTTPClient, client: ClientManager):
self.__session: HTTPClient = session self.__session: HTTPClient = session

@ -6,7 +6,7 @@ from mipac.abstract.manager import AbstractManager
from mipac.actions.user import ClientUserActions, UserActions from mipac.actions.user import ClientUserActions, UserActions
from mipac.http import HTTPClient from mipac.http import HTTPClient
from mipac.manager.blocking import BlockingManager, ClientBlockingManager 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 ( from mipac.manager.users.list import (
ClientPartialUserListManager, ClientPartialUserListManager,
ClientUserListManager, ClientUserListManager,
@ -29,7 +29,9 @@ class ClientUserManager(AbstractManager):
self.__action: ClientUserActions = ClientUserActions( self.__action: ClientUserActions = ClientUserActions(
user=user, session=session, client=client 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( self.mute: ClientMuteManager = ClientMuteManager(
user_id=user.id, session=session, client=client user_id=user.id, session=session, client=client
) )

Loading…
Cancel
Save