diff --git a/src/isar_exr/api/graphql_client.py b/src/isar_exr/api/graphql_client.py index 87e38a5..d55cb16 100644 --- a/src/isar_exr/api/graphql_client.py +++ b/src/isar_exr/api/graphql_client.py @@ -3,12 +3,14 @@ from gql import Client from gql.dsl import DSLSchema +from gql.transport.httpx import HTTPXTransport from gql.transport.aiohttp import AIOHTTPTransport from gql.transport.exceptions import ( TransportClosed, TransportProtocolError, TransportQueryError, TransportServerError, + TransportAlreadyConnected, ) from graphql import DocumentNode, GraphQLError, GraphQLSchema, build_ast_schema, parse @@ -22,9 +24,9 @@ def __init__(self) -> None: # in case of expired token self._reauthenticated: bool = False self.logger: Logger = getLogger("graphql_client") - self._initialize_client() + self._initialize_session() - def _initialize_client(self): + def _initialize_session(self): try: token: str = get_access_token() except Exception as e: @@ -41,11 +43,12 @@ def _initialize_client(self): schema: GraphQLSchema = build_ast_schema(document) - transport: AIOHTTPTransport = AIOHTTPTransport( + transport: HTTPXTransport = HTTPXTransport( url=settings.ROBOT_API_URL, headers=auth_header ) self.client: Client = Client(transport=transport, schema=schema) self.schema: DSLSchema = DSLSchema(self.client.schema) + self.session = self.client.connect_sync() def query( self, query: DocumentNode, query_parameters: dict[str, Any] @@ -60,7 +63,7 @@ def query( :raises Exception: Unknown error """ try: - response: Dict[str, Any] = self.client.execute(query, query_parameters) + response: Dict[str, Any] = self.session.execute(query, query_parameters) return response except GraphQLError as e: self.logger.error( @@ -89,6 +92,9 @@ def query( except TransportServerError as e: self.logger.error(f"Error in Energy Robotics server: {e}") raise + except TransportAlreadyConnected as e: + self.logger.error(f"The transport is already connected: {e}") + raise except Exception as e: self.logger.error(f"Unknown error in GraphQL client: {e}") raise