From 3e164f41a59da547f6e3f97706f2f3858792c1a1 Mon Sep 17 00:00:00 2001 From: edraft Date: Sat, 27 Sep 2025 02:31:43 +0200 Subject: [PATCH] Removed query base #181 --- src/cpl-graphql/cpl/graphql/abc/__init__.py | 0 src/cpl-graphql/cpl/graphql/abc/query_base.py | 54 ------------------- src/cpl-graphql/cpl/graphql/graphql_module.py | 6 +-- src/cpl-graphql/cpl/graphql/schema/field.py | 8 +-- src/cpl-graphql/cpl/graphql/schema/query.py | 54 +++++++++++++++++-- src/cpl-graphql/cpl/graphql/service/schema.py | 2 +- .../cpl/graphql/service/service.py | 4 +- 7 files changed, 61 insertions(+), 67 deletions(-) delete mode 100644 src/cpl-graphql/cpl/graphql/abc/__init__.py delete mode 100644 src/cpl-graphql/cpl/graphql/abc/query_base.py diff --git a/src/cpl-graphql/cpl/graphql/abc/__init__.py b/src/cpl-graphql/cpl/graphql/abc/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/cpl-graphql/cpl/graphql/abc/query_base.py b/src/cpl-graphql/cpl/graphql/abc/query_base.py deleted file mode 100644 index b0b47424..00000000 --- a/src/cpl-graphql/cpl/graphql/abc/query_base.py +++ /dev/null @@ -1,54 +0,0 @@ -from typing import Callable, Any, Type - -from graphene import ObjectType - - -class QueryBase(ObjectType): - - def __init__(self): - from cpl.graphql.schema.field import Field - - ObjectType.__init__(self) - self._fields: dict[str, Field] = {} - - def get_fields(self) -> dict[str, "Field"]: - return self._fields - - def field( - self, - name: str, - t: type, - args: dict[str, Any] | None = None, - resolver: Callable | None = None, - ): - gql_type_map: dict[object, str] = { - str: "String", - int: "Int", - float: "Float", - bool: "Boolean", - } - - if t not in gql_type_map: - raise ValueError(f"Unsupported field type: {t}") - - from cpl.graphql.schema.field import Field - - self._fields[name] = Field(name, "String", resolver, args) - - def with_query(self, name: str, subquery: Type["QueryBase"]): - from cpl.graphql.schema.field import Field - - f = Field(name=name, gql_type="Object", resolver=lambda root, info, **kwargs: {}, subquery=subquery) - self._fields[name] = f - - def string_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): - self.field(name, str, args, resolver) - - def int_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): - self.field(name, int, args, resolver) - - def float_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): - self.field(name, float, args, resolver) - - def bool_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): - self.field(name, bool, args, resolver) diff --git a/src/cpl-graphql/cpl/graphql/graphql_module.py b/src/cpl-graphql/cpl/graphql/graphql_module.py index e4cd635c..cb20a7d3 100644 --- a/src/cpl-graphql/cpl/graphql/graphql_module.py +++ b/src/cpl-graphql/cpl/graphql/graphql_module.py @@ -1,4 +1,4 @@ -from cpl.api import ApiModule +from cpl.api.api_module import ApiModule from cpl.dependency.module.module import Module from cpl.dependency.service_provider import ServiceProvider from cpl.graphql.schema.root_query import RootQuery @@ -8,8 +8,8 @@ from cpl.graphql.service.service import GraphQLService class GraphQLModule(Module): dependencies = [ApiModule] - singleton = [Schema, RootQuery] - scoped = [GraphQLService] + singleton = [Schema] + scoped = [GraphQLService, RootQuery] @staticmethod def configure(services: ServiceProvider) -> None: diff --git a/src/cpl-graphql/cpl/graphql/schema/field.py b/src/cpl-graphql/cpl/graphql/schema/field.py index c273b3f3..13261675 100644 --- a/src/cpl-graphql/cpl/graphql/schema/field.py +++ b/src/cpl-graphql/cpl/graphql/schema/field.py @@ -1,13 +1,13 @@ -from cpl.graphql.abc.query_base import QueryBase +from cpl.graphql.schema.query import Query class Field: - def __init__(self, name: str, gql_type: str, resolver: callable, args: dict | None = None, subquery: QueryBase | None = None): + def __init__(self, name: str, gql_type: str, resolver: callable, args: dict | None = None, subquery: Query | None = None): self._name = name self._gql_type = gql_type self._resolver = resolver self._args = args or {} - self._subquery: QueryBase | None = subquery + self._subquery: Query | None = subquery @property def name(self) -> str: @@ -26,5 +26,5 @@ class Field: return self._args @property - def subquery(self) -> QueryBase | None: + def subquery(self) -> Query | None: return self._subquery \ No newline at end of file diff --git a/src/cpl-graphql/cpl/graphql/schema/query.py b/src/cpl-graphql/cpl/graphql/schema/query.py index 32ef46d2..13f4c62f 100644 --- a/src/cpl-graphql/cpl/graphql/schema/query.py +++ b/src/cpl-graphql/cpl/graphql/schema/query.py @@ -1,6 +1,54 @@ -from cpl.graphql.abc.query_base import QueryBase +from typing import Callable, Any, Type + +from graphene import ObjectType -class Query(QueryBase): +class Query(ObjectType): + def __init__(self): - QueryBase.__init__(self) \ No newline at end of file + from cpl.graphql.schema.field import Field + + ObjectType.__init__(self) + self._fields: dict[str, Field] = {} + + def get_fields(self) -> dict[str, "Field"]: + return self._fields + + def field( + self, + name: str, + t: type, + args: dict[str, Any] | None = None, + resolver: Callable | None = None, + ): + gql_type_map: dict[object, str] = { + str: "String", + int: "Int", + float: "Float", + bool: "Boolean", + } + + if t not in gql_type_map: + raise ValueError(f"Unsupported field type: {t}") + + from cpl.graphql.schema.field import Field + + self._fields[name] = Field(name, "String", resolver, args) + + def with_query(self, name: str, subquery: Type["Query"]): + from cpl.graphql.schema.field import Field + + f = Field(name=name, gql_type="Object", resolver=lambda root, info, **kwargs: {}, subquery=subquery) + self._fields[name] = f + + def string_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): + self.field(name, str, args, resolver) + + def int_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): + self.field(name, int, args, resolver) + + def float_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): + self.field(name, float, args, resolver) + + def bool_field(self, name: str, args: dict[str, Any] | None = None, resolver: Callable | None = None): + self.field(name, bool, args, resolver) diff --git a/src/cpl-graphql/cpl/graphql/service/schema.py b/src/cpl-graphql/cpl/graphql/service/schema.py index 48ce5c5f..0dcf02b6 100644 --- a/src/cpl-graphql/cpl/graphql/service/schema.py +++ b/src/cpl-graphql/cpl/graphql/service/schema.py @@ -1,6 +1,6 @@ import graphene -from cpl.api import APILogger +from cpl.api.logger import APILogger from cpl.dependency.service_provider import ServiceProvider from cpl.graphql.schema.query import Query from cpl.graphql.schema.root_query import RootQuery diff --git a/src/cpl-graphql/cpl/graphql/service/service.py b/src/cpl-graphql/cpl/graphql/service/service.py index d0a65891..54c4f388 100644 --- a/src/cpl-graphql/cpl/graphql/service/service.py +++ b/src/cpl-graphql/cpl/graphql/service/service.py @@ -6,9 +6,9 @@ from cpl.graphql.service.schema import Schema class GraphQLService: def __init__(self, schema: Schema): - self._schema = schema.schema - if self._schema is None: + if schema.schema is None: raise ValueError("Schema has not been built. Call schema.build() before using the service.") + self._schema = schema.schema async def execute( self,