robosystems-client 0.2.16__tar.gz → 0.2.17__tar.gz

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.

Files changed (447) hide show
  1. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/PKG-INFO +1 -1
  2. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/pyproject.toml +1 -1
  3. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/__init__.py +28 -10
  4. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/extensions.py +12 -3
  5. robosystems_client-0.2.17/robosystems_client/extensions/file_client.py +380 -0
  6. robosystems_client-0.2.17/robosystems_client/extensions/materialization_client.py +211 -0
  7. robosystems_client-0.2.17/robosystems_client/extensions/table_client.py +161 -0
  8. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/test_extensions.py +36 -5
  9. robosystems_client-0.2.16/robosystems_client/extensions/table_ingest_client.py +0 -463
  10. robosystems_client-0.2.16/tests/test_table_ingest_client.py +0 -112
  11. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  12. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  13. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/workflows/claude.yml +0 -0
  14. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/workflows/create-pr.yml +0 -0
  15. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/workflows/create-release.yml +0 -0
  16. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/workflows/publish.yml +0 -0
  17. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/workflows/tag-release.yml +0 -0
  18. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.github/workflows/test.yml +0 -0
  19. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.gitignore +0 -0
  20. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.vscode/settings.json +0 -0
  21. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/.vscode/tasks.json +0 -0
  22. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/LICENSE +0 -0
  23. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/README.md +0 -0
  24. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/bin/create-feature +0 -0
  25. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/bin/create-pr +0 -0
  26. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/bin/create-release +0 -0
  27. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/bin/generate-sdk +0 -0
  28. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/justfile +0 -0
  29. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/pytest.ini +0 -0
  30. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/__init__.py +0 -0
  31. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/__init__.py +0 -0
  32. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/__init__.py +0 -0
  33. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/auto_select_agent.py +0 -0
  34. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/batch_process_queries.py +0 -0
  35. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/execute_specific_agent.py +0 -0
  36. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/get_agent_metadata.py +0 -0
  37. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/list_agents.py +0 -0
  38. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/agent/recommend_agent.py +0 -0
  39. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/__init__.py +0 -0
  40. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/check_password_strength.py +0 -0
  41. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/complete_sso_auth.py +0 -0
  42. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/forgot_password.py +0 -0
  43. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/generate_sso_token.py +0 -0
  44. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/get_captcha_config.py +0 -0
  45. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/get_current_auth_user.py +0 -0
  46. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/get_password_policy.py +0 -0
  47. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/login_user.py +0 -0
  48. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/logout_user.py +0 -0
  49. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/refresh_auth_session.py +0 -0
  50. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/register_user.py +0 -0
  51. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/resend_verification_email.py +0 -0
  52. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/reset_password.py +0 -0
  53. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/sso_token_exchange.py +0 -0
  54. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/validate_reset_token.py +0 -0
  55. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/auth/verify_email.py +0 -0
  56. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/backup/__init__.py +0 -0
  57. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/backup/create_backup.py +0 -0
  58. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/backup/get_backup_download_url.py +0 -0
  59. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/backup/get_backup_stats.py +0 -0
  60. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/backup/list_backups.py +0 -0
  61. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/backup/restore_backup.py +0 -0
  62. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/__init__.py +0 -0
  63. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/cancel_org_subscription.py +0 -0
  64. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/create_checkout_session.py +0 -0
  65. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/create_portal_session.py +0 -0
  66. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/get_checkout_status.py +0 -0
  67. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/get_org_billing_customer.py +0 -0
  68. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/get_org_subscription.py +0 -0
  69. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/get_org_upcoming_invoice.py +0 -0
  70. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/list_org_invoices.py +0 -0
  71. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/billing/list_org_subscriptions.py +0 -0
  72. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/__init__.py +0 -0
  73. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/create_connection.py +0 -0
  74. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/create_link_token.py +0 -0
  75. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/delete_connection.py +0 -0
  76. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/exchange_link_token.py +0 -0
  77. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/get_connection.py +0 -0
  78. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/get_connection_options.py +0 -0
  79. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/init_o_auth.py +0 -0
  80. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/list_connections.py +0 -0
  81. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/oauth_callback.py +0 -0
  82. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/connections/sync_connection.py +0 -0
  83. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/credits_/__init__.py +0 -0
  84. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/credits_/check_credit_balance.py +0 -0
  85. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/credits_/check_storage_limits.py +0 -0
  86. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/credits_/get_credit_summary.py +0 -0
  87. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/credits_/get_storage_usage.py +0 -0
  88. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/credits_/list_credit_transactions.py +0 -0
  89. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/files/__init__.py +0 -0
  90. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/files/create_file_upload.py +0 -0
  91. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/files/delete_file.py +0 -0
  92. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/files/get_file.py +0 -0
  93. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/files/list_files.py +0 -0
  94. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/files/update_file.py +0 -0
  95. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graph_health/__init__.py +0 -0
  96. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graph_health/get_database_health.py +0 -0
  97. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graph_info/__init__.py +0 -0
  98. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graph_info/get_database_info.py +0 -0
  99. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graph_limits/__init__.py +0 -0
  100. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graph_limits/get_graph_limits.py +0 -0
  101. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graphs/__init__.py +0 -0
  102. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graphs/create_graph.py +0 -0
  103. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graphs/get_available_extensions.py +0 -0
  104. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graphs/get_available_graph_tiers.py +0 -0
  105. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graphs/get_graphs.py +0 -0
  106. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/graphs/select_graph.py +0 -0
  107. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/materialization/__init__.py +0 -0
  108. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/materialization/get_materialization_status.py +0 -0
  109. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/materialization/materialize_graph.py +0 -0
  110. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/mcp/__init__.py +0 -0
  111. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/mcp/call_mcp_tool.py +0 -0
  112. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/mcp/list_mcp_tools.py +0 -0
  113. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/operations/__init__.py +0 -0
  114. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/operations/cancel_operation.py +0 -0
  115. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/operations/get_operation_status.py +0 -0
  116. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/operations/stream_operation_events.py +0 -0
  117. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org/__init__.py +0 -0
  118. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org/create_org.py +0 -0
  119. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org/get_org.py +0 -0
  120. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org/list_org_graphs.py +0 -0
  121. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org/list_user_orgs.py +0 -0
  122. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org/update_org.py +0 -0
  123. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_members/__init__.py +0 -0
  124. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_members/invite_org_member.py +0 -0
  125. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_members/list_org_members.py +0 -0
  126. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_members/remove_org_member.py +0 -0
  127. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_members/update_org_member_role.py +0 -0
  128. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_usage/__init__.py +0 -0
  129. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_usage/get_org_limits.py +0 -0
  130. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/org_usage/get_org_usage.py +0 -0
  131. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/query/__init__.py +0 -0
  132. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/query/execute_cypher_query.py +0 -0
  133. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/schema/__init__.py +0 -0
  134. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/schema/export_graph_schema.py +0 -0
  135. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/schema/get_graph_schema.py +0 -0
  136. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/schema/validate_schema.py +0 -0
  137. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/service_offerings/__init__.py +0 -0
  138. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/service_offerings/get_service_offerings.py +0 -0
  139. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/status/__init__.py +0 -0
  140. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/status/get_service_status.py +0 -0
  141. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subgraphs/__init__.py +0 -0
  142. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subgraphs/create_subgraph.py +0 -0
  143. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subgraphs/delete_subgraph.py +0 -0
  144. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subgraphs/get_subgraph_info.py +0 -0
  145. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subgraphs/get_subgraph_quota.py +0 -0
  146. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subgraphs/list_subgraphs.py +0 -0
  147. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subscriptions/__init__.py +0 -0
  148. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subscriptions/create_repository_subscription.py +0 -0
  149. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subscriptions/get_graph_subscription.py +0 -0
  150. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/subscriptions/upgrade_subscription.py +0 -0
  151. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/tables/__init__.py +0 -0
  152. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/tables/list_tables.py +0 -0
  153. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/tables/query_tables.py +0 -0
  154. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/usage/__init__.py +0 -0
  155. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/usage/get_graph_metrics.py +0 -0
  156. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/usage/get_graph_usage_analytics.py +0 -0
  157. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/__init__.py +0 -0
  158. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/create_user_api_key.py +0 -0
  159. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/get_current_user.py +0 -0
  160. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/list_user_api_keys.py +0 -0
  161. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/revoke_user_api_key.py +0 -0
  162. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/update_user.py +0 -0
  163. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/update_user_api_key.py +0 -0
  164. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/user/update_user_password.py +0 -0
  165. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/views/__init__.py +0 -0
  166. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/views/create_view.py +0 -0
  167. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/api/views/save_view.py +0 -0
  168. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/client.py +0 -0
  169. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/errors.py +0 -0
  170. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/README.md +0 -0
  171. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/agent_client.py +0 -0
  172. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/auth_integration.py +0 -0
  173. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/dataframe_utils.py +0 -0
  174. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/element_mapping_client.py +0 -0
  175. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/graph_client.py +0 -0
  176. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/operation_client.py +0 -0
  177. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/query_client.py +0 -0
  178. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/sse_client.py +0 -0
  179. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/subgraph_workspace_client.py +0 -0
  180. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/tests/__init__.py +0 -0
  181. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/tests/test_dataframe_utils.py +0 -0
  182. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/tests/test_integration.py +0 -0
  183. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/tests/test_token_utils.py +0 -0
  184. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/tests/test_unit.py +0 -0
  185. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/token_utils.py +0 -0
  186. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/utils.py +0 -0
  187. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/extensions/view_builder_client.py +0 -0
  188. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/__init__.py +0 -0
  189. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/account_info.py +0 -0
  190. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_list_response.py +0 -0
  191. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_list_response_agents.py +0 -0
  192. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_list_response_agents_additional_property.py +0 -0
  193. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_message.py +0 -0
  194. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_metadata_response.py +0 -0
  195. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_mode.py +0 -0
  196. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_recommendation.py +0 -0
  197. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_recommendation_request.py +0 -0
  198. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_recommendation_request_context_type_0.py +0 -0
  199. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_recommendation_response.py +0 -0
  200. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_request.py +0 -0
  201. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_request_context_type_0.py +0 -0
  202. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_response.py +0 -0
  203. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_response_error_details_type_0.py +0 -0
  204. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_response_metadata_type_0.py +0 -0
  205. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/agent_response_tokens_used_type_0.py +0 -0
  206. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/api_key_info.py +0 -0
  207. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/api_keys_response.py +0 -0
  208. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/auth_response.py +0 -0
  209. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/auth_response_org_type_0.py +0 -0
  210. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/auth_response_user.py +0 -0
  211. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/available_extension.py +0 -0
  212. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/available_extensions_response.py +0 -0
  213. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/available_graph_tiers_response.py +0 -0
  214. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_create_request.py +0 -0
  215. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_download_url_response.py +0 -0
  216. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_limits.py +0 -0
  217. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_list_response.py +0 -0
  218. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_response.py +0 -0
  219. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_restore_request.py +0 -0
  220. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_stats_response.py +0 -0
  221. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/backup_stats_response_backup_formats.py +0 -0
  222. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/batch_agent_request.py +0 -0
  223. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/batch_agent_response.py +0 -0
  224. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/billing_customer.py +0 -0
  225. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/cancel_operation_response_canceloperation.py +0 -0
  226. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/check_credit_balance_response_checkcreditbalance.py +0 -0
  227. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/checkout_response.py +0 -0
  228. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/checkout_status_response.py +0 -0
  229. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_options_response.py +0 -0
  230. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_provider_info.py +0 -0
  231. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_provider_info_auth_type.py +0 -0
  232. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_provider_info_provider.py +0 -0
  233. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_response.py +0 -0
  234. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_response_metadata.py +0 -0
  235. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/connection_response_provider.py +0 -0
  236. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/copy_operation_limits.py +0 -0
  237. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_api_key_request.py +0 -0
  238. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_api_key_response.py +0 -0
  239. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_checkout_request.py +0 -0
  240. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_checkout_request_resource_config.py +0 -0
  241. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_connection_request.py +0 -0
  242. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_connection_request_provider.py +0 -0
  243. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_graph_request.py +0 -0
  244. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_org_request.py +0 -0
  245. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_repository_subscription_request.py +0 -0
  246. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_subgraph_request.py +0 -0
  247. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_subgraph_request_metadata_type_0.py +0 -0
  248. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/create_view_request.py +0 -0
  249. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/credit_limits.py +0 -0
  250. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/credit_summary.py +0 -0
  251. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/credit_summary_operation_breakdown.py +0 -0
  252. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/credit_summary_response.py +0 -0
  253. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/custom_schema_definition.py +0 -0
  254. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/custom_schema_definition_metadata.py +0 -0
  255. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/custom_schema_definition_nodes_item.py +0 -0
  256. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/custom_schema_definition_relationships_item.py +0 -0
  257. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/cypher_query_request.py +0 -0
  258. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/cypher_query_request_parameters_type_0.py +0 -0
  259. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/database_health_response.py +0 -0
  260. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/database_info_response.py +0 -0
  261. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/delete_file_response.py +0 -0
  262. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/delete_subgraph_request.py +0 -0
  263. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/delete_subgraph_response.py +0 -0
  264. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/detailed_transactions_response.py +0 -0
  265. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/detailed_transactions_response_date_range.py +0 -0
  266. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/detailed_transactions_response_summary.py +0 -0
  267. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/email_verification_request.py +0 -0
  268. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/enhanced_credit_transaction_response.py +0 -0
  269. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/enhanced_credit_transaction_response_metadata.py +0 -0
  270. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/enhanced_file_status_layers.py +0 -0
  271. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/error_response.py +0 -0
  272. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/exchange_token_request.py +0 -0
  273. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/exchange_token_request_metadata_type_0.py +0 -0
  274. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/execute_cypher_query_response_200.py +0 -0
  275. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/execute_cypher_query_response_200_data_item.py +0 -0
  276. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/fact_detail.py +0 -0
  277. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/file_info.py +0 -0
  278. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/file_layer_status.py +0 -0
  279. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/file_status_update.py +0 -0
  280. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/file_upload_request.py +0 -0
  281. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/file_upload_response.py +0 -0
  282. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/forgot_password_request.py +0 -0
  283. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/forgot_password_response_forgotpassword.py +0 -0
  284. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/get_current_auth_user_response_getcurrentauthuser.py +0 -0
  285. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/get_file_info_response.py +0 -0
  286. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/get_operation_status_response_getoperationstatus.py +0 -0
  287. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/get_storage_usage_response_getstorageusage.py +0 -0
  288. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_info.py +0 -0
  289. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_limits_response.py +0 -0
  290. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_metadata.py +0 -0
  291. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_metrics_response.py +0 -0
  292. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_metrics_response_estimated_size.py +0 -0
  293. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_metrics_response_health_status.py +0 -0
  294. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_metrics_response_node_counts.py +0 -0
  295. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_metrics_response_relationship_counts.py +0 -0
  296. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_subscription_response.py +0 -0
  297. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_subscription_tier.py +0 -0
  298. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_subscriptions.py +0 -0
  299. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_tier_backup.py +0 -0
  300. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_tier_copy_operations.py +0 -0
  301. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_tier_info.py +0 -0
  302. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_tier_instance.py +0 -0
  303. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_tier_limits.py +0 -0
  304. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_usage_response.py +0 -0
  305. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/graph_usage_response_recent_events_item.py +0 -0
  306. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/health_status.py +0 -0
  307. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/health_status_details_type_0.py +0 -0
  308. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/http_validation_error.py +0 -0
  309. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/initial_entity_data.py +0 -0
  310. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/invite_member_request.py +0 -0
  311. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/invoice.py +0 -0
  312. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/invoice_line_item.py +0 -0
  313. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/invoices_response.py +0 -0
  314. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/link_token_request.py +0 -0
  315. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/link_token_request_options_type_0.py +0 -0
  316. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/link_token_request_provider_type_0.py +0 -0
  317. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/list_connections_provider_type_0.py +0 -0
  318. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/list_org_graphs_response_200_item.py +0 -0
  319. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/list_subgraphs_response.py +0 -0
  320. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/list_table_files_response.py +0 -0
  321. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/login_request.py +0 -0
  322. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/logout_user_response_logoutuser.py +0 -0
  323. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/materialize_request.py +0 -0
  324. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/materialize_response.py +0 -0
  325. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/materialize_status_response.py +0 -0
  326. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/mcp_tool_call.py +0 -0
  327. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/mcp_tool_call_arguments.py +0 -0
  328. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/mcp_tools_response.py +0 -0
  329. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/mcp_tools_response_tools_item.py +0 -0
  330. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/o_auth_callback_request.py +0 -0
  331. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/o_auth_init_request.py +0 -0
  332. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/o_auth_init_request_additional_params_type_0.py +0 -0
  333. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/o_auth_init_response.py +0 -0
  334. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/offering_repository_plan.py +0 -0
  335. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/offering_repository_plan_rate_limits_type_0.py +0 -0
  336. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/operation_costs.py +0 -0
  337. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/operation_costs_ai_operations.py +0 -0
  338. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/operation_costs_token_pricing.py +0 -0
  339. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_detail_response.py +0 -0
  340. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_detail_response_graphs_item.py +0 -0
  341. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_detail_response_limits_type_0.py +0 -0
  342. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_detail_response_members_item.py +0 -0
  343. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_limits_response.py +0 -0
  344. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_limits_response_current_usage.py +0 -0
  345. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_list_response.py +0 -0
  346. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_member_list_response.py +0 -0
  347. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_member_response.py +0 -0
  348. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_response.py +0 -0
  349. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_role.py +0 -0
  350. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_type.py +0 -0
  351. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_usage_response.py +0 -0
  352. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_usage_response_daily_trend_item.py +0 -0
  353. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_usage_response_graph_details_item.py +0 -0
  354. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/org_usage_summary.py +0 -0
  355. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/password_check_request.py +0 -0
  356. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/password_check_response.py +0 -0
  357. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/password_check_response_character_types.py +0 -0
  358. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/password_policy_response.py +0 -0
  359. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/password_policy_response_policy.py +0 -0
  360. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/payment_method.py +0 -0
  361. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/performance_insights.py +0 -0
  362. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/performance_insights_operation_stats.py +0 -0
  363. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/performance_insights_slow_queries_item.py +0 -0
  364. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/plaid_connection_config.py +0 -0
  365. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/plaid_connection_config_accounts_type_0_item.py +0 -0
  366. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/plaid_connection_config_institution_type_0.py +0 -0
  367. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/portal_session_response.py +0 -0
  368. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/query_limits.py +0 -0
  369. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/quick_books_connection_config.py +0 -0
  370. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/rate_limits.py +0 -0
  371. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/register_request.py +0 -0
  372. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/repository_info.py +0 -0
  373. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/repository_subscriptions.py +0 -0
  374. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/resend_verification_email_response_resendverificationemail.py +0 -0
  375. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/reset_password_request.py +0 -0
  376. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/reset_password_validate_response.py +0 -0
  377. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/response_mode.py +0 -0
  378. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/save_view_request.py +0 -0
  379. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/save_view_response.py +0 -0
  380. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_export_response.py +0 -0
  381. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_export_response_data_stats_type_0.py +0 -0
  382. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_export_response_schema_definition_type_0.py +0 -0
  383. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_info_response.py +0 -0
  384. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_info_response_schema.py +0 -0
  385. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_validation_request.py +0 -0
  386. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_validation_request_schema_definition_type_0.py +0 -0
  387. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_validation_response.py +0 -0
  388. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_validation_response_compatibility_type_0.py +0 -0
  389. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/schema_validation_response_stats_type_0.py +0 -0
  390. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sec_connection_config.py +0 -0
  391. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/selection_criteria.py +0 -0
  392. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/service_offering_summary.py +0 -0
  393. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/service_offerings_response.py +0 -0
  394. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sso_complete_request.py +0 -0
  395. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sso_exchange_request.py +0 -0
  396. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sso_exchange_response.py +0 -0
  397. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sso_token_response.py +0 -0
  398. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/storage_info.py +0 -0
  399. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/storage_info_included_per_tier.py +0 -0
  400. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/storage_info_overage_pricing.py +0 -0
  401. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/storage_limit_response.py +0 -0
  402. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/storage_limits.py +0 -0
  403. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/storage_summary.py +0 -0
  404. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/structure_detail.py +0 -0
  405. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/subgraph_quota_response.py +0 -0
  406. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/subgraph_response.py +0 -0
  407. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/subgraph_response_metadata_type_0.py +0 -0
  408. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/subgraph_summary.py +0 -0
  409. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/subgraph_type.py +0 -0
  410. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/success_response.py +0 -0
  411. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/success_response_data_type_0.py +0 -0
  412. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sync_connection_request.py +0 -0
  413. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sync_connection_request_sync_options_type_0.py +0 -0
  414. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/sync_connection_response_syncconnection.py +0 -0
  415. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/table_info.py +0 -0
  416. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/table_list_response.py +0 -0
  417. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/table_query_request.py +0 -0
  418. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/table_query_response.py +0 -0
  419. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/token_pricing.py +0 -0
  420. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/transaction_summary_response.py +0 -0
  421. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/upcoming_invoice.py +0 -0
  422. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/update_api_key_request.py +0 -0
  423. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/update_file_response_updatefile.py +0 -0
  424. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/update_member_role_request.py +0 -0
  425. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/update_org_request.py +0 -0
  426. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/update_password_request.py +0 -0
  427. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/update_user_request.py +0 -0
  428. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/upgrade_subscription_request.py +0 -0
  429. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/user_graphs_response.py +0 -0
  430. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/user_response.py +0 -0
  431. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/validation_error.py +0 -0
  432. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/view_axis_config.py +0 -0
  433. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/view_axis_config_element_labels_type_0.py +0 -0
  434. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/view_axis_config_member_labels_type_0.py +0 -0
  435. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/view_config.py +0 -0
  436. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/view_source.py +0 -0
  437. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/models/view_source_type.py +0 -0
  438. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/py.typed +0 -0
  439. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/sdk-config.yaml +0 -0
  440. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/robosystems_client/types.py +0 -0
  441. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/ruff.toml +0 -0
  442. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/__init__.py +0 -0
  443. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/conftest.py +0 -0
  444. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/test_client.py +0 -0
  445. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/test_graph_client.py +0 -0
  446. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/test_operation_client.py +0 -0
  447. {robosystems_client-0.2.16 → robosystems_client-0.2.17}/tests/test_query_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: robosystems-client
