From f21fcd22690b61febdc05e8d375568af9e84746a Mon Sep 17 00:00:00 2001 From: Cyber MacGeddon Date: Wed, 3 Sep 2025 21:45:38 +0100 Subject: [PATCH] Fixing GraphQL query --- .../schema/services/objects_query.py | 2 +- .../query/objects/cassandra/service.py | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/trustgraph-base/trustgraph/schema/services/objects_query.py b/trustgraph-base/trustgraph/schema/services/objects_query.py index 32911b20..6c3a307c 100644 --- a/trustgraph-base/trustgraph/schema/services/objects_query.py +++ b/trustgraph-base/trustgraph/schema/services/objects_query.py @@ -22,7 +22,7 @@ class ObjectsQueryRequest(Record): class ObjectsQueryResponse(Record): error = Error() # System-level error (connection, timeout, etc.) data = String() # JSON-encoded GraphQL response data - errors = Array(GraphQLError) # GraphQL field-level errors + errors = Array(GraphQLError()) # GraphQL field-level errors extensions = Map(String()) # Query metadata (execution time, etc.) ############################################################################ \ No newline at end of file diff --git a/trustgraph-flow/trustgraph/query/objects/cassandra/service.py b/trustgraph-flow/trustgraph/query/objects/cassandra/service.py index 7b3cd9c7..f016c94e 100644 --- a/trustgraph-flow/trustgraph/query/objects/cassandra/service.py +++ b/trustgraph-flow/trustgraph/query/objects/cassandra/service.py @@ -14,6 +14,7 @@ from cassandra.auth import PlainTextAuthProvider import strawberry from strawberry import Schema from strawberry.types import Info +from strawberry.scalars import JSON from .... schema import ObjectsQueryRequest, ObjectsQueryResponse, GraphQLError from .... schema import Error, RowSchema, Field as SchemaField @@ -234,6 +235,9 @@ class Processor(FlowProcessor): graphql_type = self.create_graphql_type(schema_name, row_schema) self.graphql_types[schema_name] = graphql_type + # Store resolvers separately to avoid closure issues + self.resolvers = {} + # Create the Query class with resolvers query_dict = {'__annotations__': {}} @@ -241,28 +245,26 @@ class Processor(FlowProcessor): graphql_type = self.graphql_types[schema_name] # Create resolver function for this schema - def make_resolver(schema_name, row_schema, graphql_type): + def make_resolver(s_name, r_schema, g_type): async def resolver( - self_query: Any, info: Info, collection: str, - limit: Optional[int] = 100, - **filters: Any - ) -> List[Any]: + limit: Optional[int] = 100 + ) -> List[g_type]: # Get the processor instance from context processor = info.context["processor"] user = info.context["user"] # Query Cassandra results = await processor.query_cassandra( - user, collection, schema_name, row_schema, - filters, limit + user, collection, s_name, r_schema, + {}, limit ) # Convert to GraphQL types graphql_results = [] for row in results: - graphql_obj = graphql_type(**row) + graphql_obj = g_type(**row) graphql_results.append(graphql_obj) return graphql_results @@ -272,9 +274,10 @@ class Processor(FlowProcessor): # Add resolver to query resolver_name = f"{schema_name}_objects" resolver_func = make_resolver(schema_name, row_schema, graphql_type) + self.resolvers[resolver_name] = resolver_func - # Create field with proper annotations - query_dict[resolver_name] = strawberry.field(resolver_func) + # Add field to query dictionary + query_dict[resolver_name] = strawberry.field(resolver=resolver_func) query_dict['__annotations__'][resolver_name] = List[graphql_type] # Create the Query class