From 0943574bd90d8066916bb2218bda386a931e7c3d Mon Sep 17 00:00:00 2001 From: Joey French Date: Thu, 20 Nov 2025 03:26:19 -0600 Subject: [PATCH] Implement AuthenticatedClient integration in FileClient, MaterializationClient, and TableClient This commit introduces the use of the AuthenticatedClient across the FileClient, MaterializationClient, and TableClient classes. It ensures that an API key is provided before making requests, enhancing security and error handling. The client is now instantiated with the necessary parameters, improving the overall architecture and maintainability of the codebase. --- robosystems_client/extensions/file_client.py | 62 +++++++++++++++++-- .../extensions/materialization_client.py | 30 ++++++++- robosystems_client/extensions/table_client.py | 30 ++++++++- 3 files changed, 113 insertions(+), 9 deletions(-) diff --git a/robosystems_client/extensions/file_client.py b/robosystems_client/extensions/file_client.py index 6c01105..b5a40a7 100644 --- a/robosystems_client/extensions/file_client.py +++ b/robosystems_client/extensions/file_client.py @@ -134,9 +134,22 @@ def upload( table_name=table_name, ) + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, - "client": self.config.get("client"), + "client": client, "body": upload_request, } @@ -195,7 +208,7 @@ def upload( update_kwargs = { "graph_id": graph_id, "file_id": file_id, - "client": self.config.get("client"), + "client": client, "body": status_update, } @@ -261,9 +274,22 @@ def list( List of FileInfo objects """ try: + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, - "client": self.config.get("client"), + "client": client, } if table_name: @@ -311,10 +337,23 @@ def get(self, graph_id: str, file_id: str) -> Optional[FileInfo]: FileInfo with multi-layer status tracking, or None if not found """ try: + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, "file_id": file_id, - "client": self.config.get("client"), + "client": client, } response = get_file(**kwargs) @@ -355,10 +394,23 @@ def delete(self, graph_id: str, file_id: str, cascade: bool = False) -> bool: True if deletion succeeded, False otherwise """ try: + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, "file_id": file_id, - "client": self.config.get("client"), + "client": client, "cascade": cascade, } diff --git a/robosystems_client/extensions/materialization_client.py b/robosystems_client/extensions/materialization_client.py index 2ddbbbe..a4846ba 100644 --- a/robosystems_client/extensions/materialization_client.py +++ b/robosystems_client/extensions/materialization_client.py @@ -104,9 +104,22 @@ def materialize( force=options.force, ) + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, - "client": self.config.get("client"), + "client": client, "body": request, } @@ -182,9 +195,22 @@ def status(self, graph_id: str) -> Optional[MaterializationStatus]: MaterializationStatus with staleness and timing information """ try: + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, - "client": self.config.get("client"), + "client": client, } response = get_materialization_status(**kwargs) diff --git a/robosystems_client/extensions/table_client.py b/robosystems_client/extensions/table_client.py index 00f40f1..ccaec73 100644 --- a/robosystems_client/extensions/table_client.py +++ b/robosystems_client/extensions/table_client.py @@ -62,9 +62,22 @@ def list(self, graph_id: str) -> list[TableInfo]: List of TableInfo objects with metadata """ try: + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, - "client": self.config.get("client"), + "client": client, } response = list_tables(**kwargs) @@ -120,9 +133,22 @@ def query( request = TableQueryRequest(sql=final_query) + from ..client import AuthenticatedClient + + if not self.token: + raise Exception("No API key provided. Set X-API-Key in headers.") + + client = AuthenticatedClient( + base_url=self.base_url, + token=self.token, + prefix="", + auth_header_name="X-API-Key", + headers=self.headers, + ) + kwargs = { "graph_id": graph_id, - "client": self.config.get("client"), + "client": client, "body": request, }