Improved sorting #130
This commit is contained in:
@@ -36,7 +36,7 @@ class ServerFilter(FilterABC):
|
||||
if self._name is not None:
|
||||
|
||||
def where_guild(x: Guild):
|
||||
guild = bot.get_guild(x.discord_server_id)
|
||||
guild = bot.get_guild(x.discord_id)
|
||||
return guild is not None and (
|
||||
self._name.lower() == guild.name.lower() or self._name.lower() in guild.name.lower()
|
||||
)
|
||||
|
@@ -1,11 +1,17 @@
|
||||
import functools
|
||||
|
||||
from cpl_core.utils import String
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_api.exception.service_error_code_enum import ServiceErrorCode
|
||||
from bot_api.exception.service_exception import ServiceException
|
||||
from bot_graphql.abc.filter_abc import FilterABC
|
||||
|
||||
|
||||
class Sort(FilterABC):
|
||||
def __init__(self):
|
||||
FilterABC.__init__(self)
|
||||
|
||||
self._sort_direction = None
|
||||
self._sort_column = None
|
||||
|
||||
@@ -16,8 +22,19 @@ class Sort(FilterABC):
|
||||
if "sortColumn" in values:
|
||||
self._sort_column = values["sortColumn"]
|
||||
|
||||
@staticmethod
|
||||
def _rgetattr(obj, attr, *args):
|
||||
def _getattr(obj, attr):
|
||||
return getattr(obj, attr, *args)
|
||||
|
||||
return functools.reduce(_getattr, [obj] + attr.split("."))
|
||||
|
||||
def _by_column(self, x):
|
||||
atr = getattr(x, self._sort_column, None)
|
||||
atr = self._rgetattr(x, String.convert_to_snake_case(self._sort_column), None)
|
||||
if atr is None:
|
||||
raise ServiceException(
|
||||
ServiceErrorCode.InvalidData, f"Attribute {self._sort_column} in object of {type(x)} not found"
|
||||
)
|
||||
return atr
|
||||
|
||||
def filter(self, query: List, *args) -> List:
|
||||
|
@@ -51,12 +51,12 @@ class UserJoinedVoiceChannelFilter(FilterABC):
|
||||
query = query.where(lambda x: x.id == self._id)
|
||||
|
||||
if self._channel_id is not None:
|
||||
query = query.where(lambda x: x.dc_channel_id == self._channel_id)
|
||||
query = query.where(lambda x: x.channel_id == self._channel_id)
|
||||
|
||||
if self._channel_name is not None and self._channel_id is not None:
|
||||
|
||||
def get_channel_name(x: UserJoinedVoiceChannel):
|
||||
name = self._bot.get_channel(x.dc_channel_id).name
|
||||
name = self._bot.get_channel(x.channel_id).name
|
||||
return name == self._channel_name or self._channel_name in name
|
||||
|
||||
query = query.where(get_channel_name)
|
||||
|
@@ -40,9 +40,9 @@ class AutoRoleQuery(DataQueryABC):
|
||||
def resolve_channel_id(x: AutoRole, *_):
|
||||
return x.discord_channel_id
|
||||
|
||||
def resolve_channel_name(self, x: AutoRole, *_):
|
||||
channel = self._bot.get_channel(x.discord_channel_id)
|
||||
return None if channel is None else channel.name
|
||||
@staticmethod
|
||||
def resolve_channel_name(x: AutoRole, *_):
|
||||
return x.discord_channel_name
|
||||
|
||||
@staticmethod
|
||||
def resolve_message_id(x: AutoRole, *_):
|
||||
|
@@ -34,9 +34,9 @@ class AutoRoleRuleQuery(DataQueryABC):
|
||||
def resolve_role_id(x: AutoRoleRule, *_):
|
||||
return x.role_id
|
||||
|
||||
def resolve_role_name(self, x: AutoRoleRule, *_):
|
||||
guild = self._bot.get_guild(x.auto_role.server.discord_id)
|
||||
return guild.get_role(x.role_id).name
|
||||
@staticmethod
|
||||
def resolve_role_name(x: AutoRoleRule, *_):
|
||||
return x.role_name
|
||||
|
||||
def resolve_auto_role(self, x: AutoRoleRule, *_):
|
||||
return self._auto_roles.get_auto_role_by_id(x.auto_role.id)
|
||||
|
@@ -31,8 +31,9 @@ class ClientQuery(DataQueryABC):
|
||||
def resolve_discord_id(client: Client, *_):
|
||||
return client.discord_id
|
||||
|
||||
def resolve_name(self, client: Client, *_):
|
||||
return self._bot.user.name
|
||||
@staticmethod
|
||||
def resolve_name(client: Client, *_):
|
||||
return client.name
|
||||
|
||||
@staticmethod
|
||||
def resolve_sent_message_count(client: Client, *_):
|
||||
|
@@ -59,10 +59,10 @@ class ServerQuery(DataQueryABC):
|
||||
def resolve_discord_id(server: Server, *_):
|
||||
return server.discord_id
|
||||
|
||||
def resolve_name(self, server: Server, *_):
|
||||
guild = self._bot.get_guild(server.discord_id)
|
||||
return None if guild is None else guild.name
|
||||
@staticmethod
|
||||
def resolve_name(server: Server, *_):
|
||||
return server.name
|
||||
|
||||
def resolve_icon_url(self, server: Server, *_):
|
||||
guild = self._bot.get_guild(server.discord_id)
|
||||
return None if guild is None else guild.icon.url
|
||||
@staticmethod
|
||||
def resolve_icon_url(server: Server, *_):
|
||||
return server.icon_url
|
||||
|
@@ -23,10 +23,11 @@ class UserJoinedVoiceChannelQuery(DataQueryABC):
|
||||
|
||||
@staticmethod
|
||||
def resolve_channel_id(x: UserJoinedVoiceChannel, *_):
|
||||
return x.dc_channel_id
|
||||
return x.channel_id
|
||||
|
||||
def resolve_channel_name(self, x: UserJoinedVoiceChannel, *_):
|
||||
return self._bot.get_channel(x.dc_channel_id).name
|
||||
@staticmethod
|
||||
def resolve_channel_name(x: UserJoinedVoiceChannel, *_):
|
||||
return x.channel_name
|
||||
|
||||
@staticmethod
|
||||
def resolve_user(x: UserJoinedVoiceChannel, *_):
|
||||
|
@@ -67,10 +67,9 @@ class UserQuery(DataQueryABC):
|
||||
def resolve_discord_id(user: User, *_):
|
||||
return user.discord_id
|
||||
|
||||
def resolve_name(self, user: User, *_):
|
||||
guild = self._bot.get_guild(user.server.discord_id)
|
||||
user = guild.get_member(user.discord_id)
|
||||
return None if user is None else user.name
|
||||
@staticmethod
|
||||
def resolve_name(user: User, *_):
|
||||
return user.name
|
||||
|
||||
@staticmethod
|
||||
def resolve_xp(user: User, *_):
|
||||
@@ -80,11 +79,13 @@ class UserQuery(DataQueryABC):
|
||||
def resolve_minecraft_id(user: User, *_):
|
||||
return user.minecraft_id
|
||||
|
||||
def resolve_ontime(self, user: User, *_):
|
||||
return self._client_utils.get_ontime_for_user(user)
|
||||
@staticmethod
|
||||
def resolve_ontime(user: User, *_):
|
||||
return user.ontime
|
||||
|
||||
def resolve_level(self, user: User, *_):
|
||||
return self._levels.get_level(user)
|
||||
@staticmethod
|
||||
def resolve_level(user: User, *_):
|
||||
return user.level
|
||||
|
||||
@staticmethod
|
||||
def resolve_server(user: User, *_):
|
||||
|
Reference in New Issue
Block a user