|
|
@ -13,6 +13,8 @@ from mipac.models.user import (
|
|
|
|
MeDetailed,
|
|
|
|
MeDetailed,
|
|
|
|
MeDetailedModerator,
|
|
|
|
MeDetailedModerator,
|
|
|
|
UserDetailed,
|
|
|
|
UserDetailed,
|
|
|
|
|
|
|
|
UserDetailedModels,
|
|
|
|
|
|
|
|
UserModels,
|
|
|
|
create_user_model,
|
|
|
|
create_user_model,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
from mipac.types.clip import IClip
|
|
|
|
from mipac.types.clip import IClip
|
|
|
@ -27,7 +29,7 @@ from mipac.types.user import (
|
|
|
|
)
|
|
|
|
)
|
|
|
|
from mipac.utils.cache import cache
|
|
|
|
from mipac.utils.cache import cache
|
|
|
|
from mipac.utils.format import remove_dict_empty
|
|
|
|
from mipac.utils.format import remove_dict_empty
|
|
|
|
from mipac.utils.pagination import Pagination, pagination_iterator
|
|
|
|
from mipac.utils.pagination import Pagination
|
|
|
|
from mipac.utils.util import check_multi_arg
|
|
|
|
from mipac.utils.util import check_multi_arg
|
|
|
|
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
if TYPE_CHECKING:
|
|
|
@ -239,7 +241,7 @@ class UserActions:
|
|
|
|
detail: Literal[True] = True,
|
|
|
|
detail: Literal[True] = True,
|
|
|
|
*,
|
|
|
|
*,
|
|
|
|
get_all: bool = False,
|
|
|
|
get_all: bool = False,
|
|
|
|
) -> AsyncGenerator[UserDetailed, None]:
|
|
|
|
) -> AsyncGenerator[UserDetailedModels, None]:
|
|
|
|
...
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
|
|
async def search(
|
|
|
|
async def search(
|
|
|
@ -251,7 +253,7 @@ class UserActions:
|
|
|
|
detail: Literal[True, False] = True,
|
|
|
|
detail: Literal[True, False] = True,
|
|
|
|
*,
|
|
|
|
*,
|
|
|
|
get_all: bool = False,
|
|
|
|
get_all: bool = False,
|
|
|
|
) -> AsyncGenerator[UserDetailed | PartialUser, None]:
|
|
|
|
) -> AsyncGenerator[UserModels, None]:
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
Search users by keyword.
|
|
|
|
Search users by keyword.
|
|
|
|
|
|
|
|
|
|
|
@ -286,29 +288,19 @@ class UserActions:
|
|
|
|
{"query": query, "limit": limit, "offset": offset, "origin": origin, "detail": detail}
|
|
|
|
{"query": query, "limit": limit, "offset": offset, "origin": origin, "detail": detail}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if detail:
|
|
|
|
pagination = Pagination[IUser](
|
|
|
|
pagination = Pagination[IUserDetailed](
|
|
|
|
self.__session,
|
|
|
|
self.__session,
|
|
|
|
Route("POST", "/api/users/search"),
|
|
|
|
Route("POST", "/api/users/search"),
|
|
|
|
json=body,
|
|
|
|
json=body,
|
|
|
|
pagination_type="count",
|
|
|
|
pagination_type="count",
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
iterator = pagination_iterator(
|
|
|
|
while True:
|
|
|
|
pagination, get_all, model=UserDetailed, client=self.__client
|
|
|
|
users: list[IUser] = await pagination.next()
|
|
|
|
)
|
|
|
|
for user in users:
|
|
|
|
else:
|
|
|
|
yield create_user_model(user, client=self.__client)
|
|
|
|
pagination = Pagination[IPartialUser](
|
|
|
|
if get_all is False or pagination.is_final:
|
|
|
|
self.__session,
|
|
|
|
break
|
|
|
|
Route("POST", "/api/users/search"),
|
|
|
|
|
|
|
|
json=body,
|
|
|
|
|
|
|
|
pagination_type="count",
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
iterator = pagination_iterator(
|
|
|
|
|
|
|
|
pagination, get_all=get_all, model=PartialUser, client=self.__client
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
async for user in iterator:
|
|
|
|
|
|
|
|
yield user
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def search_by_username_and_host(
|
|
|
|
async def search_by_username_and_host(
|
|
|
|
self,
|
|
|
|
self,
|
|
|
|