Skip to content

Commit 0744944

Browse files
SK-3118: Remove flowvault query op + rewrite README as full Java-parity mirror
Remove the `query` operation from the Python flowvault SDK so its operation set mirrors Java flowvault (which has no query): - Drop VaultController.query and the query wire helper; remove QueryRequest/ QueryResponse/QueryResponseRecord/QueryResponseMetadata/QueryOptions data classes, validation, messages, the client query-api accessor, tests, and the query sample. - Relax the shared common IVaultController interface: query is no longer a required abstract op (skyvault keeps its own concrete query, unaffected), so flowvault's controller is concrete without it. Updated the common contract test. - Regenerated the flowvault public-API contract baseline (query classes removed). Rewrite flowvault/README.md as a full mirror of the Java flowvault README structure, adapted to Python: expanded Authenticate (bearer/context/scoped/signed token generation via skyflow.service_account), VaultConfig + builder reference tables, Schema-vs-schemaless, Unary-vs-bulk parity, the "SDK Guidelines: Unary vs Bulk Operations" section, per-operation sections with sample responses, Custom Request Headers, and a full Error Handling breakdown. Dropped the Java-only tokenize/delete-tokens ops and the removed query op; removed the "Privacy DB" install-vs-import note; corrected the bulk concurrency max to 100. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent d5f7780 commit 0744944

21 files changed

Lines changed: 938 additions & 513 deletions

common/tests/vault/test_base_vault_controller.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ def update(self, request):
2020
def delete(self, request):
2121
raise NotImplementedError
2222

23-
def query(self, request):
24-
raise NotImplementedError
25-
2623
def detokenize(self, request):
2724
raise NotImplementedError
2825

@@ -36,11 +33,11 @@ class Incomplete(BaseVaultController):
3633
Incomplete(vault_client=None)
3734

