Added graphql from prototype #162

This commit is contained in:
2023-01-15 02:28:28 +01:00
parent b95a951a1b
commit 95b9eea236
17 changed files with 134 additions and 181 deletions

View File

@@ -4,12 +4,11 @@ from bot_graphql.abc.query_abc import QueryABC
class DataQueryABC(QueryABC):
def __init__(self, name: str):
QueryABC.__init__(self, name)
self.set_field('created_at', self.resolve_created_at)
self.set_field('modified_at', self.resolve_modified_at)
self.set_field("created_at", self.resolve_created_at)
self.set_field("modified_at", self.resolve_modified_at)
@staticmethod
def resolve_created_at(entry: TableABC, *_):

View File

@@ -7,7 +7,6 @@ from cpl_query.extension import List
class FilterABC(ABC):
def __init__(self):
ABC.__init__(self)
@@ -15,19 +14,19 @@ class FilterABC(ABC):
self._page_size = None
self._sort_direction = None
self._sort_column = None
@property
def page_index(self) -> Optional[int]:
return self._page_index
@property
def page_size(self) -> Optional[int]:
return self._page_size
@property
def sort_direction(self) -> Optional[str]:
return self._sort_direction
@property
def sort_column(self) -> Optional[str]:
return self._sort_column
@@ -45,7 +44,7 @@ class FilterABC(ABC):
sig = signature(f)
for param in sig.parameters.items():
parameter = param[1]
if parameter.name == 'self' or parameter.name == 'cls' or parameter.annotation == Parameter.empty:
if parameter.name == "self" or parameter.name == "cls" or parameter.annotation == Parameter.empty:
continue
if issubclass(parameter.annotation, FilterABC):
@@ -60,8 +59,8 @@ class FilterABC(ABC):
@functools.wraps(f)
def decorator(*args, **kwargs):
if 'filter' in kwargs:
kwargs['filter'] = cls.get_filter(f, kwargs['filter'])
if "filter" in kwargs:
kwargs["filter"] = cls.get_filter(f, kwargs["filter"])
return f(*args, **kwargs)

View File

@@ -9,7 +9,6 @@ from bot_graphql.abc.filter_abc import FilterABC
class LevelFilter(FilterABC):
def __init__(self):
FilterABC.__init__(self)
@@ -18,8 +17,8 @@ class LevelFilter(FilterABC):
# self._server_id = None
def from_dict(self, values: dict):
if 'id' in values:
self._id = values['id']
if "id" in values:
self._id = values["id"]
def filter(self, query: List[Level]) -> List[Level]:
if self._id is not None:

View File

@@ -8,7 +8,6 @@ from bot_graphql.abc.filter_abc import FilterABC
class ServerFilter(FilterABC):
def __init__(self):
FilterABC.__init__(self)
@@ -17,8 +16,8 @@ class ServerFilter(FilterABC):
self._name = None
def from_dict(self, values: dict):
if 'id' in values:
self._id = int(values['id'])
if "id" in values:
self._id = int(values["id"])
@ServiceProviderABC.inject
def filter(self, query: List[Server], bot: DiscordBotServiceABC) -> List[Server]:
@@ -29,9 +28,12 @@ class ServerFilter(FilterABC):
query = query.where(lambda x: x.discord_server_id == self._discord_id)
if self._name is not None:
def where_guild(x: Guild):
guild = bot.get_guild(x.discord_server_id)
return guild is not None and (self._name.lower() == guild.name.lower() or self._name.lower() in guild.name.lower())
return guild is not None and (
self._name.lower() == guild.name.lower() or self._name.lower() in guild.name.lower()
)
query = query.where(where_guild)

View File

@@ -17,7 +17,6 @@ from bot_graphql.schema import Schema
class GraphQLModule(ModuleABC):
def __init__(self, dc: DiscordCollectionABC):
ModuleABC.__init__(self, dc, FeatureFlagsEnum.data_module)

View File

@@ -2,6 +2,5 @@ from bot_graphql.abc.query_abc import QueryABC
class GraphQLService:
def __init__(self, queries: list[QueryABC]):
self._queries = queries

View File

@@ -4,15 +4,11 @@ from bot_graphql.mutations.level_mutation import LevelMutation
class Mutation(MutationType):
def __init__(
self,
level_mutation: LevelMutation
):
def __init__(self, level_mutation: LevelMutation):
MutationType.__init__(self)
self._level_mutation = level_mutation
self.set_field('level', self.resolve_level)
self.set_field("level", self.resolve_level)
def resolve_level(self, *_):
return self._level_mutation