3
- Version: 0.2.16
3
+ Version: 0.2.17
4
4
  Summary: Python Client for RoboSystems financial graph database API
5
5
  Author: RFS LLC
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "robosystems-client"
3
- version = "0.2.16"
3
+ version = "0.2.17"
4
4
  description = "Python Client for RoboSystems financial graph database API"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -28,12 +28,22 @@ from .operation_client import (
28
28
  OperationProgress,
29
29
  OperationResult,
30
30
  )
31
- from .table_ingest_client import (
32
- TableIngestClient,
33
- UploadOptions,
34
- IngestOptions,
35
- UploadResult,
31
+ from .file_client import (
32
+ FileClient,
33
+ FileUploadOptions,
34
+ FileUploadResult,
35
+ FileInfo,
36
+ )
37
+ from .materialization_client import (
38
+ MaterializationClient,
39
+ MaterializationOptions,
40
+ MaterializationResult,
41
+ MaterializationStatus,
42
+ )
43
+ from .table_client import (
44
+ TableClient,
36
45
  TableInfo,
46
+ QueryResult as TableQueryResult,
37
47
  )
38
48
  from .graph_client import (
39
49
  GraphClient,
@@ -177,12 +187,20 @@ __all__ = [
177
187
  "OperationStatus",
178
188
  "OperationProgress",
179
189
  "OperationResult",
180
- # Table Ingest Client
181
- "TableIngestClient",
182
- "UploadOptions",
183
- "IngestOptions",
184
- "UploadResult",
190
+ # File Client
191
+ "FileClient",
192
+ "FileUploadOptions",
193
+ "FileUploadResult",
194
+ "FileInfo",
195
+ # Materialization Client
196
+ "MaterializationClient",
197
+ "MaterializationOptions",
198
+ "MaterializationResult",
199
+ "MaterializationStatus",
200
+ # Table Client
201
+ "TableClient",
185
202
  "TableInfo",
203
+ "TableQueryResult",
186
204
  # Graph Client
187
205
  "GraphClient",
188
206
  "GraphMetadata",
@@ -9,7 +9,9 @@ from typing import Dict, Any, Optional, Callable
9
9
  from .query_client import QueryClient
10
10
  from .agent_client import AgentClient
11
11
  from .operation_client import OperationClient
12
- from .table_ingest_client import TableIngestClient
12
+ from .file_client import FileClient
13
+ from .materialization_client import MaterializationClient
14
+ from .table_client import TableClient
13
15
  from .graph_client import GraphClient
14
16
  from .sse_client import SSEClient
15
17
 
@@ -61,7 +63,9 @@ class RoboSystemsExtensions:
61
63
  self.query = QueryClient(self.config)
62
64
  self.agent = AgentClient(self.config)
63
65
  self.operations = OperationClient(self.config)
64
- self.tables = TableIngestClient(self.config)
66
+ self.files = FileClient(self.config)
67
+ self.materialization = MaterializationClient(self.config)
68
+ self.tables = TableClient(self.config)
65
69
  self.graphs = GraphClient(self.config)
66
70
 
67
71
  def monitor_operation(
@@ -92,7 +96,12 @@ class RoboSystemsExtensions:
92
96
  self.query.close()
93
97
  self.agent.close()
94
98
  self.operations.close_all()
95
- self.tables.close()
99
+ if hasattr(self.files, "close"):
100
+ self.files.close()
101
+ if hasattr(self.materialization, "close"):
102
+ self.materialization.close()
103
+ if hasattr(self.tables, "close"):
104
+ self.tables.close()
96
105
  self.graphs.close()
97
106
 
98
107
  # Convenience methods that delegate to the appropriate clients
@@ -0,0 +1,380 @@
1
+ """File Client for RoboSystems API
2
+
3
+ Manages file operations as first-class resources with multi-layer status tracking.
4
+ Files are independent entities with their own lifecycle (S3 → DuckDB → Graph).
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+ from io import BytesIO
9
+ from pathlib import Path
10
+ from typing import Dict, Any, Optional, Callable, Union, BinaryIO
11
+ import logging
12
+ import httpx
13
+
14
+ from ..api.files.create_file_upload import (
15
+ sync_detailed as create_file_upload,
16
+ )
17
+ from ..api.files.update_file import (
18
+ sync_detailed as update_file,
19
+ )
20
+ from ..api.files.list_files import (
21
+ sync_detailed as list_files,
22
+ )
23
+ from ..api.files.get_file import (
24
+ sync_detailed as get_file,
25
+ )
26
+ from ..api.files.delete_file import (
27
+ sync_detailed as delete_file,
28
+ )
29
+ from ..models.file_upload_request import FileUploadRequest
30
+ from ..models.file_status_update import FileStatusUpdate
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+
35
+ @dataclass
36
+ class FileUploadOptions:
37
+ """Options for file upload operations"""
38
+
39
+ on_progress: Optional[Callable[[str], None]] = None
40
+ fix_localstack_url: bool = True
41
+ ingest_to_graph: bool = False
42
+
43
+
44
+ @dataclass
45
+ class FileUploadResult:
46
+ """Result from file upload operation"""
47
+
48
+ file_id: str
49
+ file_size: int
50
+ row_count: int
51
+ table_name: str
52
+ file_name: str
53
+ success: bool = True
54
+ error: Optional[str] = None
55
+
56
+
57
+ @dataclass
58
+ class FileInfo:
59
+ """Information about a file"""
60
+
61
+ file_id: str
62
+ file_name: str
63
+ file_format: str
64
+ size_bytes: int
65
+ row_count: Optional[int]
66
+ upload_status: str
67
+ table_name: str
68
+ created_at: Optional[str]
69
+ uploaded_at: Optional[str]
70
+ layers: Optional[Dict[str, Any]] = None
71
+
72
+
73
+ class FileClient:
74
+ """Client for managing files as first-class resources"""
75
+
76
+ def __init__(self, config: Dict[str, Any]):
77
+ self.config = config
78
+ self.base_url = config["base_url"]
79
+ self.headers = config.get("headers", {})
80
+ self.token = config.get("token")
81
+ self._http_client = httpx.Client(timeout=120.0)
82
+
83
+ def upload(
84
+ self,
85
+ graph_id: str,
86
+ table_name: str,
87
+ file_or_buffer: Union[Path, str, BytesIO, BinaryIO],
88
+ options: Optional[FileUploadOptions] = None,
89
+ ) -> FileUploadResult:
90
+ """
91
+ Upload a file to a table.
92
+
93
+ This handles the complete 3-step upload process:
94
+ 1. Get presigned upload URL
95
+ 2. Upload file to S3
96
+ 3. Mark file as 'uploaded' (triggers DuckDB staging)
97
+
98
+ Args:
99
+ graph_id: Graph database identifier
100
+ table_name: Table to associate file with
101
+ file_or_buffer: File path, Path object, BytesIO, or file-like object
102
+ options: Upload options (progress callback, LocalStack URL fix, auto-ingest)
103
+
104
+ Returns:
105
+ FileUploadResult with file metadata and status
106
+ """
107
+ options = options or FileUploadOptions()
108
+
109
+ try:
110
+ # Determine file name and read content
111
+ if isinstance(file_or_buffer, (str, Path)):
112
+ file_path = Path(file_or_buffer)
113
+ file_name = file_path.name
114
+ with open(file_path, "rb") as f:
115
+ file_content = f.read()
116
+ elif isinstance(file_or_buffer, BytesIO):
117
+ file_name = "data.parquet"
118
+ file_content = file_or_buffer.getvalue()
119
+ elif hasattr(file_or_buffer, "read"):
120
+ file_name = getattr(file_or_buffer, "name", "data.parquet")
121
+ file_content = file_or_buffer.read()
122
+ else:
123
+ raise ValueError(f"Unsupported file type: {type(file_or_buffer)}")
124
+
125
+ # Step 1: Get presigned upload URL
126
+ if options.on_progress:
127
+ options.on_progress(
128
+ f"Getting upload URL for {file_name} → table '{table_name}'..."
129
+ )
130
+
131
+ upload_request = FileUploadRequest(
132
+ file_name=file_name,
133
+ content_type="application/x-parquet",
134
+ table_name=table_name,
135
+ )
136
+
137
+ kwargs = {
138
+ "graph_id": graph_id,
139
+ "client": self.config.get("client"),
140
+ "body": upload_request,
141
+ }
142
+
143
+ response = create_file_upload(**kwargs)
144
+
145
+ if response.status_code != 200 or not response.parsed:
146
+ error_msg = f"Failed to get upload URL: {response.status_code}"
147
+ return FileUploadResult(
148
+ file_id="",
149
+ file_size=0,
150
+ row_count=0,
151
+ table_name=table_name,
152
+ file_name=file_name,
153
+ success=False,
154
+ error=error_msg,
155
+ )
156
+
157
+ upload_data = response.parsed
158
+ upload_url = upload_data.upload_url
159
+ file_id = upload_data.file_id
160
+
161
+ # Fix LocalStack URL if needed
162
+ if options.fix_localstack_url and "localstack:4566" in upload_url:
163
+ upload_url = upload_url.replace("localstack:4566", "localhost:4566")
164
+
165
+ # Step 2: Upload file to S3
166
+ if options.on_progress:
167
+ options.on_progress(f"Uploading {file_name} to S3...")
168
+
169
+ s3_response = self._http_client.put(
170
+ upload_url,
171
+ content=file_content,
172
+ headers={"Content-Type": "application/x-parquet"},
173
+ )
174
+
175
+ if s3_response.status_code not in [200, 204]:
176
+ return FileUploadResult(
177
+ file_id=file_id,
178
+ file_size=len(file_content),
179
+ row_count=0,
180
+ table_name=table_name,
181
+ file_name=file_name,
182
+ success=False,
183
+ error=f"S3 upload failed: {s3_response.status_code}",
184
+ )
185
+
186
+ # Step 3: Mark file as uploaded
187
+ if options.on_progress:
188
+ options.on_progress(f"Marking {file_name} as uploaded...")
189
+
190
+ status_update = FileStatusUpdate(
191
+ status="uploaded",
192
+ ingest_to_graph=options.ingest_to_graph,
193
+ )
194
+
195
+ update_kwargs = {
196
+ "graph_id": graph_id,
197
+ "file_id": file_id,
198
+ "client": self.config.get("client"),
199
+ "body": status_update,
200
+ }
201
+
202
+ update_response = update_file(**update_kwargs)
203
+
204
+ if update_response.status_code != 200 or not update_response.parsed:
205
+ return FileUploadResult(
206
+ file_id=file_id,
207
+ file_size=len(file_content),
208
+ row_count=0,
209
+ table_name=table_name,
210
+ file_name=file_name,
211
+ success=False,
212
+ error="Failed to complete file upload",
213
+ )
214
+
215
+ # Extract metadata from response
216
+ response_data = update_response.parsed
217
+ actual_file_size = getattr(response_data, "file_size_bytes", len(file_content))
218
+ actual_row_count = getattr(response_data, "row_count", 0)
219
+
220
+ if options.on_progress:
221
+ options.on_progress(
222
+ f"✅ Uploaded {file_name} ({actual_file_size:,} bytes, {actual_row_count:,} rows)"
223
+ )
224
+
225
+ return FileUploadResult(
226
+ file_id=file_id,
227
+ file_size=actual_file_size,
228
+ row_count=actual_row_count,
229
+ table_name=table_name,
230
+ file_name=file_name,
231
+ success=True,
232
+ )
233
+
234
+ except Exception as e:
235
+ logger.error(f"File upload failed: {e}")
236
+ return FileUploadResult(
237
+ file_id="",
238
+ file_size=0,
239
+ row_count=0,
240
+ table_name=table_name,
241
+ file_name=getattr(file_or_buffer, "name", "unknown"),
242
+ success=False,
243
+ error=str(e),
244
+ )
245
+
246
+ def list(
247
+ self,
248
+ graph_id: str,
249
+ table_name: Optional[str] = None,
250
+ status: Optional[str] = None,
251
+ ) -> list[FileInfo]:
252
+ """
253
+ List files in a graph with optional filtering.
254
+
255
+ Args:
256
+ graph_id: Graph database identifier
257
+ table_name: Optional table name filter
258
+ status: Optional upload status filter (uploaded, pending, etc.)
259
+
260
+ Returns:
261
+ List of FileInfo objects
262
+ """
263
+ try:
264
+ kwargs = {
265
+ "graph_id": graph_id,
266
+ "client": self.config.get("client"),
267
+ }
268
+
269
+ if table_name:
270
+ kwargs["table_name"] = table_name
271
+ if status:
272
+ kwargs["status"] = status
273
+
274
+ response = list_files(**kwargs)
275
+
276
+ if response.status_code != 200 or not response.parsed:
277
+ logger.error(f"Failed to list files: {response.status_code}")
278
+ return []
279
+
280
+ files_data = response.parsed
281
+ files = getattr(files_data, "files", [])
282
+
283
+ return [
284
+ FileInfo(
285
+ file_id=f.file_id,
286
+ file_name=f.file_name,
287
+ file_format=f.file_format,
288
+ size_bytes=f.size_bytes or 0,
289
+ row_count=f.row_count,
290
+ upload_status=f.upload_status,
291
+ table_name=getattr(f, "table_name", ""),
292
+ created_at=f.created_at,
293
+ uploaded_at=f.uploaded_at,
294
+ )
295
+ for f in files
296
+ ]
297
+
298
+ except Exception as e:
299
+ logger.error(f"Failed to list files: {e}")
300
+ return []
301
+
302
+ def get(self, graph_id: str, file_id: str) -> Optional[FileInfo]:
303
+ """
304
+ Get detailed information about a specific file.
305
+
306
+ Args:
307
+ graph_id: Graph database identifier
308
+ file_id: File ID
309
+
310
+ Returns:
311
+ FileInfo with multi-layer status tracking, or None if not found
312
+ """
313
+ try:
314
+ kwargs = {
315
+ "graph_id": graph_id,
316
+ "file_id": file_id,
317
+ "client": self.config.get("client"),
318
+ }
319
+
320
+ response = get_file(**kwargs)
321
+
322
+ if response.status_code != 200 or not response.parsed:
323
+ logger.error(f"Failed to get file {file_id}: {response.status_code}")
324
+ return None
325
+
326
+ file_data = response.parsed
327
+
328
+ return FileInfo(
329
+ file_id=file_data.file_id,
330
+ file_name=file_data.file_name,
331
+ file_format=file_data.file_format,
332
+ size_bytes=file_data.size_bytes or 0,
333
+ row_count=file_data.row_count,
334
+ upload_status=file_data.upload_status,
335
+ table_name=file_data.table_name or "",
336
+ created_at=file_data.created_at,
337
+ uploaded_at=file_data.uploaded_at,
338
+ layers=getattr(file_data, "layers", None),
339
+ )
340
+
341
+ except Exception as e:
342
+ logger.error(f"Failed to get file {file_id}: {e}")
343
+ return None
344
+
345
+ def delete(self, graph_id: str, file_id: str, cascade: bool = False) -> bool:
346
+ """
347
+ Delete a file from all layers.
348
+
349
+ Args:
350
+ graph_id: Graph database identifier
351
+ file_id: File ID to delete
352
+ cascade: If True, delete from all layers including DuckDB and graph
353
+
354
+ Returns:
355
+ True if deletion succeeded, False otherwise
356
+ """
357
+ try:
358
+ kwargs = {
359
+ "graph_id": graph_id,
360
+ "file_id": file_id,
361
+ "client": self.config.get("client"),
362
+ "cascade": cascade,
363
+ }
364
+
365
+ response = delete_file(**kwargs)
366
+
367
+ if response.status_code not in [200, 204]:
368
+ logger.error(f"Failed to delete file {file_id}: {response.status_code}")
369
+ return False
370
+
371
+ return True
372
+
373
+ except Exception as e:
374
+ logger.error(f"Failed to delete file {file_id}: {e}")
375
+ return False
376
+
377
+ def __del__(self):
378
+ """Cleanup HTTP client on deletion"""
379
+ if hasattr(self, "_http_client"):
380
+ self._http_client.close()
@@ -0,0 +1,211 @@
1
+ """Materialization Client for RoboSystems API
2
+
3
+ Manages graph materialization from DuckDB staging tables.
4
+ Treats the graph database as a materialized view of the mutable DuckDB data lake.
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+ from typing import Dict, Any, Optional, Callable
9
+ import logging
10
+
11
+ from ..api.materialization.materialize_graph import (
12
+ sync_detailed as materialize_graph,
13
+ )
14
+ from ..api.materialization.get_materialization_status import (
15
+ sync_detailed as get_materialization_status,
16
+ )
17
+ from ..models.materialize_request import MaterializeRequest
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ @dataclass
23
+ class MaterializationOptions:
24
+ """Options for graph materialization operations"""
25
+
26
+ ignore_errors: bool = True
27
+ rebuild: bool = False
28
+ force: bool = False
29
+ on_progress: Optional[Callable[[str], None]] = None
30
+
31
+
32
+ @dataclass
33
+ class MaterializationResult:
34
+ """Result from materialization operation"""
35
+
36
+ status: str
37
+ was_stale: bool
38
+ stale_reason: Optional[str]
39
+ tables_materialized: list[str]
40
+ total_rows: int
41
+ execution_time_ms: float
42
+ message: str
43
+ success: bool = True
44
+ error: Optional[str] = None
45
+
46
+
47
+ @dataclass
48
+ class MaterializationStatus:
49
+ """Status information about graph materialization"""
50
+
51
+ graph_id: str
52
+ is_stale: bool
53
+ stale_reason: Optional[str]
54
+ stale_since: Optional[str]
55
+ last_materialized_at: Optional[str]
56
+ materialization_count: int
57
+ hours_since_materialization: Optional[float]
58
+ message: str
59
+
60
+
61
+ class MaterializationClient:
62
+ """Client for managing graph materialization operations"""
63
+
64
+ def __init__(self, config: Dict[str, Any]):
65
+ self.config = config
66
+ self.base_url = config["base_url"]
67
+ self.headers = config.get("headers", {})
68
+ self.token = config.get("token")
69
+
70
+ def materialize(
71
+ self,
72
+ graph_id: str,
73
+ options: Optional[MaterializationOptions] = None,
74
+ ) -> MaterializationResult:
75
+ """
76
+ Materialize graph from DuckDB staging tables.
77
+
78
+ Rebuilds the complete graph database from the current state of DuckDB
79
+ staging tables. Automatically discovers all tables, materializes them in
80
+ the correct order (nodes before relationships), and clears the staleness flag.
81
+
82
+ Args:
83
+ graph_id: Graph database identifier
84
+ options: Materialization options (ignore_errors, rebuild, force)
85
+
86
+ Returns:
87
+ MaterializationResult with detailed execution information
88
+
89
+ When to use:
90
+ - After batch uploads (files uploaded with ingest_to_graph=false)
91
+ - After cascade file deletions (graph marked stale)
92
+ - Periodic full refresh to ensure consistency
93
+ - Recovery from partial materialization failures
94
+ """
95
+ options = options or MaterializationOptions()
96
+
97
+ try:
98
+ if options.on_progress:
99
+ options.on_progress("Starting graph materialization...")
100
+
101
+ request = MaterializeRequest(
102
+ ignore_errors=options.ignore_errors,
103
+ rebuild=options.rebuild,
104
+ force=options.force,
105
+ )
106
+
107
+ kwargs = {
108
+ "graph_id": graph_id,
109
+ "client": self.config.get("client"),
110
+ "body": request,
111
+ }
112
+
113
+ response = materialize_graph(**kwargs)
114
+
115
+ if response.status_code != 200 or not response.parsed:
116
+ error_msg = f"Materialization failed: {response.status_code}"
117
+ if hasattr(response, "content"):
118
+ try:
119
+ import json
120
+
121
+ error_data = json.loads(response.content)
122
+ error_msg = error_data.get("detail", error_msg)
123
+ except Exception:
124
+ pass
125
+
126
+ return MaterializationResult(
127
+ status="failed",
128
+ was_stale=False,
129
+ stale_reason=None,
130
+ tables_materialized=[],
131
+ total_rows=0,
132
+ execution_time_ms=0,
133
+ message=error_msg,
134
+ success=False,
135
+ error=error_msg,
136
+ )
137
+
138
+ result_data = response.parsed
139
+
140
+ if options.on_progress:
141
+ options.on_progress(
142
+ f"✅ Materialization complete: {len(result_data.tables_materialized)} tables, "
143
+ f"{result_data.total_rows:,} rows in {result_data.execution_time_ms:.2f}ms"
144
+ )
145
+
146
+ return MaterializationResult(
147
+ status=result_data.status,
148
+ was_stale=result_data.was_stale,
149
+ stale_reason=result_data.stale_reason,
150
+ tables_materialized=result_data.tables_materialized,
151
+ total_rows=result_data.total_rows,
152
+ execution_time_ms=result_data.execution_time_ms,
153
+ message=result_data.message,
154
+ success=True,
155
+ )
156
+
157
+ except Exception as e:
158
+ logger.error(f"Materialization failed: {e}")
159
+ return MaterializationResult(
160
+ status="failed",
161
+ was_stale=False,
162
+ stale_reason=None,
163
+ tables_materialized=[],
164
+ total_rows=0,
165
+ execution_time_ms=0,
166
+ message=str(e),
167
+ success=False,
168
+ error=str(e),
169
+ )
170
+
171
+ def status(self, graph_id: str) -> Optional[MaterializationStatus]:
172
+ """
173
+ Get current materialization status for the graph.
174
+
175
+ Shows whether the graph is stale (DuckDB has changes not yet in graph database),
176
+ when it was last materialized, and how long since last materialization.
177
+
178
+ Args:
179
+ graph_id: Graph database identifier
180
+
181
+ Returns:
182
+ MaterializationStatus with staleness and timing information
183
+ """
184
+ try:
185
+ kwargs = {
186
+ "graph_id": graph_id,
187
+ "client": self.config.get("client"),
188
+ }
189
+
190
+ response = get_materialization_status(**kwargs)
191
+
192
+ if response.status_code != 200 or not response.parsed:
193
+ logger.error(f"Failed to get materialization status: {response.status_code}")
194
+ return None
195
+
196
+ status_data = response.parsed
197
+
198
+ return MaterializationStatus(
199
+ graph_id=status_data.graph_id,
200
+ is_stale=status_data.is_stale,
201
+ stale_reason=status_data.stale_reason,
202
+ stale_since=status_data.stale_since,
203
+ last_materialized_at=status_data.last_materialized_at,
204
+ materialization_count=status_data.materialization_count,
205
+ hours_since_materialization=status_data.hours_since_materialization,
206
+ message=status_data.message,
207
+ )
208
+
209
+ except Exception as e:
210
+ logger.error(f"Failed to get materialization status: {e}")
211
+ return None