hotdata 0.11.0__tar.gz → 0.13.0__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.
Files changed (304) hide show
  1. {hotdata-0.11.0 → hotdata-0.13.0}/PKG-INFO +32 -3
  2. {hotdata-0.11.0 → hotdata-0.13.0}/README.md +30 -1
  3. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/__init__.py +29 -1
  4. hotdata-0.13.0/hotdata/_workspace.py +84 -0
  5. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/connections_api.py +62 -294
  6. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/databases_api.py +1096 -194
  7. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/indexes_api.py +30 -27
  8. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/information_schema_api.py +3 -0
  9. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/jobs_api.py +18 -15
  10. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/query_api.py +5 -4
  11. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/results_api.py +12 -3
  12. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/uploads_api.py +9 -9
  13. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api_client.py +14 -0
  14. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/configuration.py +14 -2
  15. hotdata-0.13.0/hotdata/loads.py +273 -0
  16. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/__init__.py +7 -0
  17. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/add_managed_schema_request.py +4 -0
  18. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/add_managed_table_decl.py +11 -2
  19. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/add_managed_table_request.py +11 -2
  20. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/attach_database_catalog_request.py +4 -0
  21. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/batch_create_upload_request.py +4 -0
  22. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/bulk_create_databases_request.py +5 -1
  23. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_type_spec.py +4 -0
  24. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_connection_request.py +6 -4
  25. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_database_request.py +8 -2
  26. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_database_response.py +21 -3
  27. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_embedding_provider_request.py +4 -0
  28. hotdata-0.13.0/hotdata/models/create_index_request.py +189 -0
  29. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_saved_query_request.py +4 -0
  30. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_upload_request.py +6 -2
  31. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_workspace_request.py +4 -0
  32. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_default_schema_decl.py +4 -0
  33. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_default_table_decl.py +11 -2
  34. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_detail_response.py +13 -2
  35. hotdata-0.13.0/hotdata/models/database_lineage_response.py +114 -0
  36. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_summary.py +12 -1
  37. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/execute_saved_query_request.py +4 -0
  38. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_part.py +4 -0
  39. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_request.py +4 -0
  40. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/fork_database_request.py +12 -1
  41. hotdata-0.13.0/hotdata/models/forked_from_info.py +117 -0
  42. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/get_result_response.py +9 -2
  43. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/index_entry_response.py +12 -3
  44. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/index_info_response.py +33 -4
  45. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/information_schema_response.py +5 -5
  46. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/job_result.py +1 -1
  47. hotdata-0.13.0/hotdata/models/job_status.py +41 -0
  48. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/job_status_response.py +1 -1
  49. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/job_type.py +3 -0
  50. hotdata-0.13.0/hotdata/models/lineage_ancestor_info.py +119 -0
  51. hotdata-0.13.0/hotdata/models/lineage_fork_info.py +119 -0
  52. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/load_managed_table_request.py +6 -2
  53. hotdata-0.13.0/hotdata/models/managed_table_constant_per_key_response.py +94 -0
  54. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/mint_upload_parts_request.py +4 -0
  55. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/query_request.py +6 -2
  56. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/query_response.py +1 -1
  57. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/query_run_info.py +1 -1
  58. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_info.py +6 -1
  59. hotdata-0.11.0/hotdata/models/job_status.py → hotdata-0.13.0/hotdata/models/table_layout.py +5 -8
  60. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_partition_key.py +4 -0
  61. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_sort_key.py +4 -0
  62. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/update_embedding_provider_request.py +4 -0
  63. hotdata-0.13.0/hotdata/models/update_managed_table_request.py +92 -0
  64. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/update_saved_query_request.py +4 -0
  65. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/upsert_database_context_request.py +4 -0
  66. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/workspace_usage_response.py +1 -1
  67. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/query.py +57 -6
  68. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/PKG-INFO +32 -3
  69. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/SOURCES.txt +21 -1
  70. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/requires.txt +1 -1
  71. {hotdata-0.11.0 → hotdata-0.13.0}/pyproject.toml +2 -2
  72. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_add_managed_schema_request.py +2 -0
  73. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_add_managed_table_decl.py +2 -0
  74. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_add_managed_table_request.py +2 -0
  75. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_batch_create_upload_request.py +2 -2
  76. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_bulk_create_databases_request.py +2 -0
  77. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_connections_api.py +3 -10
  78. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_connection_request.py +2 -3
  79. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_database_request.py +3 -0
  80. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_database_response.py +7 -0
  81. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_embedding_provider_request.py +1 -1
  82. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_index_request.py +5 -1
  83. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_default_schema_decl.py +2 -0
  84. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_default_table_decl.py +2 -0
  85. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_detail_response.py +6 -0
  86. hotdata-0.13.0/test/test_database_lineage_response.py +95 -0
  87. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_summary.py +6 -0
  88. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_databases_api.py +21 -0
  89. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_fork_database_request.py +1 -0
  90. hotdata-0.13.0/test/test_forked_from_info.py +57 -0
  91. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_get_result_response.py +2 -1
  92. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_index_entry_response.py +4 -0
  93. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_index_info_response.py +5 -1
  94. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_information_schema_response.py +8 -0
  95. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_result.py +4 -0
  96. hotdata-0.13.0/test/test_lineage_ancestor_info.py +59 -0
  97. hotdata-0.13.0/test/test_lineage_fork_info.py +59 -0
  98. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_databases_response.py +2 -0
  99. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_indexes_response.py +10 -2
  100. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_load_managed_table_request.py +1 -1
  101. hotdata-0.13.0/test/test_managed_table_constant_per_key_response.py +63 -0
  102. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_request.py +1 -1
  103. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_info.py +8 -0
  104. hotdata-0.13.0/test/test_table_layout.py +34 -0
  105. hotdata-0.13.0/test/test_update_managed_table_request.py +52 -0
  106. hotdata-0.13.0/tests/test_config_env.py +104 -0
  107. hotdata-0.13.0/tests/test_loads.py +254 -0
  108. hotdata-0.13.0/tests/test_model_extra_forbid.py +113 -0
  109. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_query.py +58 -1
  110. hotdata-0.13.0/tests/test_workspace_guard.py +160 -0
  111. hotdata-0.11.0/hotdata/models/create_index_request.py +0 -147
  112. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/_retry.py +0 -0
  113. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/_upload_watchdog.py +0 -0
  114. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/_useragent.py +0 -0
  115. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/__init__.py +0 -0
  116. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/database_context_api.py +0 -0
  117. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/embedding_providers_api.py +0 -0
  118. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/query_runs_api.py +0 -0
  119. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/saved_queries_api.py +0 -0
  120. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/usage_api.py +0 -0
  121. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/workspaces_api.py +0 -0
  122. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api_response.py +0 -0
  123. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/arrow.py +0 -0
  124. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/exceptions.py +0 -0
  125. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/api_error_detail.py +0 -0
  126. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/api_error_response.py +0 -0
  127. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/async_query_response.py +0 -0
  128. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/batch_create_upload_response.py +0 -0
  129. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/boolean_profile_detail.py +0 -0
  130. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/bulk_create_databases_result.py +0 -0
  131. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/categorical_profile_detail.py +0 -0
  132. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/category_value_info.py +0 -0
  133. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_definition.py +0 -0
  134. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_info.py +0 -0
  135. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail.py +0 -0
  136. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of.py +0 -0
  137. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of1.py +0 -0
  138. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of2.py +0 -0
  139. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of3.py +0 -0
  140. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of4.py +0 -0
  141. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_info.py +0 -0
  142. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/connection_info.py +0 -0
  143. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_connection_response.py +0 -0
  144. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_embedding_provider_response.py +0 -0
  145. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_workspace_response.py +0 -0
  146. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_attachment_info.py +0 -0
  147. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_batch_response.py +0 -0
  148. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_context_entry.py +0 -0
  149. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_count_response.py +0 -0
  150. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/delete_database_batch_response.py +0 -0
  151. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/discovery_status.py +0 -0
  152. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/embedding_provider_response.py +0 -0
  153. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/error.py +0 -0
  154. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_response.py +0 -0
  155. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/get_connection_response.py +0 -0
  156. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/get_database_context_response.py +0 -0
  157. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/index_status.py +0 -0
  158. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_connections_response.py +0 -0
  159. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_database_contexts_response.py +0 -0
  160. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_databases_response.py +0 -0
  161. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_embedding_providers_response.py +0 -0
  162. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_indexes_page_response.py +0 -0
  163. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_indexes_response.py +0 -0
  164. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_jobs_response.py +0 -0
  165. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_query_runs_response.py +0 -0
  166. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_results_response.py +0 -0
  167. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_saved_queries_response.py +0 -0
  168. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_saved_query_versions_response.py +0 -0
  169. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_workspaces_response.py +0 -0
  170. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/load_managed_table_response.py +0 -0
  171. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/managed_schema_response.py +0 -0
  172. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/managed_table_response.py +0 -0
  173. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/mint_upload_parts_response.py +0 -0
  174. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/minted_upload_part_response.py +0 -0
  175. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/numeric_profile_detail.py +0 -0
  176. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/result_info.py +0 -0
  177. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/results_format_query.py +0 -0
  178. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/saved_query_detail.py +0 -0
  179. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/saved_query_summary.py +0 -0
  180. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/saved_query_version_info.py +0 -0
  181. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/submit_job_response.py +0 -0
  182. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_profile_response.py +0 -0
  183. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/temporal_profile_detail.py +0 -0
  184. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/text_profile_detail.py +0 -0
  185. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/update_embedding_provider_response.py +0 -0
  186. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/upload_session_response.py +0 -0
  187. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/upsert_database_context_response.py +0 -0
  188. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/workspace_detail.py +0 -0
  189. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/workspace_list_item.py +0 -0
  190. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/py.typed +0 -0
  191. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/rest.py +0 -0
  192. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/uploads.py +0 -0
  193. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/dependency_links.txt +0 -0
  194. {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/top_level.txt +0 -0
  195. {hotdata-0.11.0 → hotdata-0.13.0}/setup.cfg +0 -0
  196. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_api_client_close.py +0 -0
  197. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_api_error_detail.py +0 -0
  198. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_api_error_response.py +0 -0
  199. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_async_query_response.py +0 -0
  200. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_attach_database_catalog_request.py +0 -0
  201. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_batch_create_upload_response.py +0 -0
  202. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_boolean_profile_detail.py +0 -0
  203. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_bulk_create_databases_result.py +0 -0
  204. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_categorical_profile_detail.py +0 -0
  205. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_category_value_info.py +0 -0
  206. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_definition.py +0 -0
  207. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_info.py +0 -0
  208. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail.py +0 -0
  209. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of.py +0 -0
  210. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of1.py +0 -0
  211. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of2.py +0 -0
  212. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of3.py +0 -0
  213. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of4.py +0 -0
  214. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_info.py +0 -0
  215. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_type_spec.py +0 -0
  216. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_connection_info.py +0 -0
  217. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_connection_response.py +0 -0
  218. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_embedding_provider_response.py +0 -0
  219. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_saved_query_request.py +0 -0
  220. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_upload_request.py +0 -0
  221. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_workspace_request.py +0 -0
  222. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_workspace_response.py +0 -0
  223. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_attachment_info.py +0 -0
  224. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_batch_response.py +0 -0
  225. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_context_api.py +0 -0
  226. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_context_entry.py +0 -0
  227. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_count_response.py +0 -0
  228. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_delete_database_batch_response.py +0 -0
  229. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_discovery_status.py +0 -0
  230. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_embedding_provider_response.py +0 -0
  231. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_embedding_providers_api.py +0 -0
  232. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_error.py +0 -0
  233. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_execute_saved_query_request.py +0 -0
  234. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_finalize_upload_part.py +0 -0
  235. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_finalize_upload_request.py +0 -0
  236. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_finalize_upload_response.py +0 -0
  237. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_get_connection_response.py +0 -0
  238. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_get_database_context_response.py +0 -0
  239. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_index_status.py +0 -0
  240. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_indexes_api.py +0 -0
  241. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_information_schema_api.py +0 -0
  242. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_status.py +0 -0
  243. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_status_response.py +0 -0
  244. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_type.py +0 -0
  245. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_jobs_api.py +0 -0
  246. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_connections_response.py +0 -0
  247. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_database_contexts_response.py +0 -0
  248. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_embedding_providers_response.py +0 -0
  249. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_indexes_page_response.py +0 -0
  250. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_jobs_response.py +0 -0
  251. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_query_runs_response.py +0 -0
  252. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_results_response.py +0 -0
  253. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_saved_queries_response.py +0 -0
  254. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_saved_query_versions_response.py +0 -0
  255. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_workspaces_response.py +0 -0
  256. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_load_managed_table_response.py +0 -0
  257. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_managed_schema_response.py +0 -0
  258. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_managed_table_response.py +0 -0
  259. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_mint_upload_parts_request.py +0 -0
  260. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_mint_upload_parts_response.py +0 -0
  261. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_minted_upload_part_response.py +0 -0
  262. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_numeric_profile_detail.py +0 -0
  263. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_api.py +0 -0
  264. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_response.py +0 -0
  265. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_run_info.py +0 -0
  266. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_runs_api.py +0 -0
  267. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_result_info.py +0 -0
  268. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_results_api.py +0 -0
  269. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_results_format_query.py +0 -0
  270. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_queries_api.py +0 -0
  271. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_query_detail.py +0 -0
  272. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_query_summary.py +0 -0
  273. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_query_version_info.py +0 -0
  274. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_submit_job_response.py +0 -0
  275. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_partition_key.py +0 -0
  276. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_profile_response.py +0 -0
  277. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_sort_key.py +0 -0
  278. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_temporal_profile_detail.py +0 -0
  279. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_text_profile_detail.py +0 -0
  280. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_update_embedding_provider_request.py +0 -0
  281. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_update_embedding_provider_response.py +0 -0
  282. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_update_saved_query_request.py +0 -0
  283. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_upload_session_response.py +0 -0
  284. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_uploads_api.py +0 -0
  285. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_upsert_database_context_request.py +0 -0
  286. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_upsert_database_context_response.py +0 -0
  287. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_usage_api.py +0 -0
  288. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspace_detail.py +0 -0
  289. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspace_list_item.py +0 -0
  290. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspace_usage_response.py +0 -0
  291. {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspaces_api.py +0 -0
  292. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_api_token_auth.py +0 -0
  293. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_arrow.py +0 -0
  294. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_config_auth_surface.py +0 -0
  295. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_request_defaults.py +0 -0
  296. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_retry.py +0 -0
  297. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_update_changelog.py +0 -0
  298. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_codex_fixes.py +0 -0
  299. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_multipart_resilient.py +0 -0
  300. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_parity_fixes.py +0 -0
  301. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_resilient.py +0 -0
  302. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_retry_policy.py +0 -0
  303. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_watchdog.py +0 -0
  304. {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_uploads.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hotdata
3
- Version: 0.11.0
3
+ Version: 0.13.0
4
4
  Summary: Hotdata API
5
5
  Author-email: Hotdata <developers@hotdata.dev>
6
6
  License: MIT
@@ -9,7 +9,7 @@ Project-URL: Repository, https://github.com/hotdata-dev/sdk-python
9
9
  Keywords: hotdata,api-client,data-platform
10
10
  Requires-Python: >=3.10
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: urllib3<3.0.0,>=2.7.0
12
+ Requires-Dist: urllib3<3.0.0,>=2.8.0
13
13
  Requires-Dist: python-dateutil>=2.8.2
14
14
  Requires-Dist: pydantic>=2.4.0
15
15
  Requires-Dist: typing-extensions>=4.7.1
@@ -55,7 +55,17 @@ configuration = hotdata.Configuration(
55
55
  )
56
56
  ```
57
57
 
58
- `host` defaults to `https://api.hotdata.dev`. Override it if you target another environment.
58
+ Each of these can come from the environment instead, the same variables the
59
+ CLI uses: `HOTDATA_API_KEY`, `HOTDATA_WORKSPACE` and `HOTDATA_API_URL` fill in
60
+ `api_key`, `workspace_id` and `host` when the argument is not passed. An
61
+ explicit argument always wins.
62
+
63
+ `host` defaults to `https://api.hotdata.dev`. Override it (or set
64
+ `HOTDATA_API_URL`) if you target another environment.
65
+
66
+ Almost every call is workspace-scoped. If no workspace id is configured, the
67
+ SDK raises `hotdata.MissingWorkspaceError` before sending the request rather
68
+ than letting the server answer with an unexplained 404.
59
69
 
60
70
  ## Usage
61
71
 
@@ -78,6 +88,25 @@ with hotdata.ApiClient(configuration) as api_client:
78
88
 
79
89
  Each `Api` class groups endpoints by resource. Construct the client, then call the typed methods you need.
80
90
 
91
+ ## Loading tables
92
+
93
+ Loads are serialised per table on the server. `hotdata.DatabasesApi` and
94
+ `hotdata.ConnectionsApi` retry a load that hits a table another load still
95
+ holds (HTTP 409, error code `RESOURCE_LOCKED`), honouring the server's
96
+ `Retry-After`, for up to 60s by default:
97
+
98
+ ```python
99
+ from hotdata import DatabasesApi, LoadRetryPolicy, TableLockedError
100
+
101
+ databases = DatabasesApi(api_client, load_retry=LoadRetryPolicy(deadline_s=120))
102
+ try:
103
+ databases.load_database_table(db_id, "public", "events", request)
104
+ except TableLockedError as e:
105
+ print(f"gave up after {e.attempts} attempts: {e.reason}")
106
+ ```
107
+
108
+ Other 409s (`CONFLICT`, `IDEMPOTENCY_KEY_CONFLICT`) are raised immediately.
109
+
81
110
  ## Arrow results
82
111
 
83
112
  Query results can be fetched as an [Apache Arrow](https://arrow.apache.org/) IPC stream instead of JSON, which is faster and far more memory-efficient for large result sets. Install the optional extra:
@@ -37,7 +37,17 @@ configuration = hotdata.Configuration(
37
37
  )
38
38
  ```
39
39
 
40
- `host` defaults to `https://api.hotdata.dev`. Override it if you target another environment.
40
+ Each of these can come from the environment instead, the same variables the
41
+ CLI uses: `HOTDATA_API_KEY`, `HOTDATA_WORKSPACE` and `HOTDATA_API_URL` fill in
42
+ `api_key`, `workspace_id` and `host` when the argument is not passed. An
43
+ explicit argument always wins.
44
+
45
+ `host` defaults to `https://api.hotdata.dev`. Override it (or set
46
+ `HOTDATA_API_URL`) if you target another environment.
47
+
48
+ Almost every call is workspace-scoped. If no workspace id is configured, the
49
+ SDK raises `hotdata.MissingWorkspaceError` before sending the request rather
50
+ than letting the server answer with an unexplained 404.
41
51
 
42
52
  ## Usage
43
53
 
@@ -60,6 +70,25 @@ with hotdata.ApiClient(configuration) as api_client:
60
70
 
61
71
  Each `Api` class groups endpoints by resource. Construct the client, then call the typed methods you need.
62
72
 
73
+ ## Loading tables
74
+
75
+ Loads are serialised per table on the server. `hotdata.DatabasesApi` and
76
+ `hotdata.ConnectionsApi` retry a load that hits a table another load still
77
+ holds (HTTP 409, error code `RESOURCE_LOCKED`), honouring the server's
78
+ `Retry-After`, for up to 60s by default:
79
+
80
+ ```python
81
+ from hotdata import DatabasesApi, LoadRetryPolicy, TableLockedError
82
+
83
+ databases = DatabasesApi(api_client, load_retry=LoadRetryPolicy(deadline_s=120))
84
+ try:
85
+ databases.load_database_table(db_id, "public", "events", request)
86
+ except TableLockedError as e:
87
+ print(f"gave up after {e.attempts} attempts: {e.reason}")
88
+ ```
89
+
90
+ Other 409s (`CONFLICT`, `IDEMPOTENCY_KEY_CONFLICT`) are raised immediately.
91
+
63
92
  ## Arrow results
64
93
 
65
94
  Query results can be fetched as an [Apache Arrow](https://arrow.apache.org/) IPC stream instead of JSON, which is faster and far more memory-efficient for large result sets. Install the optional extra:
@@ -90,6 +90,7 @@ __all__ = [
90
90
  "DatabaseDefaultSchemaDecl",
91
91
  "DatabaseDefaultTableDecl",
92
92
  "DatabaseDetailResponse",
93
+ "DatabaseLineageResponse",
93
94
  "DatabaseSummary",
94
95
  "DeleteDatabaseBatchResponse",
95
96
  "DiscoveryStatus",
@@ -100,6 +101,7 @@ __all__ = [
100
101
  "FinalizeUploadRequest",
101
102
  "FinalizeUploadResponse",
102
103
  "ForkDatabaseRequest",
104
+ "ForkedFromInfo",
103
105
  "GetConnectionResponse",
104
106
  "GetDatabaseContextResponse",
105
107
  "GetResultResponse",
@@ -111,6 +113,8 @@ __all__ = [
111
113
  "JobStatus",
112
114
  "JobStatusResponse",
113
115
  "JobType",
116
+ "LineageAncestorInfo",
117
+ "LineageForkInfo",
114
118
  "ListConnectionsResponse",
115
119
  "ListDatabaseContextsResponse",
116
120
  "ListDatabasesResponse",
@@ -126,6 +130,7 @@ __all__ = [
126
130
  "LoadManagedTableRequest",
127
131
  "LoadManagedTableResponse",
128
132
  "ManagedSchemaResponse",
133
+ "ManagedTableConstantPerKeyResponse",
129
134
  "ManagedTableResponse",
130
135
  "MintUploadPartsRequest",
131
136
  "MintUploadPartsResponse",
@@ -141,6 +146,7 @@ __all__ = [
141
146
  "SavedQueryVersionInfo",
142
147
  "SubmitJobResponse",
143
148
  "TableInfo",
149
+ "TableLayout",
144
150
  "TablePartitionKey",
145
151
  "TableProfileResponse",
146
152
  "TableSortKey",
@@ -148,6 +154,7 @@ __all__ = [
148
154
  "TextProfileDetail",
149
155
  "UpdateEmbeddingProviderRequest",
150
156
  "UpdateEmbeddingProviderResponse",
157
+ "UpdateManagedTableRequest",
151
158
  "UpdateSavedQueryRequest",
152
159
  "UploadSessionResponse",
153
160
  "UpsertDatabaseContextRequest",
@@ -228,6 +235,7 @@ from hotdata.models.database_count_response import DatabaseCountResponse as Data
228
235
  from hotdata.models.database_default_schema_decl import DatabaseDefaultSchemaDecl as DatabaseDefaultSchemaDecl
229
236
  from hotdata.models.database_default_table_decl import DatabaseDefaultTableDecl as DatabaseDefaultTableDecl
230
237
  from hotdata.models.database_detail_response import DatabaseDetailResponse as DatabaseDetailResponse
238
+ from hotdata.models.database_lineage_response import DatabaseLineageResponse as DatabaseLineageResponse
231
239
  from hotdata.models.database_summary import DatabaseSummary as DatabaseSummary
232
240
  from hotdata.models.delete_database_batch_response import DeleteDatabaseBatchResponse as DeleteDatabaseBatchResponse
233
241
  from hotdata.models.discovery_status import DiscoveryStatus as DiscoveryStatus
@@ -238,6 +246,7 @@ from hotdata.models.finalize_upload_part import FinalizeUploadPart as FinalizeUp
238
246
  from hotdata.models.finalize_upload_request import FinalizeUploadRequest as FinalizeUploadRequest
239
247
  from hotdata.models.finalize_upload_response import FinalizeUploadResponse as FinalizeUploadResponse
240
248
  from hotdata.models.fork_database_request import ForkDatabaseRequest as ForkDatabaseRequest
249
+ from hotdata.models.forked_from_info import ForkedFromInfo as ForkedFromInfo
241
250
  from hotdata.models.get_connection_response import GetConnectionResponse as GetConnectionResponse
242
251
  from hotdata.models.get_database_context_response import GetDatabaseContextResponse as GetDatabaseContextResponse
243
252
  from hotdata.models.get_result_response import GetResultResponse as GetResultResponse
@@ -249,6 +258,8 @@ from hotdata.models.job_result import JobResult as JobResult
249
258
  from hotdata.models.job_status import JobStatus as JobStatus
250
259
  from hotdata.models.job_status_response import JobStatusResponse as JobStatusResponse
251
260
  from hotdata.models.job_type import JobType as JobType
261
+ from hotdata.models.lineage_ancestor_info import LineageAncestorInfo as LineageAncestorInfo
262
+ from hotdata.models.lineage_fork_info import LineageForkInfo as LineageForkInfo
252
263
  from hotdata.models.list_connections_response import ListConnectionsResponse as ListConnectionsResponse
253
264
  from hotdata.models.list_database_contexts_response import ListDatabaseContextsResponse as ListDatabaseContextsResponse
254
265
  from hotdata.models.list_databases_response import ListDatabasesResponse as ListDatabasesResponse
@@ -264,6 +275,7 @@ from hotdata.models.list_workspaces_response import ListWorkspacesResponse as Li
264
275
  from hotdata.models.load_managed_table_request import LoadManagedTableRequest as LoadManagedTableRequest
265
276
  from hotdata.models.load_managed_table_response import LoadManagedTableResponse as LoadManagedTableResponse
266
277
  from hotdata.models.managed_schema_response import ManagedSchemaResponse as ManagedSchemaResponse
278
+ from hotdata.models.managed_table_constant_per_key_response import ManagedTableConstantPerKeyResponse as ManagedTableConstantPerKeyResponse
267
279
  from hotdata.models.managed_table_response import ManagedTableResponse as ManagedTableResponse
268
280
  from hotdata.models.mint_upload_parts_request import MintUploadPartsRequest as MintUploadPartsRequest
269
281
  from hotdata.models.mint_upload_parts_response import MintUploadPartsResponse as MintUploadPartsResponse
@@ -279,6 +291,7 @@ from hotdata.models.saved_query_summary import SavedQuerySummary as SavedQuerySu
279
291
  from hotdata.models.saved_query_version_info import SavedQueryVersionInfo as SavedQueryVersionInfo
280
292
  from hotdata.models.submit_job_response import SubmitJobResponse as SubmitJobResponse
281
293
  from hotdata.models.table_info import TableInfo as TableInfo
294
+ from hotdata.models.table_layout import TableLayout as TableLayout
282
295
  from hotdata.models.table_partition_key import TablePartitionKey as TablePartitionKey
283
296
  from hotdata.models.table_profile_response import TableProfileResponse as TableProfileResponse
284
297
  from hotdata.models.table_sort_key import TableSortKey as TableSortKey
@@ -286,6 +299,7 @@ from hotdata.models.temporal_profile_detail import TemporalProfileDetail as Temp
286
299
  from hotdata.models.text_profile_detail import TextProfileDetail as TextProfileDetail
287
300
  from hotdata.models.update_embedding_provider_request import UpdateEmbeddingProviderRequest as UpdateEmbeddingProviderRequest
288
301
  from hotdata.models.update_embedding_provider_response import UpdateEmbeddingProviderResponse as UpdateEmbeddingProviderResponse
302
+ from hotdata.models.update_managed_table_request import UpdateManagedTableRequest as UpdateManagedTableRequest
289
303
  from hotdata.models.update_saved_query_request import UpdateSavedQueryRequest as UpdateSavedQueryRequest
290
304
  from hotdata.models.upload_session_response import UploadSessionResponse as UploadSessionResponse
291
305
  from hotdata.models.upsert_database_context_request import UpsertDatabaseContextRequest as UpsertDatabaseContextRequest
@@ -300,10 +314,21 @@ from hotdata.models.workspace_usage_response import WorkspaceUsageResponse as Wo
300
314
  # hotdata.query.QueryApi adds 429 retry + truncation auto-follow;
301
315
  # hotdata.arrow.ResultsApi adds Arrow IPC result fetch;
302
316
  # hotdata.uploads.UploadsApi adds transparent presigned direct-to-storage
303
- # uploads. The raw generated classes remain importable from hotdata.api.*.
317
+ # uploads; hotdata.loads.DatabasesApi / ConnectionsApi retry table loads
318
+ # while another load holds the table (409 RESOURCE_LOCKED). The raw
319
+ # generated classes remain importable from hotdata.api.*.
304
320
  from hotdata.query import QueryApi as QueryApi # noqa: E402,F811
305
321
  from hotdata.arrow import ResultsApi as ResultsApi # noqa: E402,F811
306
322
  from hotdata.uploads import UploadsApi as UploadsApi # noqa: E402,F811
323
+ from hotdata.loads import DatabasesApi as DatabasesApi # noqa: E402,F811
324
+ from hotdata.loads import ConnectionsApi as ConnectionsApi # noqa: E402,F811
325
+ from hotdata.loads import ( # noqa: E402,F401
326
+ LoadRetryPolicy as LoadRetryPolicy,
327
+ TableLockedError as TableLockedError,
328
+ )
329
+ # Raised client-side (scripts/patch_workspace_guard.py) when a workspace-
330
+ # scoped call has no workspace id configured.
331
+ from hotdata._workspace import MissingWorkspaceError as MissingWorkspaceError # noqa: E402,F401
307
332
  # The upload error hierarchy + option/helper types, so `from hotdata import
308
333
  # UploadError` / `StorageError` / ... works (they otherwise live only under
309
334
  # hotdata.uploads and are invisible to autocomplete on `hotdata.`).
@@ -338,4 +363,7 @@ __all__ += [ # noqa: F405
338
363
  "UploadProgress",
339
364
  "UploadSource",
340
365
  "tqdm_progress",
366
+ "LoadRetryPolicy",
367
+ "TableLockedError",
368
+ "MissingWorkspaceError",
341
369
  ]
@@ -0,0 +1,84 @@
1
+ """Fail fast when a workspace-scoped request has no workspace to go to.
2
+
3
+ Most operations are scoped to a workspace through the ``X-Workspace-Id``
4
+ header (the ``WorkspaceId`` security scheme). The generated client simply
5
+ skips a scheme that has no configured value, so a ``Configuration`` built
6
+ without ``workspace_id`` sends the request anyway and the server answers with
7
+ a bare 404 that says nothing about what was missing.
8
+
9
+ :func:`ensure_workspace` runs before the request is sent (wired into
10
+ ``ApiClient.update_params_for_auth`` by ``scripts/patch_workspace_guard.py``)
11
+ and raises :class:`MissingWorkspaceError` naming the constructor argument and
12
+ the environment variable. Operations whose security does not list
13
+ ``WorkspaceId`` (workspace management itself) are unaffected, as are calls
14
+ that supply the header explicitly or override auth per request.
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ from typing import Any, Iterable, Mapping, Optional
20
+
21
+ from hotdata.exceptions import ApiValueError
22
+
23
+ WORKSPACE_SCHEME = "WorkspaceId"
24
+ WORKSPACE_HEADER = "X-Workspace-Id"
25
+
26
+
27
+ class MissingWorkspaceError(ApiValueError):
28
+ """Raised before sending a workspace-scoped request when no workspace id
29
+ is configured.
30
+
31
+ Pass ``workspace_id=`` to :class:`hotdata.Configuration`, set the
32
+ ``HOTDATA_WORKSPACE`` environment variable, or send the ``X-Workspace-Id``
33
+ header explicitly for the call.
34
+ """
35
+
36
+ def __init__(self, resource_path: str, method: str) -> None:
37
+ self.resource_path = resource_path
38
+ self.method = method
39
+ super().__init__(
40
+ f"{method} {resource_path} is scoped to a workspace but no workspace id "
41
+ "is configured. Pass workspace_id=... to hotdata.Configuration(...), "
42
+ "set the HOTDATA_WORKSPACE environment variable, or send the "
43
+ f"{WORKSPACE_HEADER} header explicitly (_headers=...)."
44
+ )
45
+
46
+
47
+ def ensure_workspace(
48
+ configuration: Any,
49
+ auth_settings: Optional[Iterable[str]],
50
+ headers: Optional[Mapping[str, Any]],
51
+ resource_path: str,
52
+ method: str,
53
+ request_auth: Optional[Mapping[str, Any]] = None,
54
+ ) -> None:
55
+ """Raise :class:`MissingWorkspaceError` if the operation needs a workspace
56
+ id and none would be sent.
57
+
58
+ :param configuration: The client's :class:`hotdata.Configuration`.
59
+ :param auth_settings: The operation's security scheme names.
60
+ :param headers: Header params already assembled for the request.
61
+ :param request_auth: A per-request auth override; when given the
62
+ configuration is bypassed entirely, so the check is skipped.
63
+ """
64
+ if request_auth:
65
+ return
66
+ if not auth_settings or WORKSPACE_SCHEME not in auth_settings:
67
+ return
68
+ if headers and any(
69
+ str(name).lower() == WORKSPACE_HEADER.lower() for name in headers
70
+ ):
71
+ return
72
+ settings = configuration.auth_settings()
73
+ scheme = settings.get(WORKSPACE_SCHEME) if settings else None
74
+ if scheme and scheme.get("value"):
75
+ return
76
+ raise MissingWorkspaceError(resource_path, method)
77
+
78
+
79
+ __all__ = [
80
+ "WORKSPACE_HEADER",
81
+ "WORKSPACE_SCHEME",
82
+ "MissingWorkspaceError",
83
+ "ensure_workspace",
84
+ ]