robosystems-client 0.1.19__py3-none-any.whl → 0.2.1__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 +9 -3
- robosystems_client/api/agent/batch_process_queries.py +8 -3
- robosystems_client/api/agent/execute_specific_agent.py +10 -3
- robosystems_client/api/agent/get_agent_metadata.py +3 -0
- robosystems_client/api/agent/list_agents.py +3 -0
- robosystems_client/api/agent/recommend_agent.py +3 -0
- robosystems_client/api/auth/check_password_strength.py +2 -0
- robosystems_client/api/auth/complete_sso_auth.py +3 -0
- robosystems_client/api/auth/forgot_password.py +6 -3
- robosystems_client/api/auth/generate_sso_token.py +3 -0
- robosystems_client/api/auth/get_captcha_config.py +1 -0
- robosystems_client/api/auth/get_current_auth_user.py +3 -0
- robosystems_client/api/auth/get_password_policy.py +1 -0
- robosystems_client/api/auth/login_user.py +7 -3
- robosystems_client/api/auth/logout_user.py +2 -0
- robosystems_client/api/auth/refresh_auth_session.py +3 -0
- robosystems_client/api/auth/register_user.py +11 -6
- robosystems_client/api/auth/resend_verification_email.py +8 -3
- robosystems_client/api/auth/reset_password.py +3 -0
- robosystems_client/api/auth/sso_token_exchange.py +7 -3
- robosystems_client/api/auth/validate_reset_token.py +2 -0
- robosystems_client/api/auth/verify_email.py +3 -0
- robosystems_client/api/backup/create_backup.py +13 -7
- robosystems_client/api/backup/get_backup_download_url.py +8 -3
- robosystems_client/api/backup/get_backup_stats.py +2 -0
- robosystems_client/api/backup/list_backups.py +6 -4
- robosystems_client/api/backup/restore_backup.py +27 -8
- robosystems_client/api/connections/create_connection.py +13 -7
- robosystems_client/api/connections/create_link_token.py +8 -3
- robosystems_client/api/connections/delete_connection.py +12 -7
- robosystems_client/api/connections/exchange_link_token.py +8 -3
- robosystems_client/api/connections/get_connection.py +8 -3
- robosystems_client/api/connections/get_connection_options.py +7 -3
- robosystems_client/api/connections/init_o_auth.py +2 -0
- robosystems_client/api/connections/list_connections.py +7 -3
- robosystems_client/api/connections/oauth_callback.py +9 -3
- robosystems_client/api/connections/sync_connection.py +12 -7
- robosystems_client/api/graph_analytics/get_graph_metrics.py +12 -7
- robosystems_client/api/graph_analytics/get_graph_usage_stats.py +11 -7
- robosystems_client/api/graph_billing/get_current_graph_bill.py +8 -3
- robosystems_client/api/graph_billing/get_graph_billing_history.py +8 -3
- robosystems_client/api/graph_billing/get_graph_monthly_bill.py +9 -3
- robosystems_client/api/graph_billing/get_graph_usage_details.py +9 -3
- robosystems_client/api/graph_credits/check_credit_balance.py +8 -3
- robosystems_client/api/graph_credits/check_storage_limits.py +8 -3
- robosystems_client/api/graph_credits/get_credit_summary.py +8 -3
- robosystems_client/api/graph_credits/get_storage_usage.py +7 -3
- robosystems_client/api/graph_credits/list_credit_transactions.py +8 -3
- robosystems_client/api/graph_health/get_database_health.py +8 -3
- robosystems_client/api/graph_info/get_database_info.py +8 -3
- robosystems_client/api/graph_limits/get_graph_limits.py +8 -3
- robosystems_client/api/graphs/create_graph.py +6 -4
- robosystems_client/api/graphs/get_available_extensions.py +1 -0
- robosystems_client/api/graphs/get_graphs.py +2 -0
- robosystems_client/api/graphs/select_graph.py +8 -3
- robosystems_client/api/mcp/call_mcp_tool.py +17 -7
- robosystems_client/api/mcp/list_mcp_tools.py +11 -7
- robosystems_client/api/operations/cancel_operation.py +9 -3
- robosystems_client/api/operations/get_operation_status.py +8 -3
- robosystems_client/api/operations/stream_operation_events.py +8 -3
- robosystems_client/api/query/execute_cypher_query.py +48 -15
- robosystems_client/api/schema/export_graph_schema.py +2 -0
- robosystems_client/api/schema/{get_graph_schema_info.py → get_graph_schema.py} +37 -47
- robosystems_client/api/schema/validate_schema.py +9 -4
- robosystems_client/api/service_offerings/get_service_offerings.py +2 -0
- robosystems_client/api/status/get_service_status.py +1 -0
- robosystems_client/api/subgraphs/create_subgraph.py +2 -0
- robosystems_client/api/subgraphs/delete_subgraph.py +14 -6
- robosystems_client/api/subgraphs/get_subgraph_info.py +13 -6
- robosystems_client/api/subgraphs/get_subgraph_quota.py +9 -3
- robosystems_client/api/subgraphs/list_subgraphs.py +2 -0
- robosystems_client/api/tables/delete_file_v1_graphs_graph_id_tables_files_file_id_delete.py +287 -0
- robosystems_client/api/tables/get_file_info_v1_graphs_graph_id_tables_files_file_id_get.py +283 -0
- robosystems_client/api/tables/get_upload_url_v1_graphs_graph_id_tables_table_name_files_post.py +260 -0
- robosystems_client/api/tables/ingest_tables_v1_graphs_graph_id_tables_ingest_post.py +251 -0
- robosystems_client/api/tables/list_table_files_v1_graphs_graph_id_tables_table_name_files_get.py +283 -0
- robosystems_client/api/{backup/export_backup.py → tables/list_tables_v1_graphs_graph_id_tables_get.py} +36 -36
- robosystems_client/api/{schema/list_schema_extensions.py → tables/query_tables_v1_graphs_graph_id_tables_query_post.py} +67 -43
- robosystems_client/api/tables/update_file_v1_graphs_graph_id_tables_files_file_id_patch.py +306 -0
- robosystems_client/api/user/create_user_api_key.py +2 -0
- robosystems_client/api/user/get_all_credit_summaries.py +6 -3
- robosystems_client/api/user/get_current_user.py +2 -0
- robosystems_client/api/user/list_user_api_keys.py +2 -0
- robosystems_client/api/user/revoke_user_api_key.py +7 -3
- robosystems_client/api/user/update_user.py +2 -0
- robosystems_client/api/user/update_user_api_key.py +2 -0
- robosystems_client/api/user/update_user_password.py +8 -3
- robosystems_client/api/user_analytics/get_detailed_user_analytics.py +2 -0
- robosystems_client/api/user_analytics/get_user_usage_overview.py +2 -0
- robosystems_client/api/user_limits/get_all_shared_repository_limits.py +2 -0
- robosystems_client/api/user_limits/get_shared_repository_limits.py +6 -4
- robosystems_client/api/user_limits/get_user_limits.py +3 -0
- robosystems_client/api/user_limits/get_user_usage.py +2 -0
- robosystems_client/api/user_subscriptions/cancel_shared_repository_subscription.py +11 -6
- robosystems_client/api/user_subscriptions/get_repository_credits.py +7 -3
- robosystems_client/api/user_subscriptions/get_shared_repository_credits.py +7 -3
- robosystems_client/api/user_subscriptions/get_user_shared_subscriptions.py +7 -3
- robosystems_client/api/user_subscriptions/subscribe_to_shared_repository.py +8 -3
- robosystems_client/api/user_subscriptions/upgrade_shared_repository_subscription.py +12 -6
- robosystems_client/extensions/README.md +1 -212
- robosystems_client/extensions/__init__.py +12 -28
- robosystems_client/extensions/extensions.py +3 -17
- robosystems_client/extensions/operation_client.py +12 -4
- robosystems_client/extensions/query_client.py +38 -24
- robosystems_client/extensions/sse_client.py +11 -0
- robosystems_client/extensions/table_ingest_client.py +466 -0
- robosystems_client/models/__init__.py +39 -29
- robosystems_client/models/backup_restore_request.py +1 -12
- robosystems_client/models/bulk_ingest_request.py +50 -0
- robosystems_client/models/bulk_ingest_response.py +137 -0
- robosystems_client/models/create_graph_request.py +4 -3
- 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 +47 -0
- robosystems_client/models/file_update_request.py +62 -0
- robosystems_client/models/file_upload_request.py +51 -0
- robosystems_client/models/file_upload_response.py +83 -0
- robosystems_client/models/{get_graph_schema_info_response_getgraphschemainfo.py → 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} +8 -5
- robosystems_client/models/{copy_response_error_details_type_0.py → get_graph_schema_response_getgraphschema.py} +5 -5
- 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 +47 -0
- robosystems_client/models/table_info.py +107 -0
- robosystems_client/models/table_ingest_result.py +107 -0
- robosystems_client/models/table_list_response.py +81 -0
- robosystems_client/models/table_query_request.py +40 -0
- robosystems_client/models/table_query_response.py +92 -0
- robosystems_client/models/{list_schema_extensions_response_listschemaextensions.py → update_file_v1_graphs_graph_id_tables_files_file_id_patch_response_update_file_v1_graphs_graph_id_tables_files_file_id_patch.py} +8 -5
- {robosystems_client-0.1.19.dist-info → robosystems_client-0.2.1.dist-info}/METADATA +25 -12
- {robosystems_client-0.1.19.dist-info → robosystems_client-0.2.1.dist-info}/RECORD +129 -122
- robosystems_client/api/copy/copy_data_to_graph.py +0 -486
- robosystems_client/extensions/copy_client.py +0 -479
- robosystems_client/models/copy_response.py +0 -275
- robosystems_client/models/copy_response_status.py +0 -11
- robosystems_client/models/data_frame_copy_request.py +0 -125
- robosystems_client/models/data_frame_copy_request_format.py +0 -10
- robosystems_client/models/s3_copy_request.py +0 -378
- robosystems_client/models/s3_copy_request_file_format.py +0 -12
- robosystems_client/models/s3_copy_request_s3_url_style_type_0.py +0 -9
- robosystems_client/models/url_copy_request.py +0 -157
- robosystems_client/models/url_copy_request_file_format.py +0 -10
- robosystems_client/models/url_copy_request_headers_type_0.py +0 -44
- /robosystems_client/api/{copy → tables}/__init__.py +0 -0
- {robosystems_client-0.1.19.dist-info → robosystems_client-0.2.1.dist-info}/WHEEL +0 -0
- {robosystems_client-0.1.19.dist-info → robosystems_client-0.2.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -54,22 +54,27 @@ def _parse_response(
|
|
|
54
54
|
response_200 = SuccessResponse.from_dict(response.json())
|
|
55
55
|
|
|
56
56
|
return response_200
|
|
57
|
+
|
|
57
58
|
if response.status_code == 400:
|
|
58
59
|
response_400 = ErrorResponse.from_dict(response.json())
|
|
59
60
|
|
|
60
61
|
return response_400
|
|
62
|
+
|
|
61
63
|
if response.status_code == 404:
|
|
62
64
|
response_404 = ErrorResponse.from_dict(response.json())
|
|
63
65
|
|
|
64
66
|
return response_404
|
|
65
|
-
if response.status_code == 500:
|
|
66
|
-
response_500 = ErrorResponse.from_dict(response.json())
|
|
67
67
|
|
|
68
|
-
return response_500
|
|
69
68
|
if response.status_code == 422:
|
|
70
69
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
71
70
|
|
|
72
71
|
return response_422
|
|
72
|
+
|
|
73
|
+
if response.status_code == 500:
|
|
74
|
+
response_500 = ErrorResponse.from_dict(response.json())
|
|
75
|
+
|
|
76
|
+
return response_500
|
|
77
|
+
|
|
73
78
|
if client.raise_on_unexpected_status:
|
|
74
79
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
75
80
|
else:
|
|
@@ -53,10 +53,12 @@ def _parse_response(
|
|
|
53
53
|
response_200 = UserAnalyticsResponse.from_dict(response.json())
|
|
54
54
|
|
|
55
55
|
return response_200
|
|
56
|
+
|
|
56
57
|
if response.status_code == 422:
|
|
57
58
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
58
59
|
|
|
59
60
|
return response_422
|
|
61
|
+
|
|
60
62
|
if client.raise_on_unexpected_status:
|
|
61
63
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
62
64
|
else:
|
|
@@ -47,10 +47,12 @@ def _parse_response(
|
|
|
47
47
|
response_200 = UserUsageSummaryResponse.from_dict(response.json())
|
|
48
48
|
|
|
49
49
|
return response_200
|
|
50
|
+
|
|
50
51
|
if response.status_code == 422:
|
|
51
52
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
52
53
|
|
|
53
54
|
return response_422
|
|
55
|
+
|
|
54
56
|
if client.raise_on_unexpected_status:
|
|
55
57
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
56
58
|
else:
|
|
@@ -58,10 +58,12 @@ def _parse_response(
|
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
return response_200
|
|
61
|
+
|
|
61
62
|
if response.status_code == 422:
|
|
62
63
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
63
64
|
|
|
64
65
|
return response_422
|
|
66
|
+
|
|
65
67
|
if client.raise_on_unexpected_status:
|
|
66
68
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
67
69
|
else:
|
|
@@ -54,10 +54,12 @@ def _parse_response(
|
|
|
54
54
|
)
|
|
55
55
|
|
|
56
56
|
return response_200
|
|
57
|
+
|
|
57
58
|
if response.status_code == 422:
|
|
58
59
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
59
60
|
|
|
60
61
|
return response_422
|
|
62
|
+
|
|
61
63
|
if client.raise_on_unexpected_status:
|
|
62
64
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
63
65
|
else:
|
|
@@ -96,7 +98,7 @@ def sync_detailed(
|
|
|
96
98
|
- Remaining quota
|
|
97
99
|
- Reset times
|
|
98
100
|
|
|
99
|
-
Note: All queries are
|
|
101
|
+
Note: All queries are included - this only shows rate limit status.
|
|
100
102
|
|
|
101
103
|
Args:
|
|
102
104
|
repository (str): Repository name (e.g., 'sec')
|
|
@@ -143,7 +145,7 @@ def sync(
|
|
|
143
145
|
- Remaining quota
|
|
144
146
|
- Reset times
|
|
145
147
|
|
|
146
|
-
Note: All queries are
|
|
148
|
+
Note: All queries are included - this only shows rate limit status.
|
|
147
149
|
|
|
148
150
|
Args:
|
|
149
151
|
repository (str): Repository name (e.g., 'sec')
|
|
@@ -185,7 +187,7 @@ async def asyncio_detailed(
|
|
|
185
187
|
- Remaining quota
|
|
186
188
|
- Reset times
|
|
187
189
|
|
|
188
|
-
Note: All queries are
|
|
190
|
+
Note: All queries are included - this only shows rate limit status.
|
|
189
191
|
|
|
190
192
|
Args:
|
|
191
193
|
repository (str): Repository name (e.g., 'sec')
|
|
@@ -230,7 +232,7 @@ async def asyncio(
|
|
|
230
232
|
- Remaining quota
|
|
231
233
|
- Reset times
|
|
232
234
|
|
|
233
|
-
Note: All queries are
|
|
235
|
+
Note: All queries are included - this only shows rate limit status.
|
|
234
236
|
|
|
235
237
|
Args:
|
|
236
238
|
repository (str): Repository name (e.g., 'sec')
|
|
@@ -47,13 +47,16 @@ def _parse_response(
|
|
|
47
47
|
response_200 = UserLimitsResponse.from_dict(response.json())
|
|
48
48
|
|
|
49
49
|
return response_200
|
|
50
|
+
|
|
50
51
|
if response.status_code == 404:
|
|
51
52
|
response_404 = cast(Any, None)
|
|
52
53
|
return response_404
|
|
54
|
+
|
|
53
55
|
if response.status_code == 422:
|
|
54
56
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
55
57
|
|
|
56
58
|
return response_422
|
|
59
|
+
|
|
57
60
|
if client.raise_on_unexpected_status:
|
|
58
61
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
59
62
|
else:
|
|
@@ -47,10 +47,12 @@ def _parse_response(
|
|
|
47
47
|
response_200 = UserUsageResponse.from_dict(response.json())
|
|
48
48
|
|
|
49
49
|
return response_200
|
|
50
|
+
|
|
50
51
|
if response.status_code == 422:
|
|
51
52
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
52
53
|
|
|
53
54
|
return response_422
|
|
55
|
+
|
|
54
56
|
if client.raise_on_unexpected_status:
|
|
55
57
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
56
58
|
else:
|
|
@@ -48,19 +48,24 @@ def _parse_response(
|
|
|
48
48
|
response_200 = CancellationResponse.from_dict(response.json())
|
|
49
49
|
|
|
50
50
|
return response_200
|
|
51
|
-
|
|
52
|
-
response_404 = cast(Any, None)
|
|
53
|
-
return response_404
|
|
51
|
+
|
|
54
52
|
if response.status_code == 401:
|
|
55
53
|
response_401 = cast(Any, None)
|
|
56
54
|
return response_401
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
|
|
56
|
+
if response.status_code == 404:
|
|
57
|
+
response_404 = cast(Any, None)
|
|
58
|
+
return response_404
|
|
59
|
+
|
|
60
60
|
if response.status_code == 422:
|
|
61
61
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
62
62
|
|
|
63
63
|
return response_422
|
|
64
|
+
|
|
65
|
+
if response.status_code == 500:
|
|
66
|
+
response_500 = cast(Any, None)
|
|
67
|
+
return response_500
|
|
68
|
+
|
|
64
69
|
if client.raise_on_unexpected_status:
|
|
65
70
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
66
71
|
else:
|
|
@@ -48,16 +48,20 @@ def _parse_response(
|
|
|
48
48
|
response_200 = RepositoryCreditsResponse.from_dict(response.json())
|
|
49
49
|
|
|
50
50
|
return response_200
|
|
51
|
+
|
|
51
52
|
if response.status_code == 401:
|
|
52
53
|
response_401 = cast(Any, None)
|
|
53
54
|
return response_401
|
|
54
|
-
|
|
55
|
-
response_500 = cast(Any, None)
|
|
56
|
-
return response_500
|
|
55
|
+
|
|
57
56
|
if response.status_code == 422:
|
|
58
57
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
59
58
|
|
|
60
59
|
return response_422
|
|
60
|
+
|
|
61
|
+
if response.status_code == 500:
|
|
62
|
+
response_500 = cast(Any, None)
|
|
63
|
+
return response_500
|
|
64
|
+
|
|
61
65
|
if client.raise_on_unexpected_status:
|
|
62
66
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
63
67
|
else:
|
|
@@ -47,16 +47,20 @@ def _parse_response(
|
|
|
47
47
|
response_200 = CreditsSummaryResponse.from_dict(response.json())
|
|
48
48
|
|
|
49
49
|
return response_200
|
|
50
|
+
|
|
50
51
|
if response.status_code == 401:
|
|
51
52
|
response_401 = cast(Any, None)
|
|
52
53
|
return response_401
|
|
53
|
-
|
|
54
|
-
response_500 = cast(Any, None)
|
|
55
|
-
return response_500
|
|
54
|
+
|
|
56
55
|
if response.status_code == 422:
|
|
57
56
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
58
57
|
|
|
59
58
|
return response_422
|
|
59
|
+
|
|
60
|
+
if response.status_code == 500:
|
|
61
|
+
response_500 = cast(Any, None)
|
|
62
|
+
return response_500
|
|
63
|
+
|
|
60
64
|
if client.raise_on_unexpected_status:
|
|
61
65
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
62
66
|
else:
|
|
@@ -50,16 +50,20 @@ def _parse_response(
|
|
|
50
50
|
response_200 = UserSubscriptionsResponse.from_dict(response.json())
|
|
51
51
|
|
|
52
52
|
return response_200
|
|
53
|
+
|
|
53
54
|
if response.status_code == 401:
|
|
54
55
|
response_401 = cast(Any, None)
|
|
55
56
|
return response_401
|
|
56
|
-
|
|
57
|
-
response_500 = cast(Any, None)
|
|
58
|
-
return response_500
|
|
57
|
+
|
|
59
58
|
if response.status_code == 422:
|
|
60
59
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
61
60
|
|
|
62
61
|
return response_422
|
|
62
|
+
|
|
63
|
+
if response.status_code == 500:
|
|
64
|
+
response_500 = cast(Any, None)
|
|
65
|
+
return response_500
|
|
66
|
+
|
|
63
67
|
if client.raise_on_unexpected_status:
|
|
64
68
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
65
69
|
else:
|
|
@@ -53,19 +53,24 @@ def _parse_response(
|
|
|
53
53
|
response_201 = SubscriptionResponse.from_dict(response.json())
|
|
54
54
|
|
|
55
55
|
return response_201
|
|
56
|
+
|
|
56
57
|
if response.status_code == 400:
|
|
57
58
|
response_400 = cast(Any, None)
|
|
58
59
|
return response_400
|
|
60
|
+
|
|
59
61
|
if response.status_code == 401:
|
|
60
62
|
response_401 = cast(Any, None)
|
|
61
63
|
return response_401
|
|
62
|
-
|
|
63
|
-
response_500 = cast(Any, None)
|
|
64
|
-
return response_500
|
|
64
|
+
|
|
65
65
|
if response.status_code == 422:
|
|
66
66
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
67
67
|
|
|
68
68
|
return response_422
|
|
69
|
+
|
|
70
|
+
if response.status_code == 500:
|
|
71
|
+
response_500 = cast(Any, None)
|
|
72
|
+
return response_500
|
|
73
|
+
|
|
69
74
|
if client.raise_on_unexpected_status:
|
|
70
75
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
71
76
|
else:
|
|
@@ -52,22 +52,28 @@ def _parse_response(
|
|
|
52
52
|
if response.status_code == 200:
|
|
53
53
|
response_200 = response.json()
|
|
54
54
|
return response_200
|
|
55
|
+
|
|
55
56
|
if response.status_code == 400:
|
|
56
57
|
response_400 = cast(Any, None)
|
|
57
58
|
return response_400
|
|
58
|
-
|
|
59
|
-
response_404 = cast(Any, None)
|
|
60
|
-
return response_404
|
|
59
|
+
|
|
61
60
|
if response.status_code == 401:
|
|
62
61
|
response_401 = cast(Any, None)
|
|
63
62
|
return response_401
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
|
|
64
|
+
if response.status_code == 404:
|
|
65
|
+
response_404 = cast(Any, None)
|
|
66
|
+
return response_404
|
|
67
|
+
|
|
67
68
|
if response.status_code == 422:
|
|
68
69
|
response_422 = HTTPValidationError.from_dict(response.json())
|
|
69
70
|
|
|
70
71
|
return response_422
|
|
72
|
+
|
|
73
|
+
if response.status_code == 500:
|
|
74
|
+
response_500 = cast(Any, None)
|
|
75
|
+
return response_500
|
|
76
|
+
|
|
71
77
|
if client.raise_on_unexpected_status:
|
|
72
78
|
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
73
79
|
else:
|
|
@@ -11,8 +11,7 @@ The RoboSystems Python Client Extensions provide enhanced functionality for the
|
|
|
11
11
|
|
|
12
12
|
- **Server-Sent Events (SSE)** streaming with automatic reconnection
|
|
13
13
|
- **Smart Query Execution** with automatic strategy selection
|
|
14
|
-
- **
|
|
15
|
-
- **Operation Monitoring** for long-running operations
|
|
14
|
+
- **Operation Monitoring** for long-running operations
|
|
16
15
|
- **Connection Pooling** and intelligent resource management
|
|
17
16
|
- **Result Processing** and format conversion utilities
|
|
18
17
|
- **Caching** with TTL and LRU eviction
|
|
@@ -85,62 +84,6 @@ async def main():
|
|
|
85
84
|
asyncio.run(main())
|
|
86
85
|
```
|
|
87
86
|
|
|
88
|
-
### Data Copy Operations
|
|
89
|
-
|
|
90
|
-
```python
|
|
91
|
-
from robosystems_client.extensions import CopyClient, CopyOptions
|
|
92
|
-
from robosystems_client.models.s3_copy_request import S3CopyRequest
|
|
93
|
-
from robosystems_client.models.s3_copy_request_file_format import S3CopyRequestFileFormat
|
|
94
|
-
|
|
95
|
-
# Initialize copy client
|
|
96
|
-
copy_client = CopyClient({
|
|
97
|
-
"base_url": "https://api.robosystems.ai",
|
|
98
|
-
"api_key": "your-api-key",
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
# Create S3 copy request
|
|
102
|
-
request = S3CopyRequest(
|
|
103
|
-
table_name="companies",
|
|
104
|
-
s3_path="s3://my-bucket/data/companies.csv",
|
|
105
|
-
s3_access_key_id="AWS_ACCESS_KEY",
|
|
106
|
-
s3_secret_access_key="AWS_SECRET_KEY",
|
|
107
|
-
s3_region="us-east-1",
|
|
108
|
-
file_format=S3CopyRequestFileFormat.CSV,
|
|
109
|
-
ignore_errors=False, # Stop on first error
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
# Set up progress callbacks
|
|
113
|
-
def on_progress(message, percent):
|
|
114
|
-
if percent:
|
|
115
|
-
print(f"Progress: {message} ({percent}%)")
|
|
116
|
-
else:
|
|
117
|
-
print(f"Progress: {message}")
|
|
118
|
-
|
|
119
|
-
def on_warning(warning):
|
|
120
|
-
print(f"Warning: {warning}")
|
|
121
|
-
|
|
122
|
-
options = CopyOptions(
|
|
123
|
-
on_progress=on_progress,
|
|
124
|
-
on_warning=on_warning,
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
# Execute copy with progress monitoring
|
|
128
|
-
result = copy_client.copy_from_s3("your_graph_id", request, options)
|
|
129
|
-
|
|
130
|
-
# Check results
|
|
131
|
-
if result.status == "completed":
|
|
132
|
-
print(f"✅ Successfully imported {result.rows_imported:,} rows")
|
|
133
|
-
stats = copy_client.calculate_statistics(result)
|
|
134
|
-
if stats:
|
|
135
|
-
print(f"Throughput: {stats.throughput:.2f} rows/second")
|
|
136
|
-
elif result.status == "partial":
|
|
137
|
-
print(f"⚠️ Imported {result.rows_imported:,} rows, skipped {result.rows_skipped:,}")
|
|
138
|
-
else:
|
|
139
|
-
print(f"❌ Copy failed: {result.error}")
|
|
140
|
-
|
|
141
|
-
copy_client.close()
|
|
142
|
-
```
|
|
143
|
-
|
|
144
87
|
## 🔐 Authentication
|
|
145
88
|
|
|
146
89
|
### API Key Authentication (Recommended)
|
|
@@ -198,79 +141,6 @@ dev_ext = create_extensions(
|
|
|
198
141
|
|
|
199
142
|
## 🛠 Advanced Features
|
|
200
143
|
|
|
201
|
-
### Copy Operations with Advanced Features
|
|
202
|
-
|
|
203
|
-
```python
|
|
204
|
-
from robosystems_client.extensions import CopyClient, CopySourceType
|
|
205
|
-
|
|
206
|
-
# Batch copy multiple tables
|
|
207
|
-
copy_client = CopyClient({
|
|
208
|
-
"base_url": "https://api.robosystems.ai",
|
|
209
|
-
"api_key": "your-api-key",
|
|
210
|
-
})
|
|
211
|
-
|
|
212
|
-
copies = [
|
|
213
|
-
{
|
|
214
|
-
"request": S3CopyRequest(
|
|
215
|
-
table_name="companies",
|
|
216
|
-
s3_path="s3://bucket/companies.csv",
|
|
217
|
-
s3_access_key_id="KEY",
|
|
218
|
-
s3_secret_access_key="SECRET",
|
|
219
|
-
file_format=S3CopyRequestFileFormat.CSV,
|
|
220
|
-
),
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"request": S3CopyRequest(
|
|
224
|
-
table_name="transactions",
|
|
225
|
-
s3_path="s3://bucket/transactions.parquet",
|
|
226
|
-
s3_access_key_id="KEY",
|
|
227
|
-
s3_secret_access_key="SECRET",
|
|
228
|
-
file_format=S3CopyRequestFileFormat.PARQUET,
|
|
229
|
-
ignore_errors=True, # Continue on errors
|
|
230
|
-
),
|
|
231
|
-
},
|
|
232
|
-
]
|
|
233
|
-
|
|
234
|
-
# Execute batch copy
|
|
235
|
-
results = copy_client.batch_copy_from_s3("graph_id", copies)
|
|
236
|
-
|
|
237
|
-
for i, result in enumerate(results):
|
|
238
|
-
table_name = copies[i]["request"].table_name
|
|
239
|
-
print(f"{table_name}: {result.status}")
|
|
240
|
-
if result.rows_imported:
|
|
241
|
-
print(f" Imported: {result.rows_imported:,} rows")
|
|
242
|
-
|
|
243
|
-
# Copy with retry logic for resilient operations
|
|
244
|
-
result = copy_client.copy_with_retry(
|
|
245
|
-
graph_id="graph_id",
|
|
246
|
-
request=S3CopyRequest(
|
|
247
|
-
table_name="large_dataset",
|
|
248
|
-
s3_path="s3://bucket/large-dataset.csv",
|
|
249
|
-
s3_access_key_id="KEY",
|
|
250
|
-
s3_secret_access_key="SECRET",
|
|
251
|
-
max_file_size_gb=50,
|
|
252
|
-
extended_timeout=True,
|
|
253
|
-
),
|
|
254
|
-
source_type=CopySourceType.S3,
|
|
255
|
-
max_retries=3,
|
|
256
|
-
options=CopyOptions(
|
|
257
|
-
on_progress=lambda msg, _: print(msg)
|
|
258
|
-
),
|
|
259
|
-
)
|
|
260
|
-
|
|
261
|
-
# Monitor multiple concurrent copy operations
|
|
262
|
-
operation_ids = ["op-123", "op-456", "op-789"]
|
|
263
|
-
results = copy_client.monitor_multiple_copies(operation_ids, options)
|
|
264
|
-
|
|
265
|
-
for op_id, result in results.items():
|
|
266
|
-
print(f"Operation {op_id}: {result.status}")
|
|
267
|
-
if result.status == "completed":
|
|
268
|
-
stats = copy_client.calculate_statistics(result)
|
|
269
|
-
print(f" Throughput: {stats.throughput:.2f} rows/sec")
|
|
270
|
-
|
|
271
|
-
copy_client.close()
|
|
272
|
-
```
|
|
273
|
-
|
|
274
144
|
### Query Builder
|
|
275
145
|
|
|
276
146
|
Build complex Cypher queries programmatically:
|
|
@@ -403,87 +273,6 @@ client.close()
|
|
|
403
273
|
|
|
404
274
|
## 📊 Examples
|
|
405
275
|
|
|
406
|
-
### Data Import with Real-Time Monitoring
|
|
407
|
-
|
|
408
|
-
```python
|
|
409
|
-
from robosystems_client.extensions import CopyClient, CopyOptions
|
|
410
|
-
import time
|
|
411
|
-
|
|
412
|
-
def import_financial_data():
|
|
413
|
-
"""Import financial data with comprehensive monitoring"""
|
|
414
|
-
|
|
415
|
-
copy_client = CopyClient({
|
|
416
|
-
"base_url": "https://api.robosystems.ai",
|
|
417
|
-
"api_key": "your-api-key",
|
|
418
|
-
})
|
|
419
|
-
|
|
420
|
-
# Track progress history
|
|
421
|
-
progress_history = []
|
|
422
|
-
warnings_count = 0
|
|
423
|
-
|
|
424
|
-
def on_progress(message, percent):
|
|
425
|
-
timestamp = time.strftime("%H:%M:%S")
|
|
426
|
-
progress_history.append({
|
|
427
|
-
"time": timestamp,
|
|
428
|
-
"message": message,
|
|
429
|
-
"percent": percent,
|
|
430
|
-
})
|
|
431
|
-
print(f"[{timestamp}] {message}" + (f" ({percent}%)" if percent else ""))
|
|
432
|
-
|
|
433
|
-
def on_warning(warning):
|
|
434
|
-
nonlocal warnings_count
|
|
435
|
-
warnings_count += 1
|
|
436
|
-
print(f"⚠️ Warning #{warnings_count}: {warning}")
|
|
437
|
-
|
|
438
|
-
def on_queue_update(position, wait_time):
|
|
439
|
-
print(f"📊 Queue position: {position} (ETA: {wait_time}s)")
|
|
440
|
-
|
|
441
|
-
# Configure copy with all callbacks
|
|
442
|
-
options = CopyOptions(
|
|
443
|
-
on_progress=on_progress,
|
|
444
|
-
on_warning=on_warning,
|
|
445
|
-
on_queue_update=on_queue_update,
|
|
446
|
-
timeout=1800000, # 30 minutes
|
|
447
|
-
)
|
|
448
|
-
|
|
449
|
-
# Execute copy operation
|
|
450
|
-
start_time = time.time()
|
|
451
|
-
|
|
452
|
-
result = copy_client.copy_s3(
|
|
453
|
-
graph_id="financial_graph",
|
|
454
|
-
table_name="quarterly_reports",
|
|
455
|
-
s3_path="s3://financial-data/reports-2024-q1.parquet",
|
|
456
|
-
access_key_id="AWS_KEY",
|
|
457
|
-
secret_access_key="AWS_SECRET",
|
|
458
|
-
file_format="parquet",
|
|
459
|
-
ignore_errors=True, # Continue on validation errors
|
|
460
|
-
)
|
|
461
|
-
|
|
462
|
-
# Print summary
|
|
463
|
-
elapsed = time.time() - start_time
|
|
464
|
-
|
|
465
|
-
print("\n" + "="*50)
|
|
466
|
-
print("📈 IMPORT SUMMARY")
|
|
467
|
-
print("="*50)
|
|
468
|
-
print(f"Status: {result.status.upper()}")
|
|
469
|
-
print(f"Rows Imported: {result.rows_imported or 0:,}")
|
|
470
|
-
print(f"Rows Skipped: {result.rows_skipped or 0:,}")
|
|
471
|
-
print(f"Warnings: {warnings_count}")
|
|
472
|
-
print(f"Execution Time: {elapsed:.2f} seconds")
|
|
473
|
-
|
|
474
|
-
if result.status == "completed":
|
|
475
|
-
stats = copy_client.calculate_statistics(result)
|
|
476
|
-
if stats:
|
|
477
|
-
print(f"Throughput: {stats.throughput:.2f} rows/second")
|
|
478
|
-
print(f"Data Processed: {stats.bytes_processed / (1024*1024):.2f} MB")
|
|
479
|
-
|
|
480
|
-
copy_client.close()
|
|
481
|
-
return result
|
|
482
|
-
|
|
483
|
-
# Run the import
|
|
484
|
-
result = import_financial_data()
|
|
485
|
-
```
|
|
486
|
-
|
|
487
276
|
### Financial Data Analysis
|
|
488
277
|
|
|
489
278
|
```python
|
|
@@ -20,13 +20,12 @@ from .operation_client import (
|
|
|
20
20
|
OperationProgress,
|
|
21
21
|
OperationResult,
|
|
22
22
|
)
|
|
23
|
-
from .
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
CopyStatistics,
|
|
23
|
+
from .table_ingest_client import (
|
|
24
|
+
TableIngestClient,
|
|
25
|
+
UploadOptions,
|
|
26
|
+
IngestOptions,
|
|
27
|
+
UploadResult,
|
|
28
|
+
TableInfo,
|
|
30
29
|
)
|
|
31
30
|
from .extensions import (
|
|
32
31
|
RoboSystemsExtensions,
|
|
@@ -117,13 +116,12 @@ __all__ = [
|
|
|
117
116
|
"OperationStatus",
|
|
118
117
|
"OperationProgress",
|
|
119
118
|
"OperationResult",
|
|
120
|
-
#
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"CopyStatistics",
|
|
119
|
+
# Table Ingest Client
|
|
120
|
+
"TableIngestClient",
|
|
121
|
+
"UploadOptions",
|
|
122
|
+
"IngestOptions",
|
|
123
|
+
"UploadResult",
|
|
124
|
+
"TableInfo",
|
|
127
125
|
# Utilities
|
|
128
126
|
"QueryBuilder",
|
|
129
127
|
"ResultProcessor",
|
|
@@ -179,20 +177,6 @@ def stream_query(graph_id: str, query: str, parameters=None, chunk_size=None):
|
|
|
179
177
|
return extensions.query.stream_query(graph_id, query, parameters, chunk_size)
|
|
180
178
|
|
|
181
179
|
|
|
182
|
-
def copy_from_s3(
|
|
183
|
-
graph_id: str,
|
|
184
|
-
table_name: str,
|
|
185
|
-
s3_path: str,
|
|
186
|
-
access_key_id: str,
|
|
187
|
-
secret_access_key: str,
|
|
188
|
-
**kwargs,
|
|
189
|
-
):
|
|
190
|
-
"""Copy data from S3 using the default extensions instance"""
|
|
191
|
-
return extensions.copy_from_s3(
|
|
192
|
-
graph_id, table_name, s3_path, access_key_id, secret_access_key, **kwargs
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
|
|
196
180
|
# DataFrame convenience functions (if pandas is available)
|
|
197
181
|
if HAS_PANDAS:
|
|
198
182
|
|
|
@@ -8,7 +8,7 @@ from typing import Dict, Any, Optional, Callable
|
|
|
8
8
|
|
|
9
9
|
from .query_client import QueryClient
|
|
10
10
|
from .operation_client import OperationClient
|
|
11
|
-
from .
|
|
11
|
+
from .table_ingest_client import TableIngestClient
|
|
12
12
|
from .sse_client import SSEClient
|
|
13
13
|
|
|
14
14
|
|
|
@@ -56,9 +56,9 @@ class RoboSystemsExtensions:
|
|
|
56
56
|
self.config["token"] = token
|
|
57
57
|
|
|
58
58
|
# Initialize clients
|
|
59
|
-
self.copy = CopyClient(self.config)
|
|
60
59
|
self.query = QueryClient(self.config)
|
|
61
60
|
self.operations = OperationClient(self.config)
|
|
61
|
+
self.tables = TableIngestClient(self.config)
|
|
62
62
|
|
|
63
63
|
def monitor_operation(
|
|
64
64
|
self, operation_id: str, on_progress: Optional[Callable] = None
|
|
@@ -85,9 +85,9 @@ class RoboSystemsExtensions:
|
|
|
85
85
|
|
|
86
86
|
def close(self):
|
|
87
87
|
"""Clean up all active connections"""
|
|
88
|
-
self.copy.close()
|
|
89
88
|
self.query.close()
|
|
90
89
|
self.operations.close_all()
|
|
90
|
+
self.tables.close()
|
|
91
91
|
|
|
92
92
|
# Convenience methods that delegate to the appropriate clients
|
|
93
93
|
def execute_query(self, graph_id: str, query: str, parameters: Dict[str, Any] = None):
|
|
@@ -112,20 +112,6 @@ class RoboSystemsExtensions:
|
|
|
112
112
|
"""Cancel an operation using the operation client"""
|
|
113
113
|
return self.operations.cancel_operation(operation_id)
|
|
114
114
|
|
|
115
|
-
def copy_from_s3(
|
|
116
|
-
self,
|
|
117
|
-
graph_id: str,
|
|
118
|
-
table_name: str,
|
|
119
|
-
s3_path: str,
|
|
120
|
-
access_key_id: str,
|
|
121
|
-
secret_access_key: str,
|
|
122
|
-
**kwargs,
|
|
123
|
-
):
|
|
124
|
-
"""Copy data from S3 using the copy client"""
|
|
125
|
-
return self.copy.copy_s3(
|
|
126
|
-
graph_id, table_name, s3_path, access_key_id, secret_access_key, **kwargs
|
|
127
|
-
)
|
|
128
|
-
|
|
129
115
|
|
|
130
116
|
class AsyncRoboSystemsExtensions:
|
|
131
117
|
"""Async version of the extensions class"""
|