3835
def test_cannot_instantiate_missing_any_single_method(self):
39-
"""Java-interface-style: every one of the six operations is independently required --
36+
"""Java-interface-style: every one of the five operations is independently required --
4037
omitting any single one (not just insert) blocks instantiation."""
41-
for missing in ("insert", "get", "update", "delete", "query", "detokenize"):
38+
for missing in ("insert", "get", "update", "delete", "detokenize"):
4239
methods = {name: (lambda self, request: None) for name in
43-
("insert", "get", "update", "delete", "query", "detokenize") if name != missing}
40+
("insert", "get", "update", "delete", "detokenize") if name != missing}
4441
Incomplete = type("Incomplete", (BaseVaultController,), methods)
4542
with self.assertRaises(TypeError, msg=f"missing only '{missing}' should still fail to instantiate"):
4643
Incomplete(vault_client=None)

common/vault/base_vault_controller.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,6 @@ def update(self, request):
2525
def delete(self, request):
2626
raise NotImplementedError
2727

28-
@abstractmethod
29-
def query(self, request):
30-
raise NotImplementedError
31-
3228
@abstractmethod
3329
def detokenize(self, request):
3430
raise NotImplementedError

flowvault/README.md

Lines changed: 935 additions & 201 deletions
Large diffs are not rendered by default.

flowvault/api-report/skyflow.api.json

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
"skyflow.vault.controller.VaultController.detokenize": "def (self, request: DetokenizeRequest, options: DetokenizeOptions = None) -> DetokenizeResponse",
4848
"skyflow.vault.controller.VaultController.get": "def (self, request: GetRequest, options: GetOptions = None) -> GetResponse",
4949
"skyflow.vault.controller.VaultController.insert": "def (self, request: InsertRequest, options: InsertOptions = None) -> InsertResponse",
50-
"skyflow.vault.controller.VaultController.query": "def (self, request: QueryRequest, options: QueryOptions = None) -> QueryResponse",
5150
"skyflow.vault.controller.VaultController.update": "def (self, request: UpdateRequest, options: UpdateOptions = None) -> UpdateResponse",
5251
"skyflow.vault.data.BulkDetokenizeOptions": "class ()",
5352
"skyflow.vault.data.BulkDetokenizeOptions.__init__": "def (self, interceptor: Optional[Callable[[RequestContext], None]] = None)",
@@ -219,22 +218,6 @@
219218
"skyflow.vault.data.InsertResponseRecord.skyflow_id": "attr",
220219
"skyflow.vault.data.InsertResponseRecord.table_name": "attr",
221220
"skyflow.vault.data.InsertResponseRecord.tokens": "attr",
222-
"skyflow.vault.data.QueryOptions": "class ()",
223-
"skyflow.vault.data.QueryOptions.__init__": "def (self, interceptor: Optional[Callable[[RequestContext], None]] = None)",
224-
"skyflow.vault.data.QueryOptions.interceptor": "attr",
225-
"skyflow.vault.data.QueryRequest": "class ()",
226-
"skyflow.vault.data.QueryRequest.__init__": "def (self, query: str)",
227-
"skyflow.vault.data.QueryRequest.query": "attr",
228-
"skyflow.vault.data.QueryResponse": "class ()",
229-
"skyflow.vault.data.QueryResponse.__init__": "def (self, records = None, metadata = None)",
230-
"skyflow.vault.data.QueryResponse.metadata": "attr",
231-
"skyflow.vault.data.QueryResponse.records": "attr",
232-
"skyflow.vault.data.QueryResponseMetadata": "class ()",
233-
"skyflow.vault.data.QueryResponseMetadata.__init__": "def (self, columns = None)",
234-
"skyflow.vault.data.QueryResponseMetadata.columns": "attr",
235-
"skyflow.vault.data.QueryResponseRecord": "class ()",
236-
"skyflow.vault.data.QueryResponseRecord.__init__": "def (self, data = None)",
237-
"skyflow.vault.data.QueryResponseRecord.data": "attr",
238221
"skyflow.vault.data.RequestContext": "class ()",
239222
"skyflow.vault.data.RequestContext.__init__": "def (self, operation, batch_index = NOT_BATCHED, total_batches = NOT_BATCHED)",
240223
"skyflow.vault.data.RequestContext.add_header": "def (self, key, value)",

flowvault/samples/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ python flowvault/samples/vault_api/bulk_insert_async.py # async samples run th
4343
| [update_record.py](vault_api/update_record.py) | Update a record |
4444
| [delete_records.py](vault_api/delete_records.py) | Delete records |
4545
| [detokenize_records.py](vault_api/detokenize_records.py) | Detokenize tokens |
46-
| [query_records.py](vault_api/query_records.py) | Run a SQL `SELECT` query |
4746

4847
## Bulk operations
4948

flowvault/samples/vault_api/query_records.py

Lines changed: 0 additions & 48 deletions
This file was deleted.

flowvault/skyflow/utils/_skyflow_messages.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,6 @@ class Error(Enum):
8181
INVALID_TOKENS_TYPE_IN_DETOKENIZE = f"{error_prefix} Detokenize failed. 'tokens' must be a non-empty list of strings."
8282
INVALID_TOKEN_GROUP_REDACTIONS_IN_DETOKENIZE = f"{error_prefix} Detokenize failed. 'token_group_redactions' must be a list of TokenGroupRedactions objects with a non-empty 'token_group_name'."
8383

84-
INVALID_QUERY_IN_QUERY = f"{error_prefix} Query failed. 'query' must be a non-empty string."
85-
8684

8785
EMPTY_RECORDS_IN_BULK_INSERT = f"{error_prefix} Bulk insert failed. Specify at least one record to insert."
8886
INVALID_RECORDS_TYPE_IN_BULK_INSERT = f"{error_prefix} Bulk insert failed. 'records' must be a list of BulkInsertRequestRecord objects."
@@ -121,12 +119,6 @@ class Info(Enum):
121119
DETOKENIZE_REQUEST_RESOLVED = f"{INFO}: [{error_prefix}] Detokenize request resolved."
122120
DETOKENIZE_SUCCESS = f"{INFO}: [{error_prefix}] Tokens detokenized."
123121

124-
VALIDATE_QUERY_REQUEST = f"{INFO}: [{error_prefix}] Validating query request."
125-
QUERY_TRIGGERED = f"{INFO}: [{error_prefix}] Query method triggered."
126-
QUERY_REQUEST_RESOLVED = f"{INFO}: [{error_prefix}] Query request resolved."
127-
QUERY_SUCCESS = f"{INFO}: [{error_prefix}] Query executed."
128-
129-
130122
VALIDATE_BULK_INSERT_REQUEST = f"{INFO}: [{error_prefix}] Validating bulk insert request."
131123
BULK_INSERT_TRIGGERED = f"{INFO}: [{error_prefix}] Bulk insert method triggered."
132124
BULK_INSERT_REQUEST_RESOLVED = f"{INFO}: [{error_prefix}] Bulk insert request resolved."
@@ -145,6 +137,5 @@ class ErrorLogs(Enum):
145137
UPDATE_RECORDS_REJECTED = f"{ERROR}: [{error_prefix}] Update call resulted in failure."
146138
DELETE_RECORDS_REJECTED = f"{ERROR}: [{error_prefix}] Delete call resulted in failure."
147139
DETOKENIZE_RECORDS_REJECTED = f"{ERROR}: [{error_prefix}] Detokenize call resulted in failure."
148-
QUERY_RECORDS_REJECTED = f"{ERROR}: [{error_prefix}] Query call resulted in failure."
149140
BULK_INSERT_RECORDS_REJECTED = f"{ERROR}: [{error_prefix}] Bulk insert batch resulted in failure."
150141
BULK_DETOKENIZE_RECORDS_REJECTED = f"{ERROR}: [{error_prefix}] Bulk detokenize batch resulted in failure."

flowvault/skyflow/utils/validations/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
validate_update_request,
77
validate_delete_request,
88
validate_detokenize_request,
9-
validate_query_request,
109
validate_bulk_insert_request,
1110
validate_bulk_detokenize_request,
1211
)

flowvault/skyflow/utils/validations/_validations.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,6 @@ def validate_detokenize_request(logger, request):
201201
raise SkyflowError(SkyflowMessages.Error.INVALID_TOKEN_GROUP_REDACTIONS_IN_DETOKENIZE.value, invalid_input_error_code)
202202

203203

204-
def validate_query_request(logger, request):
205-
if not isinstance(request.query, str) or not request.query.strip():
206-
raise SkyflowError(SkyflowMessages.Error.INVALID_QUERY_IN_QUERY.value, invalid_input_error_code)
207-
208-
209204
def validate_bulk_insert_request(logger, request):
210205
if not isinstance(request.records, list) or not all(isinstance(r, BulkInsertRequestRecord) for r in request.records):
211206
raise SkyflowError(SkyflowMessages.Error.INVALID_RECORDS_TYPE_IN_BULK_INSERT.value, invalid_input_error_code)

flowvault/skyflow/vault/client/client.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,6 @@ def get_records_api(self):
147147
def get_tokens_api(self):
148148
return self._api_client.tokens
149149

150-
def get_query_api(self):
151-
return self._api_client.query
152-
153150
def get_async_records_api(self):
154151
return self._async_api_client.records
155152

0 commit comments

Comments
 (0)