robosystems-client 0.2.2__py3-none-any.whl → 0.2.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of robosystems-client might be problematic. Click here for more details.
- robosystems_client/api/agent/auto_select_agent.py +1 -41
- robosystems_client/api/agent/batch_process_queries.py +1 -41
- robosystems_client/api/agent/execute_specific_agent.py +1 -41
- robosystems_client/api/agent/get_agent_metadata.py +5 -49
- robosystems_client/api/agent/list_agents.py +4 -42
- robosystems_client/api/agent/recommend_agent.py +5 -45
- robosystems_client/api/auth/generate_sso_token.py +0 -18
- robosystems_client/api/auth/get_current_auth_user.py +14 -74
- robosystems_client/api/auth/logout_user.py +14 -50
- robosystems_client/api/auth/refresh_auth_session.py +14 -50
- robosystems_client/api/auth/resend_verification_email.py +14 -74
- robosystems_client/api/backup/create_backup.py +5 -45
- robosystems_client/api/backup/get_backup_download_url.py +4 -42
- robosystems_client/api/backup/get_backup_stats.py +5 -49
- robosystems_client/api/backup/list_backups.py +4 -42
- robosystems_client/api/backup/restore_backup.py +5 -45
- robosystems_client/api/connections/create_connection.py +5 -45
- robosystems_client/api/connections/create_link_token.py +5 -45
- robosystems_client/api/connections/delete_connection.py +5 -49
- robosystems_client/api/connections/exchange_link_token.py +5 -45
- robosystems_client/api/connections/get_connection.py +5 -49
- robosystems_client/api/connections/get_connection_options.py +5 -49
- robosystems_client/api/connections/init_o_auth.py +5 -45
- robosystems_client/api/connections/list_connections.py +4 -42
- robosystems_client/api/connections/oauth_callback.py +5 -45
- robosystems_client/api/connections/sync_connection.py +5 -45
- robosystems_client/api/graph_analytics/get_graph_metrics.py +5 -49
- robosystems_client/api/graph_analytics/get_graph_usage_stats.py +4 -42
- robosystems_client/api/graph_billing/get_current_graph_bill.py +5 -49
- robosystems_client/api/graph_billing/get_graph_billing_history.py +4 -42
- robosystems_client/api/graph_billing/get_graph_monthly_bill.py +5 -49
- robosystems_client/api/graph_billing/get_graph_usage_details.py +4 -42
- robosystems_client/api/graph_credits/check_credit_balance.py +0 -38
- robosystems_client/api/graph_credits/check_storage_limits.py +1 -45
- robosystems_client/api/graph_credits/get_credit_summary.py +1 -45
- robosystems_client/api/graph_credits/get_storage_usage.py +0 -38
- robosystems_client/api/graph_credits/list_credit_transactions.py +4 -42
- robosystems_client/api/graph_health/get_database_health.py +5 -49
- robosystems_client/api/graph_info/get_database_info.py +5 -49
- robosystems_client/api/graph_limits/get_graph_limits.py +5 -49
- robosystems_client/api/graphs/create_graph.py +21 -57
- robosystems_client/api/graphs/get_available_extensions.py +131 -15
- robosystems_client/api/graphs/get_graphs.py +154 -79
- robosystems_client/api/graphs/select_graph.py +117 -49
- robosystems_client/api/mcp/call_mcp_tool.py +24 -47
- robosystems_client/api/mcp/list_mcp_tools.py +13 -61
- robosystems_client/api/operations/cancel_operation.py +1 -45
- robosystems_client/api/operations/get_operation_status.py +1 -45
- robosystems_client/api/query/execute_cypher_query.py +68 -57
- robosystems_client/api/schema/export_graph_schema.py +223 -65
- robosystems_client/api/schema/get_graph_schema.py +137 -79
- robosystems_client/api/schema/validate_schema.py +5 -45
- robosystems_client/api/subgraphs/create_subgraph.py +5 -45
- robosystems_client/api/subgraphs/delete_subgraph.py +5 -45
- robosystems_client/api/subgraphs/get_subgraph_info.py +5 -49
- robosystems_client/api/subgraphs/get_subgraph_quota.py +5 -49
- robosystems_client/api/subgraphs/list_subgraphs.py +5 -49
- robosystems_client/api/tables/delete_file.py +317 -0
- robosystems_client/api/tables/get_file_info.py +249 -0
- robosystems_client/api/tables/get_upload_url.py +352 -0
- robosystems_client/api/tables/ingest_tables.py +428 -0
- robosystems_client/api/tables/list_table_files.py +329 -0
- robosystems_client/api/tables/list_tables.py +316 -0
- robosystems_client/api/tables/query_tables.py +431 -0
- robosystems_client/api/tables/update_file_status.py +395 -0
- robosystems_client/api/user/create_user_api_key.py +1 -41
- robosystems_client/api/user/get_all_credit_summaries.py +14 -111
- robosystems_client/api/user/get_current_user.py +14 -75
- robosystems_client/api/user/list_user_api_keys.py +14 -75
- robosystems_client/api/user/revoke_user_api_key.py +1 -45
- robosystems_client/api/user/update_user.py +1 -41
- robosystems_client/api/user/update_user_api_key.py +1 -41
- robosystems_client/api/user/update_user_password.py +1 -41
- robosystems_client/api/user_analytics/get_detailed_user_analytics.py +0 -38
- robosystems_client/api/user_analytics/get_user_usage_overview.py +14 -75
- robosystems_client/api/user_limits/get_all_shared_repository_limits.py +14 -105
- robosystems_client/api/user_limits/get_shared_repository_limits.py +1 -45
- robosystems_client/api/user_limits/get_user_limits.py +14 -75
- robosystems_client/api/user_limits/get_user_usage.py +14 -75
- robosystems_client/api/user_subscriptions/cancel_shared_repository_subscription.py +1 -45
- robosystems_client/api/user_subscriptions/get_repository_credits.py +1 -45
- robosystems_client/api/user_subscriptions/get_shared_repository_credits.py +14 -75
- robosystems_client/api/user_subscriptions/get_user_shared_subscriptions.py +0 -38
- robosystems_client/api/user_subscriptions/subscribe_to_shared_repository.py +1 -41
- robosystems_client/api/user_subscriptions/upgrade_shared_repository_subscription.py +1 -41
- robosystems_client/extensions/__init__.py +8 -1
- robosystems_client/extensions/auth_integration.py +1 -2
- robosystems_client/extensions/graph_client.py +5 -0
- robosystems_client/extensions/query_client.py +3 -2
- robosystems_client/extensions/sse_client.py +1 -1
- robosystems_client/extensions/table_ingest_client.py +36 -40
- robosystems_client/extensions/utils.py +2 -2
- robosystems_client/models/__init__.py +17 -21
- robosystems_client/models/create_graph_request.py +15 -3
- robosystems_client/models/cypher_query_request.py +5 -22
- robosystems_client/models/{delete_file_v1_graphs_graph_id_tables_files_file_id_delete_response_delete_file_v1_graphs_graph_id_tables_files_file_id_delete.py → delete_file_response.py} +45 -9
- robosystems_client/models/file_info.py +169 -0
- robosystems_client/models/file_status_update.py +41 -0
- robosystems_client/models/get_file_info_response.py +205 -0
- robosystems_client/models/list_table_files_response.py +105 -0
- robosystems_client/models/schema_export_response.py +4 -2
- robosystems_client/models/schema_info_response.py +77 -0
- robosystems_client/models/{get_graph_schema_response_getgraphschema.py → schema_info_response_schema.py} +6 -6
- robosystems_client/models/schema_validation_response.py +7 -6
- robosystems_client/models/table_query_request.py +37 -2
- robosystems_client/models/{get_file_info_v1_graphs_graph_id_tables_files_file_id_get_response_get_file_info_v1_graphs_graph_id_tables_files_file_id_get.py → update_file_status_response_updatefilestatus.py} +5 -8
- {robosystems_client-0.2.2.dist-info → robosystems_client-0.2.4.dist-info}/METADATA +2 -4
- {robosystems_client-0.2.2.dist-info → robosystems_client-0.2.4.dist-info}/RECORD +110 -108
- robosystems_client/api/tables/delete_file_v1_graphs_graph_id_tables_files_file_id_delete.py +0 -287
- robosystems_client/api/tables/get_file_info_v1_graphs_graph_id_tables_files_file_id_get.py +0 -283
- robosystems_client/api/tables/get_upload_url_v1_graphs_graph_id_tables_table_name_files_post.py +0 -260
- robosystems_client/api/tables/ingest_tables_v1_graphs_graph_id_tables_ingest_post.py +0 -251
- robosystems_client/api/tables/list_table_files_v1_graphs_graph_id_tables_table_name_files_get.py +0 -283
- robosystems_client/api/tables/list_tables_v1_graphs_graph_id_tables_get.py +0 -224
- robosystems_client/api/tables/query_tables_v1_graphs_graph_id_tables_query_post.py +0 -247
- robosystems_client/api/tables/update_file_v1_graphs_graph_id_tables_files_file_id_patch.py +0 -306
- robosystems_client/models/file_update_request.py +0 -62
- robosystems_client/models/list_table_files_v1_graphs_graph_id_tables_table_name_files_get_response_list_table_files_v1_graphs_graph_id_tables_table_name_files_get.py +0 -47
- robosystems_client/models/update_file_v1_graphs_graph_id_tables_files_file_id_patch_response_update_file_v1_graphs_graph_id_tables_files_file_id_patch.py +0 -47
- {robosystems_client-0.2.2.dist-info → robosystems_client-0.2.4.dist-info}/WHEEL +0 -0
- {robosystems_client-0.2.2.dist-info → robosystems_client-0.2.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -16,14 +16,10 @@ def _get_kwargs(
|
|
|
16
16
|
*,
|
|
17
17
|
body: CypherQueryRequest,
|
|
18
18
|
mode: Union[None, ResponseMode, Unset] = UNSET,
|
|
19
|
-
chunk_size: Union[Unset, int] =
|
|
19
|
+
chunk_size: Union[None, Unset, int] = UNSET,
|
|
20
20
|
test_mode: Union[Unset, bool] = False,
|
|
21
|
-
token: Union[None, Unset, str] = UNSET,
|
|
22
|
-
authorization: Union[None, Unset, str] = UNSET,
|
|
23
21
|
) -> dict[str, Any]:
|
|
24
22
|
headers: dict[str, Any] = {}
|
|
25
|
-
if not isinstance(authorization, Unset):
|
|
26
|
-
headers["authorization"] = authorization
|
|
27
23
|
|
|
28
24
|
params: dict[str, Any] = {}
|
|
29
25
|
|
|
@@ -36,17 +32,15 @@ def _get_kwargs(
|
|
|
36
32
|
json_mode = mode
|
|
37
33
|
params["mode"] = json_mode
|
|
38
34
|
|
|
39
|
-
|
|
35
|
+
json_chunk_size: Union[None, Unset, int]
|
|
36
|
+
if isinstance(chunk_size, Unset):
|
|
37
|
+
json_chunk_size = UNSET
|
|
38
|
+
else:
|
|
39
|
+
json_chunk_size = chunk_size
|
|
40
|
+
params["chunk_size"] = json_chunk_size
|
|
40
41
|
|
|
41
42
|
params["test_mode"] = test_mode
|
|
42
43
|
|
|
43
|
-
json_token: Union[None, Unset, str]
|
|
44
|
-
if isinstance(token, Unset):
|
|
45
|
-
json_token = UNSET
|
|
46
|
-
else:
|
|
47
|
-
json_token = token
|
|
48
|
-
params["token"] = json_token
|
|
49
|
-
|
|
50
44
|
params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
|
|
51
45
|
|
|
52
46
|
_kwargs: dict[str, Any] = {
|
|
@@ -67,11 +61,12 @@ def _parse_response(
|
|
|
67
61
|
*, client: Union[AuthenticatedClient, Client], response: httpx.Response
|
|
68
62
|
) -> Optional[Union[Any, HTTPValidationError]]:
|
|
69
63
|
if response.status_code == 200:
|
|
70
|
-
# Check if this is NDJSON - if so, skip parsing (will be handled by client)
|
|
71
64
|
content_type = response.headers.get("content-type", "")
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
65
|
+
if (
|
|
66
|
+
"application/x-ndjson" in content_type
|
|
67
|
+
or response.headers.get("x-stream-format") == "ndjson"
|
|
68
|
+
):
|
|
69
|
+
return None
|
|
75
70
|
response_200 = response.json()
|
|
76
71
|
return response_200
|
|
77
72
|
|
|
@@ -131,12 +126,10 @@ def sync_detailed(
|
|
|
131
126
|
client: AuthenticatedClient,
|
|
132
127
|
body: CypherQueryRequest,
|
|
133
128
|
mode: Union[None, ResponseMode, Unset] = UNSET,
|
|
134
|
-
chunk_size: Union[Unset, int] =
|
|
129
|
+
chunk_size: Union[None, Unset, int] = UNSET,
|
|
135
130
|
test_mode: Union[Unset, bool] = False,
|
|
136
|
-
token: Union[None, Unset, str] = UNSET,
|
|
137
|
-
authorization: Union[None, Unset, str] = UNSET,
|
|
138
131
|
) -> Response[Union[Any, HTTPValidationError]]:
|
|
139
|
-
"""Execute Cypher Query (Read-Only)
|
|
132
|
+
r"""Execute Cypher Query (Read-Only)
|
|
140
133
|
|
|
141
134
|
Execute a read-only Cypher query with intelligent response optimization.
|
|
142
135
|
|
|
@@ -146,6 +139,16 @@ def sync_detailed(
|
|
|
146
139
|
1. Create file upload: `POST /v1/graphs/{graph_id}/tables/{table_name}/files`
|
|
147
140
|
2. Ingest to graph: `POST /v1/graphs/{graph_id}/tables/ingest`
|
|
148
141
|
|
|
142
|
+
**Security Best Practice - Use Parameterized Queries:**
|
|
143
|
+
ALWAYS use query parameters instead of string interpolation to prevent injection attacks:
|
|
144
|
+
- ✅ SAFE: `MATCH (n:Entity {type: $entity_type}) RETURN n` with `parameters: {\"entity_type\":
|
|
145
|
+
\"Company\"}`
|
|
146
|
+
- ❌ UNSAFE: `MATCH (n:Entity {type: \"Company\"}) RETURN n` with user input concatenated into query
|
|
147
|
+
string
|
|
148
|
+
|
|
149
|
+
Query parameters provide automatic escaping and type safety. All examples in this API use
|
|
150
|
+
parameterized queries.
|
|
151
|
+
|
|
149
152
|
This endpoint automatically selects the best execution strategy based on:
|
|
150
153
|
- Query characteristics (size, complexity)
|
|
151
154
|
- Client capabilities (SSE, NDJSON, JSON)
|
|
@@ -193,12 +196,10 @@ def sync_detailed(
|
|
|
193
196
|
Queue position is based on subscription tier for priority.
|
|
194
197
|
|
|
195
198
|
Args:
|
|
196
|
-
graph_id (str):
|
|
199
|
+
graph_id (str):
|
|
197
200
|
mode (Union[None, ResponseMode, Unset]): Response mode override
|
|
198
|
-
chunk_size (Union[Unset, int]): Rows per chunk for streaming
|
|
201
|
+
chunk_size (Union[None, Unset, int]): Rows per chunk for streaming
|
|
199
202
|
test_mode (Union[Unset, bool]): Enable test mode for better debugging Default: False.
|
|
200
|
-
token (Union[None, Unset, str]): JWT token for SSE authentication
|
|
201
|
-
authorization (Union[None, Unset, str]):
|
|
202
203
|
body (CypherQueryRequest): Request model for Cypher query execution.
|
|
203
204
|
|
|
204
205
|
Raises:
|
|
@@ -215,8 +216,6 @@ def sync_detailed(
|
|
|
215
216
|
mode=mode,
|
|
216
217
|
chunk_size=chunk_size,
|
|
217
218
|
test_mode=test_mode,
|
|
218
|
-
token=token,
|
|
219
|
-
authorization=authorization,
|
|
220
219
|
)
|
|
221
220
|
|
|
222
221
|
response = client.get_httpx_client().request(
|
|
@@ -232,12 +231,10 @@ def sync(
|
|
|
232
231
|
client: AuthenticatedClient,
|
|
233
232
|
body: CypherQueryRequest,
|
|
234
233
|
mode: Union[None, ResponseMode, Unset] = UNSET,
|
|
235
|
-
chunk_size: Union[Unset, int] =
|
|
234
|
+
chunk_size: Union[None, Unset, int] = UNSET,
|
|
236
235
|
test_mode: Union[Unset, bool] = False,
|
|
237
|
-
token: Union[None, Unset, str] = UNSET,
|
|
238
|
-
authorization: Union[None, Unset, str] = UNSET,
|
|
239
236
|
) -> Optional[Union[Any, HTTPValidationError]]:
|
|
240
|
-
"""Execute Cypher Query (Read-Only)
|
|
237
|
+
r"""Execute Cypher Query (Read-Only)
|
|
241
238
|
|
|
242
239
|
Execute a read-only Cypher query with intelligent response optimization.
|
|
243
240
|
|
|
@@ -247,6 +244,16 @@ def sync(
|
|
|
247
244
|
1. Create file upload: `POST /v1/graphs/{graph_id}/tables/{table_name}/files`
|
|
248
245
|
2. Ingest to graph: `POST /v1/graphs/{graph_id}/tables/ingest`
|
|
249
246
|
|
|
247
|
+
**Security Best Practice - Use Parameterized Queries:**
|
|
248
|
+
ALWAYS use query parameters instead of string interpolation to prevent injection attacks:
|
|
249
|
+
- ✅ SAFE: `MATCH (n:Entity {type: $entity_type}) RETURN n` with `parameters: {\"entity_type\":
|
|
250
|
+
\"Company\"}`
|
|
251
|
+
- ❌ UNSAFE: `MATCH (n:Entity {type: \"Company\"}) RETURN n` with user input concatenated into query
|
|
252
|
+
string
|
|
253
|
+
|
|
254
|
+
Query parameters provide automatic escaping and type safety. All examples in this API use
|
|
255
|
+
parameterized queries.
|
|
256
|
+
|
|
250
257
|
This endpoint automatically selects the best execution strategy based on:
|
|
251
258
|
- Query characteristics (size, complexity)
|
|
252
259
|
- Client capabilities (SSE, NDJSON, JSON)
|
|
@@ -294,12 +301,10 @@ def sync(
|
|
|
294
301
|
Queue position is based on subscription tier for priority.
|
|
295
302
|
|
|
296
303
|
Args:
|
|
297
|
-
graph_id (str):
|
|
304
|
+
graph_id (str):
|
|
298
305
|
mode (Union[None, ResponseMode, Unset]): Response mode override
|
|
299
|
-
chunk_size (Union[Unset, int]): Rows per chunk for streaming
|
|
306
|
+
chunk_size (Union[None, Unset, int]): Rows per chunk for streaming
|
|
300
307
|
test_mode (Union[Unset, bool]): Enable test mode for better debugging Default: False.
|
|
301
|
-
token (Union[None, Unset, str]): JWT token for SSE authentication
|
|
302
|
-
authorization (Union[None, Unset, str]):
|
|
303
308
|
body (CypherQueryRequest): Request model for Cypher query execution.
|
|
304
309
|
|
|
305
310
|
Raises:
|
|
@@ -317,8 +322,6 @@ def sync(
|
|
|
317
322
|
mode=mode,
|
|
318
323
|
chunk_size=chunk_size,
|
|
319
324
|
test_mode=test_mode,
|
|
320
|
-
token=token,
|
|
321
|
-
authorization=authorization,
|
|
322
325
|
).parsed
|
|
323
326
|
|
|
324
327
|
|
|
@@ -328,12 +331,10 @@ async def asyncio_detailed(
|
|
|
328
331
|
client: AuthenticatedClient,
|
|
329
332
|
body: CypherQueryRequest,
|
|
330
333
|
mode: Union[None, ResponseMode, Unset] = UNSET,
|
|
331
|
-
chunk_size: Union[Unset, int] =
|
|
334
|
+
chunk_size: Union[None, Unset, int] = UNSET,
|
|
332
335
|
test_mode: Union[Unset, bool] = False,
|
|
333
|
-
token: Union[None, Unset, str] = UNSET,
|
|
334
|
-
authorization: Union[None, Unset, str] = UNSET,
|
|
335
336
|
) -> Response[Union[Any, HTTPValidationError]]:
|
|
336
|
-
"""Execute Cypher Query (Read-Only)
|
|
337
|
+
r"""Execute Cypher Query (Read-Only)
|
|
337
338
|
|
|
338
339
|
Execute a read-only Cypher query with intelligent response optimization.
|
|
339
340
|
|
|
@@ -343,6 +344,16 @@ async def asyncio_detailed(
|
|
|
343
344
|
1. Create file upload: `POST /v1/graphs/{graph_id}/tables/{table_name}/files`
|
|
344
345
|
2. Ingest to graph: `POST /v1/graphs/{graph_id}/tables/ingest`
|
|
345
346
|
|
|
347
|
+
**Security Best Practice - Use Parameterized Queries:**
|
|
348
|
+
ALWAYS use query parameters instead of string interpolation to prevent injection attacks:
|
|
349
|
+
- ✅ SAFE: `MATCH (n:Entity {type: $entity_type}) RETURN n` with `parameters: {\"entity_type\":
|
|
350
|
+
\"Company\"}`
|
|
351
|
+
- ❌ UNSAFE: `MATCH (n:Entity {type: \"Company\"}) RETURN n` with user input concatenated into query
|
|
352
|
+
string
|
|
353
|
+
|
|
354
|
+
Query parameters provide automatic escaping and type safety. All examples in this API use
|
|
355
|
+
parameterized queries.
|
|
356
|
+
|
|
346
357
|
This endpoint automatically selects the best execution strategy based on:
|
|
347
358
|
- Query characteristics (size, complexity)
|
|
348
359
|
- Client capabilities (SSE, NDJSON, JSON)
|
|
@@ -390,12 +401,10 @@ async def asyncio_detailed(
|
|
|
390
401
|
Queue position is based on subscription tier for priority.
|
|
391
402
|
|
|
392
403
|
Args:
|
|
393
|
-
graph_id (str):
|
|
404
|
+
graph_id (str):
|
|
394
405
|
mode (Union[None, ResponseMode, Unset]): Response mode override
|
|
395
|
-
chunk_size (Union[Unset, int]): Rows per chunk for streaming
|
|
406
|
+
chunk_size (Union[None, Unset, int]): Rows per chunk for streaming
|
|
396
407
|
test_mode (Union[Unset, bool]): Enable test mode for better debugging Default: False.
|
|
397
|
-
token (Union[None, Unset, str]): JWT token for SSE authentication
|
|
398
|
-
authorization (Union[None, Unset, str]):
|
|
399
408
|
body (CypherQueryRequest): Request model for Cypher query execution.
|
|
400
409
|
|
|
401
410
|
Raises:
|
|
@@ -412,8 +421,6 @@ async def asyncio_detailed(
|
|
|
412
421
|
mode=mode,
|
|
413
422
|
chunk_size=chunk_size,
|
|
414
423
|
test_mode=test_mode,
|
|
415
|
-
token=token,
|
|
416
|
-
authorization=authorization,
|
|
417
424
|
)
|
|
418
425
|
|
|
419
426
|
response = await client.get_async_httpx_client().request(**kwargs)
|
|
@@ -427,12 +434,10 @@ async def asyncio(
|
|
|
427
434
|
client: AuthenticatedClient,
|
|
428
435
|
body: CypherQueryRequest,
|
|
429
436
|
mode: Union[None, ResponseMode, Unset] = UNSET,
|
|
430
|
-
chunk_size: Union[Unset, int] =
|
|
437
|
+
chunk_size: Union[None, Unset, int] = UNSET,
|
|
431
438
|
test_mode: Union[Unset, bool] = False,
|
|
432
|
-
token: Union[None, Unset, str] = UNSET,
|
|
433
|
-
authorization: Union[None, Unset, str] = UNSET,
|
|
434
439
|
) -> Optional[Union[Any, HTTPValidationError]]:
|
|
435
|
-
"""Execute Cypher Query (Read-Only)
|
|
440
|
+
r"""Execute Cypher Query (Read-Only)
|
|
436
441
|
|
|
437
442
|
Execute a read-only Cypher query with intelligent response optimization.
|
|
438
443
|
|
|
@@ -442,6 +447,16 @@ async def asyncio(
|
|
|
442
447
|
1. Create file upload: `POST /v1/graphs/{graph_id}/tables/{table_name}/files`
|
|
443
448
|
2. Ingest to graph: `POST /v1/graphs/{graph_id}/tables/ingest`
|
|
444
449
|
|
|
450
|
+
**Security Best Practice - Use Parameterized Queries:**
|
|
451
|
+
ALWAYS use query parameters instead of string interpolation to prevent injection attacks:
|
|
452
|
+
- ✅ SAFE: `MATCH (n:Entity {type: $entity_type}) RETURN n` with `parameters: {\"entity_type\":
|
|
453
|
+
\"Company\"}`
|
|
454
|
+
- ❌ UNSAFE: `MATCH (n:Entity {type: \"Company\"}) RETURN n` with user input concatenated into query
|
|
455
|
+
string
|
|
456
|
+
|
|
457
|
+
Query parameters provide automatic escaping and type safety. All examples in this API use
|
|
458
|
+
parameterized queries.
|
|
459
|
+
|
|
445
460
|
This endpoint automatically selects the best execution strategy based on:
|
|
446
461
|
- Query characteristics (size, complexity)
|
|
447
462
|
- Client capabilities (SSE, NDJSON, JSON)
|
|
@@ -489,12 +504,10 @@ async def asyncio(
|
|
|
489
504
|
Queue position is based on subscription tier for priority.
|
|
490
505
|
|
|
491
506
|
Args:
|
|
492
|
-
graph_id (str):
|
|
507
|
+
graph_id (str):
|
|
493
508
|
mode (Union[None, ResponseMode, Unset]): Response mode override
|
|
494
|
-
chunk_size (Union[Unset, int]): Rows per chunk for streaming
|
|
509
|
+
chunk_size (Union[None, Unset, int]): Rows per chunk for streaming
|
|
495
510
|
test_mode (Union[Unset, bool]): Enable test mode for better debugging Default: False.
|
|
496
|
-
token (Union[None, Unset, str]): JWT token for SSE authentication
|
|
497
|
-
authorization (Union[None, Unset, str]):
|
|
498
511
|
body (CypherQueryRequest): Request model for Cypher query execution.
|
|
499
512
|
|
|
500
513
|
Raises:
|
|
@@ -513,7 +526,5 @@ async def asyncio(
|
|
|
513
526
|
mode=mode,
|
|
514
527
|
chunk_size=chunk_size,
|
|
515
528
|
test_mode=test_mode,
|
|
516
|
-
token=token,
|
|
517
|
-
authorization=authorization,
|
|
518
529
|
)
|
|
519
530
|
).parsed
|