View File

@@ -5,28 +5,23 @@ from bot_graphql.abc.query_abc import QueryABC
class LevelMutation(QueryABC):
def __init__(
self,
servers: ServerRepositoryABC,
levels: LevelRepositoryABC
):
QueryABC.__init__(self, 'LevelMutation')
def __init__(self, servers: ServerRepositoryABC, levels: LevelRepositoryABC):
QueryABC.__init__(self, "LevelMutation")
self._servers = servers
self._levels = levels
self.set_field('create_level', self.resolve_create_level)
self.set_field('update_level', self.resolve_create_level)
self.set_field('delete_level', self.resolve_create_level)
self.set_field("create_level", self.resolve_create_level)
self.set_field("update_level", self.resolve_create_level)
self.set_field("delete_level", self.resolve_create_level)
def resolve_create_level(self, *_, input: dict):
level = Level(
input['name'],
input['color'],
int(input['min_xp']),
int(input['permissions']),
self._servers.get_server_by_id(input['server_id'])
input["name"],
input["color"],
int(input["min_xp"]),
int(input["permissions"]),
self._servers.get_server_by_id(input["server_id"]),
)
return level

View File

@@ -3,16 +3,15 @@ from bot_graphql.abc.data_query_abc import DataQueryABC
class LevelQuery(DataQueryABC):
def __init__(self):
DataQueryABC.__init__(self, 'Level')
DataQueryABC.__init__(self, "Level")
self.set_field('id', self.resolve_id)
self.set_field('name', self.resolve_name)
self.set_field('color', self.resolve_color)
self.set_field('min_xp', self.resolve_min_xp)
self.set_field('permissions', self.resolve_permissions)
self.set_field('server', self.resolve_server)
self.set_field("id", self.resolve_id)
self.set_field("name", self.resolve_name)
self.set_field("color", self.resolve_color)
self.set_field("min_xp", self.resolve_min_xp)
self.set_field("permissions", self.resolve_permissions)
self.set_field("server", self.resolve_server)
@staticmethod
def resolve_id(level: Level, *_):

View File

@@ -8,21 +8,20 @@ from bot_graphql.filter.level_filter import LevelFilter
class ServerQuery(DataQueryABC):
def __init__(
self,
bot: DiscordBotServiceABC,
levels: LevelRepositoryABC,
self,
bot: DiscordBotServiceABC,
levels: LevelRepositoryABC,
):
DataQueryABC.__init__(self, 'Server')
DataQueryABC.__init__(self, "Server")
self._bot = bot
self._levels = levels
self.set_field('id', self.resolve_id)
self.set_field('discord_id', self.resolve_discord_id)
self.set_field('name', self.resolve_name)
self.set_field('levels', self.resolve_levels)
self.set_field("id", self.resolve_id)
self.set_field("discord_id", self.resolve_discord_id)
self.set_field("name", self.resolve_name)
self.set_field("levels", self.resolve_levels)
@staticmethod
def resolve_id(server: Server, *_):

View File

@@ -6,16 +6,12 @@ from bot_graphql.filter.server_filter import ServerFilter
class Query(QueryType):
def __init__(
self,
servers: ServerRepositoryService
):
def __init__(self, servers: ServerRepositoryService):
QueryType.__init__(self)
self._servers = servers
self.set_field('servers', self.resolve_servers)
self.set_field('server_count', self.resolve_server_count)
self.set_field("servers", self.resolve_servers)
self.set_field("server_count", self.resolve_server_count)
@FilterABC.resolve_filter_annotation
def resolve_servers(self, *_, filter: ServerFilter = None):

View File

@@ -9,14 +9,8 @@ from bot_graphql.query import Query
class Schema:
def __init__(
self,
query: Query,
mutation: Mutation,
queries: list[QueryABC]
):
type_defs = load_schema_from_path(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'model.gql'))
def __init__(self, query: Query, mutation: Mutation, queries: list[QueryABC]):
type_defs = load_schema_from_path(os.path.join(os.path.dirname(os.path.realpath(__file__)), "model.gql"))
self._schema = make_executable_schema(type_defs, query, mutation, *queries)
@property