hotdata 0.6.0__tar.gz → 0.8.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 (313) hide show
  1. {hotdata-0.6.0 → hotdata-0.8.0}/PKG-INFO +1 -1
  2. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/__init__.py +2 -0
  3. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/connections_api.py +6 -6
  4. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/databases_api.py +306 -9
  5. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/__init__.py +1 -0
  6. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/add_managed_table_decl.py +5 -3
  7. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/add_managed_table_request.py +5 -3
  8. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_database_request.py +9 -2
  9. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_database_response.py +3 -1
  10. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/database_default_table_decl.py +5 -3
  11. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/database_detail_response.py +10 -1
  12. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/database_summary.py +10 -1
  13. hotdata-0.8.0/hotdata/models/fork_database_request.py +100 -0
  14. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/load_managed_table_request.py +24 -5
  15. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/workspace_usage_response.py +1 -1
  16. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata.egg-info/PKG-INFO +1 -1
  17. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata.egg-info/SOURCES.txt +2 -0
  18. {hotdata-0.6.0 → hotdata-0.8.0}/pyproject.toml +1 -1
  19. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_add_managed_schema_request.py +3 -0
  20. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_add_managed_table_decl.py +3 -0
  21. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_add_managed_table_request.py +3 -0
  22. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connections_api.py +1 -1
  23. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_database_request.py +4 -0
  24. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_database_response.py +2 -0
  25. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_default_schema_decl.py +3 -0
  26. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_default_table_decl.py +3 -0
  27. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_detail_response.py +3 -0
  28. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_summary.py +3 -0
  29. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_databases_api.py +8 -1
  30. hotdata-0.8.0/test/test_fork_database_request.py +53 -0
  31. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_databases_response.py +4 -0
  32. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_load_managed_table_request.py +4 -1
  33. {hotdata-0.6.0 → hotdata-0.8.0}/README.md +0 -0
  34. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/_auth.py +0 -0
  35. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/_retry.py +0 -0
  36. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/_upload_watchdog.py +0 -0
  37. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/__init__.py +0 -0
  38. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/connection_types_api.py +0 -0
  39. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/database_context_api.py +0 -0
  40. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/embedding_providers_api.py +0 -0
  41. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/indexes_api.py +0 -0
  42. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/information_schema_api.py +0 -0
  43. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/jobs_api.py +0 -0
  44. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/query_api.py +0 -0
  45. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/query_runs_api.py +0 -0
  46. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/refresh_api.py +0 -0
  47. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/results_api.py +0 -0
  48. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/saved_queries_api.py +0 -0
  49. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/secrets_api.py +0 -0
  50. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/uploads_api.py +0 -0
  51. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/usage_api.py +0 -0
  52. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api/workspaces_api.py +0 -0
  53. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api_client.py +0 -0
  54. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/api_response.py +0 -0
  55. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/arrow.py +0 -0
  56. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/configuration.py +0 -0
  57. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/exceptions.py +0 -0
  58. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/add_managed_schema_request.py +0 -0
  59. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/api_error_detail.py +0 -0
  60. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/api_error_response.py +0 -0
  61. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/async_query_response.py +0 -0
  62. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/attach_database_catalog_request.py +0 -0
  63. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/batch_create_upload_request.py +0 -0
  64. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/batch_create_upload_response.py +0 -0
  65. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/boolean_profile_detail.py +0 -0
  66. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/categorical_profile_detail.py +0 -0
  67. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/category_value_info.py +0 -0
  68. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_info.py +0 -0
  69. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_detail.py +0 -0
  70. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_detail_one_of.py +0 -0
  71. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_detail_one_of1.py +0 -0
  72. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_detail_one_of2.py +0 -0
  73. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_detail_one_of3.py +0 -0
  74. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_detail_one_of4.py +0 -0
  75. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/column_profile_info.py +0 -0
  76. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/connection_health_response.py +0 -0
  77. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/connection_info.py +0 -0
  78. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/connection_refresh_result.py +0 -0
  79. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/connection_schema_error.py +0 -0
  80. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/connection_type_detail.py +0 -0
  81. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/connection_type_summary.py +0 -0
  82. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_connection_request.py +0 -0
  83. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_connection_response.py +0 -0
  84. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_embedding_provider_request.py +0 -0
  85. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_embedding_provider_response.py +0 -0
  86. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_index_request.py +0 -0
  87. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_saved_query_request.py +0 -0
  88. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_secret_request.py +0 -0
  89. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_secret_response.py +0 -0
  90. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_upload_request.py +0 -0
  91. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_workspace_request.py +0 -0
  92. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/create_workspace_response.py +0 -0
  93. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/database_attachment_info.py +0 -0
  94. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/database_context_entry.py +0 -0
  95. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/database_default_schema_decl.py +0 -0
  96. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/discovery_status.py +0 -0
  97. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/embedding_provider_response.py +0 -0
  98. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/error.py +0 -0
  99. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/execute_saved_query_request.py +0 -0
  100. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/finalize_upload_part.py +0 -0
  101. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/finalize_upload_request.py +0 -0
  102. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/finalize_upload_response.py +0 -0
  103. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/get_connection_response.py +0 -0
  104. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/get_database_context_response.py +0 -0
  105. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/get_result_response.py +0 -0
  106. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/get_secret_response.py +0 -0
  107. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/index_entry_response.py +0 -0
  108. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/index_info_response.py +0 -0
  109. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/index_status.py +0 -0
  110. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/information_schema_response.py +0 -0
  111. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/job_result.py +0 -0
  112. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/job_status.py +0 -0
  113. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/job_status_response.py +0 -0
  114. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/job_type.py +0 -0
  115. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_connection_types_response.py +0 -0
  116. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_connections_response.py +0 -0
  117. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_database_contexts_response.py +0 -0
  118. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_databases_response.py +0 -0
  119. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_embedding_providers_response.py +0 -0
  120. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_indexes_page_response.py +0 -0
  121. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_indexes_response.py +0 -0
  122. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_jobs_response.py +0 -0
  123. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_query_runs_response.py +0 -0
  124. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_results_response.py +0 -0
  125. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_saved_queries_response.py +0 -0
  126. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_saved_query_versions_response.py +0 -0
  127. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_secrets_response.py +0 -0
  128. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_uploads_response.py +0 -0
  129. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/list_workspaces_response.py +0 -0
  130. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/load_managed_table_response.py +0 -0
  131. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/managed_schema_response.py +0 -0
  132. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/managed_table_response.py +0 -0
  133. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/mint_upload_parts_request.py +0 -0
  134. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/mint_upload_parts_response.py +0 -0
  135. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/minted_upload_part_response.py +0 -0
  136. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/numeric_profile_detail.py +0 -0
  137. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/query_request.py +0 -0
  138. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/query_response.py +0 -0
  139. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/query_run_info.py +0 -0
  140. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/refresh_request.py +0 -0
  141. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/refresh_response.py +0 -0
  142. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/refresh_warning.py +0 -0
  143. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/result_info.py +0 -0
  144. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/results_format_query.py +0 -0
  145. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/saved_query_detail.py +0 -0
  146. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/saved_query_summary.py +0 -0
  147. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/saved_query_version_info.py +0 -0
  148. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/schema_refresh_result.py +0 -0
  149. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/secret_metadata_response.py +0 -0
  150. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/submit_job_response.py +0 -0
  151. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/table_info.py +0 -0
  152. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/table_profile_response.py +0 -0
  153. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/table_refresh_error.py +0 -0
  154. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/table_refresh_result.py +0 -0
  155. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/temporal_profile_detail.py +0 -0
  156. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/text_profile_detail.py +0 -0
  157. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/update_embedding_provider_request.py +0 -0
  158. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/update_embedding_provider_response.py +0 -0
  159. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/update_saved_query_request.py +0 -0
  160. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/update_secret_request.py +0 -0
  161. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/update_secret_response.py +0 -0
  162. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/upload_info.py +0 -0
  163. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/upload_response.py +0 -0
  164. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/upload_session_response.py +0 -0
  165. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/upsert_database_context_request.py +0 -0
  166. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/upsert_database_context_response.py +0 -0
  167. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/workspace_detail.py +0 -0
  168. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/models/workspace_list_item.py +0 -0
  169. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/py.typed +0 -0
  170. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/query.py +0 -0
  171. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/rest.py +0 -0
  172. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata/uploads.py +0 -0
  173. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata.egg-info/dependency_links.txt +0 -0
  174. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata.egg-info/requires.txt +0 -0
  175. {hotdata-0.6.0 → hotdata-0.8.0}/hotdata.egg-info/top_level.txt +0 -0
  176. {hotdata-0.6.0 → hotdata-0.8.0}/setup.cfg +0 -0
  177. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_api_client_close.py +0 -0
  178. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_api_error_detail.py +0 -0
  179. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_api_error_response.py +0 -0
  180. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_async_query_response.py +0 -0
  181. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_attach_database_catalog_request.py +0 -0
  182. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_batch_create_upload_request.py +0 -0
  183. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_batch_create_upload_response.py +0 -0
  184. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_boolean_profile_detail.py +0 -0
  185. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_categorical_profile_detail.py +0 -0
  186. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_category_value_info.py +0 -0
  187. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_info.py +0 -0
  188. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_detail.py +0 -0
  189. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_detail_one_of.py +0 -0
  190. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_detail_one_of1.py +0 -0
  191. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_detail_one_of2.py +0 -0
  192. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_detail_one_of3.py +0 -0
  193. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_detail_one_of4.py +0 -0
  194. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_column_profile_info.py +0 -0
  195. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_health_response.py +0 -0
  196. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_info.py +0 -0
  197. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_refresh_result.py +0 -0
  198. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_schema_error.py +0 -0
  199. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_type_detail.py +0 -0
  200. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_type_summary.py +0 -0
  201. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_connection_types_api.py +0 -0
  202. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_connection_request.py +0 -0
  203. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_connection_response.py +0 -0
  204. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_embedding_provider_request.py +0 -0
  205. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_embedding_provider_response.py +0 -0
  206. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_index_request.py +0 -0
  207. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_saved_query_request.py +0 -0
  208. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_secret_request.py +0 -0
  209. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_secret_response.py +0 -0
  210. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_upload_request.py +0 -0
  211. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_workspace_request.py +0 -0
  212. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_create_workspace_response.py +0 -0
  213. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_attachment_info.py +0 -0
  214. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_context_api.py +0 -0
  215. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_database_context_entry.py +0 -0
  216. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_discovery_status.py +0 -0
  217. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_embedding_provider_response.py +0 -0
  218. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_embedding_providers_api.py +0 -0
  219. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_error.py +0 -0
  220. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_execute_saved_query_request.py +0 -0
  221. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_finalize_upload_part.py +0 -0
  222. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_finalize_upload_request.py +0 -0
  223. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_finalize_upload_response.py +0 -0
  224. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_get_connection_response.py +0 -0
  225. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_get_database_context_response.py +0 -0
  226. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_get_result_response.py +0 -0
  227. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_get_secret_response.py +0 -0
  228. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_index_entry_response.py +0 -0
  229. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_index_info_response.py +0 -0
  230. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_index_status.py +0 -0
  231. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_indexes_api.py +0 -0
  232. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_information_schema_api.py +0 -0
  233. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_information_schema_response.py +0 -0
  234. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_job_result.py +0 -0
  235. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_job_status.py +0 -0
  236. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_job_status_response.py +0 -0
  237. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_job_type.py +0 -0
  238. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_jobs_api.py +0 -0
  239. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_connection_types_response.py +0 -0
  240. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_connections_response.py +0 -0
  241. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_database_contexts_response.py +0 -0
  242. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_embedding_providers_response.py +0 -0
  243. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_indexes_page_response.py +0 -0
  244. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_indexes_response.py +0 -0
  245. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_jobs_response.py +0 -0
  246. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_query_runs_response.py +0 -0
  247. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_results_response.py +0 -0
  248. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_saved_queries_response.py +0 -0
  249. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_saved_query_versions_response.py +0 -0
  250. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_secrets_response.py +0 -0
  251. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_uploads_response.py +0 -0
  252. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_list_workspaces_response.py +0 -0
  253. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_load_managed_table_response.py +0 -0
  254. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_managed_schema_response.py +0 -0
  255. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_managed_table_response.py +0 -0
  256. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_mint_upload_parts_request.py +0 -0
  257. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_mint_upload_parts_response.py +0 -0
  258. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_minted_upload_part_response.py +0 -0
  259. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_numeric_profile_detail.py +0 -0
  260. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_query_api.py +0 -0
  261. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_query_request.py +0 -0
  262. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_query_response.py +0 -0
  263. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_query_run_info.py +0 -0
  264. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_query_runs_api.py +0 -0
  265. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_refresh_api.py +0 -0
  266. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_refresh_request.py +0 -0
  267. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_refresh_response.py +0 -0
  268. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_refresh_warning.py +0 -0
  269. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_result_info.py +0 -0
  270. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_results_api.py +0 -0
  271. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_results_format_query.py +0 -0
  272. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_saved_queries_api.py +0 -0
  273. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_saved_query_detail.py +0 -0
  274. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_saved_query_summary.py +0 -0
  275. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_saved_query_version_info.py +0 -0
  276. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_schema_refresh_result.py +0 -0
  277. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_secret_metadata_response.py +0 -0
  278. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_secrets_api.py +0 -0
  279. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_submit_job_response.py +0 -0
  280. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_table_info.py +0 -0
  281. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_table_profile_response.py +0 -0
  282. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_table_refresh_error.py +0 -0
  283. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_table_refresh_result.py +0 -0
  284. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_temporal_profile_detail.py +0 -0
  285. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_text_profile_detail.py +0 -0
  286. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_update_embedding_provider_request.py +0 -0
  287. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_update_embedding_provider_response.py +0 -0
  288. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_update_saved_query_request.py +0 -0
  289. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_update_secret_request.py +0 -0
  290. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_update_secret_response.py +0 -0
  291. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_upload_info.py +0 -0
  292. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_upload_response.py +0 -0
  293. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_upload_session_response.py +0 -0
  294. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_uploads_api.py +0 -0
  295. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_upsert_database_context_request.py +0 -0
  296. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_upsert_database_context_response.py +0 -0
  297. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_usage_api.py +0 -0
  298. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_workspace_detail.py +0 -0
  299. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_workspace_list_item.py +0 -0
  300. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_workspace_usage_response.py +0 -0
  301. {hotdata-0.6.0 → hotdata-0.8.0}/test/test_workspaces_api.py +0 -0
  302. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_arrow.py +0 -0
  303. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_auth.py +0 -0
  304. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_query.py +0 -0
  305. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_retry.py +0 -0
  306. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_update_changelog.py +0 -0
  307. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_upload_codex_fixes.py +0 -0
  308. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_upload_multipart_resilient.py +0 -0
  309. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_upload_parity_fixes.py +0 -0
  310. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_upload_resilient.py +0 -0
  311. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_upload_retry_policy.py +0 -0
  312. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_upload_watchdog.py +0 -0
  313. {hotdata-0.6.0 → hotdata-0.8.0}/tests/test_uploads.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hotdata
3
- Version: 0.6.0
3
+ Version: 0.8.0
4
4
  Summary: Hotdata API
5
5
  Author-email: Hotdata <developers@hotdata.dev>
6
6
  License: MIT
@@ -102,6 +102,7 @@ __all__ = [
102
102
  "FinalizeUploadPart",
103
103
  "FinalizeUploadRequest",
104
104
  "FinalizeUploadResponse",
105
+ "ForkDatabaseRequest",
105
106
  "GetConnectionResponse",
106
107
  "GetDatabaseContextResponse",
107
108
  "GetResultResponse",
@@ -255,6 +256,7 @@ from hotdata.models.execute_saved_query_request import ExecuteSavedQueryRequest
255
256
  from hotdata.models.finalize_upload_part import FinalizeUploadPart as FinalizeUploadPart
256
257
  from hotdata.models.finalize_upload_request import FinalizeUploadRequest as FinalizeUploadRequest
257
258
  from hotdata.models.finalize_upload_response import FinalizeUploadResponse as FinalizeUploadResponse
259
+ from hotdata.models.fork_database_request import ForkDatabaseRequest as ForkDatabaseRequest
258
260
  from hotdata.models.get_connection_response import GetConnectionResponse as GetConnectionResponse
259
261
  from hotdata.models.get_database_context_response import GetDatabaseContextResponse as GetDatabaseContextResponse
260
262
  from hotdata.models.get_result_response import GetResultResponse as GetResultResponse
@@ -2601,9 +2601,9 @@ class ConnectionsApi:
2601
2601
  _headers: Optional[Dict[StrictStr, Any]] = None,
2602
2602
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2603
2603
  ) -> LoadManagedTableResponse:
2604
- """Load managed table from upload
2604
+ """Load managed table from upload or query result
2605
2605
 
2606
- Publish a previously-uploaded file as the new contents of a managed table. CSV, JSON, and Parquet uploads are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the upload is applied: `replace` overwrites the table's contents, `append` inserts the uploaded rows on top of the existing data. Concurrent loads against the same upload return 409. Set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID.
2606
+ Publish data as the new contents of a managed table from one of two sources — provide exactly one. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
2607
2607
 
2608
2608
  :param connection_id: Connection ID (required)
2609
2609
  :type connection_id: str
@@ -2684,9 +2684,9 @@ class ConnectionsApi:
2684
2684
  _headers: Optional[Dict[StrictStr, Any]] = None,
2685
2685
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2686
2686
  ) -> ApiResponse[LoadManagedTableResponse]:
2687
- """Load managed table from upload
2687
+ """Load managed table from upload or query result
2688
2688
 
2689
- Publish a previously-uploaded file as the new contents of a managed table. CSV, JSON, and Parquet uploads are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the upload is applied: `replace` overwrites the table's contents, `append` inserts the uploaded rows on top of the existing data. Concurrent loads against the same upload return 409. Set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID.
2689
+ Publish data as the new contents of a managed table from one of two sources — provide exactly one. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
2690
2690
 
2691
2691
  :param connection_id: Connection ID (required)
2692
2692
  :type connection_id: str
@@ -2767,9 +2767,9 @@ class ConnectionsApi:
2767
2767
  _headers: Optional[Dict[StrictStr, Any]] = None,
2768
2768
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2769
2769
  ) -> RESTResponseType:
2770
- """Load managed table from upload
2770
+ """Load managed table from upload or query result
2771
2771
 
2772
- Publish a previously-uploaded file as the new contents of a managed table. CSV, JSON, and Parquet uploads are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the upload is applied: `replace` overwrites the table's contents, `append` inserts the uploaded rows on top of the existing data. Concurrent loads against the same upload return 409. Set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID.
2772
+ Publish data as the new contents of a managed table from one of two sources — provide exactly one. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected from the upload's `Content-Type` and file contents, or set explicitly via the `format` field. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires; a result can be loaded into any number of tables. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
2773
2773
 
2774
2774
  :param connection_id: Connection ID (required)
2775
2775
  :type connection_id: str
@@ -24,6 +24,7 @@ from hotdata.models.attach_database_catalog_request import AttachDatabaseCatalog
24
24
  from hotdata.models.create_database_request import CreateDatabaseRequest
25
25
  from hotdata.models.create_database_response import CreateDatabaseResponse
26
26
  from hotdata.models.database_detail_response import DatabaseDetailResponse
27
+ from hotdata.models.fork_database_request import ForkDatabaseRequest
27
28
  from hotdata.models.list_databases_response import ListDatabasesResponse
28
29
  from hotdata.models.load_managed_table_request import LoadManagedTableRequest
29
30
  from hotdata.models.load_managed_table_response import LoadManagedTableResponse
@@ -979,7 +980,7 @@ class DatabasesApi:
979
980
  ) -> CreateDatabaseResponse:
980
981
  """Create database
981
982
 
982
- Create a new database (a metadata-only grouping). A managed default catalog is auto-created and addressable inside the database as `default` (or the optional `default_catalog` name), with a `main` schema pre-declared so `default.main.<table>` works out of the box. The optional `name` is a free-form display label and is not required to be unique. Optional `default_catalog` overrides the name the default catalog answers to; it must be a valid SQL identifier and may not collide with the reserved catalog names `hotdata`, `datasets`, or `information_schema`. Optional `schemas` declares additional schemas/tables on the default catalog at create time; declared tables can be loaded via the standard managed-tables-load endpoint targeting `default_connection_id`. Optional `expires_at` sets when the database expires — accepts either an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `48h`, `90m`, `7d`. When omitted, the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.
983
+ Create a new database (a metadata-only grouping). A managed default catalog is auto-created and addressable inside the database as `default` (or the optional `default_catalog` name), with a `main` schema pre-declared so `default.main.<table>` works out of the box. The optional `name` is a free-form display label and is not required to be unique. Optional `default_catalog` overrides the name the default catalog answers to; it must be a valid SQL identifier and may not collide with the reserved catalog names `hotdata` or `information_schema`. Optional `schemas` declares additional schemas/tables on the default catalog at create time; declared tables can be loaded via the standard managed-tables-load endpoint targeting `default_connection_id`. Optional `expires_at` sets when the database expires — accepts either an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `48h`, `90m`, `7d`. When omitted, the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.
983
984
 
984
985
  :param create_database_request: (required)
985
986
  :type create_database_request: CreateDatabaseRequest
@@ -1048,7 +1049,7 @@ class DatabasesApi:
1048
1049
  ) -> ApiResponse[CreateDatabaseResponse]:
1049
1050
  """Create database
1050
1051
 
1051
- Create a new database (a metadata-only grouping). A managed default catalog is auto-created and addressable inside the database as `default` (or the optional `default_catalog` name), with a `main` schema pre-declared so `default.main.<table>` works out of the box. The optional `name` is a free-form display label and is not required to be unique. Optional `default_catalog` overrides the name the default catalog answers to; it must be a valid SQL identifier and may not collide with the reserved catalog names `hotdata`, `datasets`, or `information_schema`. Optional `schemas` declares additional schemas/tables on the default catalog at create time; declared tables can be loaded via the standard managed-tables-load endpoint targeting `default_connection_id`. Optional `expires_at` sets when the database expires — accepts either an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `48h`, `90m`, `7d`. When omitted, the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.
1052
+ Create a new database (a metadata-only grouping). A managed default catalog is auto-created and addressable inside the database as `default` (or the optional `default_catalog` name), with a `main` schema pre-declared so `default.main.<table>` works out of the box. The optional `name` is a free-form display label and is not required to be unique. Optional `default_catalog` overrides the name the default catalog answers to; it must be a valid SQL identifier and may not collide with the reserved catalog names `hotdata` or `information_schema`. Optional `schemas` declares additional schemas/tables on the default catalog at create time; declared tables can be loaded via the standard managed-tables-load endpoint targeting `default_connection_id`. Optional `expires_at` sets when the database expires — accepts either an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `48h`, `90m`, `7d`. When omitted, the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.
1052
1053
 
1053
1054
  :param create_database_request: (required)
1054
1055
  :type create_database_request: CreateDatabaseRequest
@@ -1117,7 +1118,7 @@ class DatabasesApi:
1117
1118
  ) -> RESTResponseType:
1118
1119
  """Create database
1119
1120
 
1120
- Create a new database (a metadata-only grouping). A managed default catalog is auto-created and addressable inside the database as `default` (or the optional `default_catalog` name), with a `main` schema pre-declared so `default.main.<table>` works out of the box. The optional `name` is a free-form display label and is not required to be unique. Optional `default_catalog` overrides the name the default catalog answers to; it must be a valid SQL identifier and may not collide with the reserved catalog names `hotdata`, `datasets`, or `information_schema`. Optional `schemas` declares additional schemas/tables on the default catalog at create time; declared tables can be loaded via the standard managed-tables-load endpoint targeting `default_connection_id`. Optional `expires_at` sets when the database expires — accepts either an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `48h`, `90m`, `7d`. When omitted, the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.
1121
+ Create a new database (a metadata-only grouping). A managed default catalog is auto-created and addressable inside the database as `default` (or the optional `default_catalog` name), with a `main` schema pre-declared so `default.main.<table>` works out of the box. The optional `name` is a free-form display label and is not required to be unique. Optional `default_catalog` overrides the name the default catalog answers to; it must be a valid SQL identifier and may not collide with the reserved catalog names `hotdata` or `information_schema`. Optional `schemas` declares additional schemas/tables on the default catalog at create time; declared tables can be loaded via the standard managed-tables-load endpoint targeting `default_connection_id`. Optional `expires_at` sets when the database expires — accepts either an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `48h`, `90m`, `7d`. When omitted, the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.
1121
1122
 
1122
1123
  :param create_database_request: (required)
1123
1124
  :type create_database_request: CreateDatabaseRequest
@@ -1786,6 +1787,302 @@ class DatabasesApi:
1786
1787
 
1787
1788
 
1788
1789
 
1790
+ @validate_call
1791
+ def fork_database(
1792
+ self,
1793
+ database_id: Annotated[StrictStr, Field(description="Source database ID")],
1794
+ fork_database_request: ForkDatabaseRequest,
1795
+ _request_timeout: Union[
1796
+ None,
1797
+ Annotated[StrictFloat, Field(gt=0)],
1798
+ Tuple[
1799
+ Annotated[StrictFloat, Field(gt=0)],
1800
+ Annotated[StrictFloat, Field(gt=0)]
1801
+ ]
1802
+ ] = None,
1803
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1804
+ _content_type: Optional[StrictStr] = None,
1805
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1806
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1807
+ ) -> CreateDatabaseResponse:
1808
+ """Fork database
1809
+
1810
+ Create a new database that is an independent fork of an existing one. The fork has its own default catalog and contains the same schemas, tables, and data as the source; the source is left unchanged. External catalogs attached to the source are re-attached to the fork. Optional `name` sets the fork's display label (defaults to the source's). Optional `expires_at` sets when the fork expires — accepts an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `90m`, `7d`. When omitted, a still-future expiry on the source is carried over; otherwise the fork never expires. Any indexes on the source's tables are not carried over.
1811
+
1812
+ :param database_id: Source database ID (required)
1813
+ :type database_id: str
1814
+ :param fork_database_request: (required)
1815
+ :type fork_database_request: ForkDatabaseRequest
1816
+ :param _request_timeout: timeout setting for this request. If one
1817
+ number provided, it will be total request
1818
+ timeout. It can also be a pair (tuple) of
1819
+ (connection, read) timeouts.
1820
+ :type _request_timeout: int, tuple(int, int), optional
1821
+ :param _request_auth: set to override the auth_settings for an a single
1822
+ request; this effectively ignores the
1823
+ authentication in the spec for a single request.
1824
+ :type _request_auth: dict, optional
1825
+ :param _content_type: force content-type for the request.
1826
+ :type _content_type: str, Optional
1827
+ :param _headers: set to override the headers for a single
1828
+ request; this effectively ignores the headers
1829
+ in the spec for a single request.
1830
+ :type _headers: dict, optional
1831
+ :param _host_index: set to override the host_index for a single
1832
+ request; this effectively ignores the host_index
1833
+ in the spec for a single request.
1834
+ :type _host_index: int, optional
1835
+ :return: Returns the result object.
1836
+ """ # noqa: E501
1837
+
1838
+ _param = self._fork_database_serialize(
1839
+ database_id=database_id,
1840
+ fork_database_request=fork_database_request,
1841
+ _request_auth=_request_auth,
1842
+ _content_type=_content_type,
1843
+ _headers=_headers,
1844
+ _host_index=_host_index
1845
+ )
1846
+
1847
+ _response_types_map: Dict[str, Optional[str]] = {
1848
+ '201': "CreateDatabaseResponse",
1849
+ '400': "ApiErrorResponse",
1850
+ '404': "ApiErrorResponse",
1851
+ }
1852
+ response_data = self.api_client.call_api(
1853
+ *_param,
1854
+ _request_timeout=_request_timeout
1855
+ )
1856
+ response_data.read()
1857
+ return self.api_client.response_deserialize(
1858
+ response_data=response_data,
1859
+ response_types_map=_response_types_map,
1860
+ ).data
1861
+
1862
+
1863
+ @validate_call
1864
+ def fork_database_with_http_info(
1865
+ self,
1866
+ database_id: Annotated[StrictStr, Field(description="Source database ID")],
1867
+ fork_database_request: ForkDatabaseRequest,
1868
+ _request_timeout: Union[
1869
+ None,
1870
+ Annotated[StrictFloat, Field(gt=0)],
1871
+ Tuple[
1872
+ Annotated[StrictFloat, Field(gt=0)],
1873
+ Annotated[StrictFloat, Field(gt=0)]
1874
+ ]
1875
+ ] = None,
1876
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1877
+ _content_type: Optional[StrictStr] = None,
1878
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1879
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1880
+ ) -> ApiResponse[CreateDatabaseResponse]:
1881
+ """Fork database
1882
+
1883
+ Create a new database that is an independent fork of an existing one. The fork has its own default catalog and contains the same schemas, tables, and data as the source; the source is left unchanged. External catalogs attached to the source are re-attached to the fork. Optional `name` sets the fork's display label (defaults to the source's). Optional `expires_at` sets when the fork expires — accepts an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `90m`, `7d`. When omitted, a still-future expiry on the source is carried over; otherwise the fork never expires. Any indexes on the source's tables are not carried over.
1884
+
1885
+ :param database_id: Source database ID (required)
1886
+ :type database_id: str
1887
+ :param fork_database_request: (required)
1888
+ :type fork_database_request: ForkDatabaseRequest
1889
+ :param _request_timeout: timeout setting for this request. If one
1890
+ number provided, it will be total request
1891
+ timeout. It can also be a pair (tuple) of
1892
+ (connection, read) timeouts.
1893
+ :type _request_timeout: int, tuple(int, int), optional
1894
+ :param _request_auth: set to override the auth_settings for an a single
1895
+ request; this effectively ignores the
1896
+ authentication in the spec for a single request.
1897
+ :type _request_auth: dict, optional
1898
+ :param _content_type: force content-type for the request.
1899
+ :type _content_type: str, Optional
1900
+ :param _headers: set to override the headers for a single
1901
+ request; this effectively ignores the headers
1902
+ in the spec for a single request.
1903
+ :type _headers: dict, optional
1904
+ :param _host_index: set to override the host_index for a single
1905
+ request; this effectively ignores the host_index
1906
+ in the spec for a single request.
1907
+ :type _host_index: int, optional
1908
+ :return: Returns the result object.
1909
+ """ # noqa: E501
1910
+
1911
+ _param = self._fork_database_serialize(
1912
+ database_id=database_id,
1913
+ fork_database_request=fork_database_request,
1914
+ _request_auth=_request_auth,
1915
+ _content_type=_content_type,
1916
+ _headers=_headers,
1917
+ _host_index=_host_index
1918
+ )
1919
+
1920
+ _response_types_map: Dict[str, Optional[str]] = {
1921
+ '201': "CreateDatabaseResponse",
1922
+ '400': "ApiErrorResponse",
1923
+ '404': "ApiErrorResponse",
1924
+ }
1925
+ response_data = self.api_client.call_api(
1926
+ *_param,
1927
+ _request_timeout=_request_timeout
1928
+ )
1929
+ response_data.read()
1930
+ return self.api_client.response_deserialize(
1931
+ response_data=response_data,
1932
+ response_types_map=_response_types_map,
1933
+ )
1934
+
1935
+
1936
+ @validate_call
1937
+ def fork_database_without_preload_content(
1938
+ self,
1939
+ database_id: Annotated[StrictStr, Field(description="Source database ID")],
1940
+ fork_database_request: ForkDatabaseRequest,
1941
+ _request_timeout: Union[
1942
+ None,
1943
+ Annotated[StrictFloat, Field(gt=0)],
1944
+ Tuple[
1945
+ Annotated[StrictFloat, Field(gt=0)],
1946
+ Annotated[StrictFloat, Field(gt=0)]
1947
+ ]
1948
+ ] = None,
1949
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1950
+ _content_type: Optional[StrictStr] = None,
1951
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1952
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1953
+ ) -> RESTResponseType:
1954
+ """Fork database
1955
+
1956
+ Create a new database that is an independent fork of an existing one. The fork has its own default catalog and contains the same schemas, tables, and data as the source; the source is left unchanged. External catalogs attached to the source are re-attached to the fork. Optional `name` sets the fork's display label (defaults to the source's). Optional `expires_at` sets when the fork expires — accepts an RFC 3339 timestamp or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days), e.g. `24h`, `90m`, `7d`. When omitted, a still-future expiry on the source is carried over; otherwise the fork never expires. Any indexes on the source's tables are not carried over.
1957
+
1958
+ :param database_id: Source database ID (required)
1959
+ :type database_id: str
1960
+ :param fork_database_request: (required)
1961
+ :type fork_database_request: ForkDatabaseRequest
1962
+ :param _request_timeout: timeout setting for this request. If one
1963
+ number provided, it will be total request
1964
+ timeout. It can also be a pair (tuple) of
1965
+ (connection, read) timeouts.
1966
+ :type _request_timeout: int, tuple(int, int), optional
1967
+ :param _request_auth: set to override the auth_settings for an a single
1968
+ request; this effectively ignores the
1969
+ authentication in the spec for a single request.
1970
+ :type _request_auth: dict, optional
1971
+ :param _content_type: force content-type for the request.
1972
+ :type _content_type: str, Optional
1973
+ :param _headers: set to override the headers for a single
1974
+ request; this effectively ignores the headers
1975
+ in the spec for a single request.
1976
+ :type _headers: dict, optional
1977
+ :param _host_index: set to override the host_index for a single
1978
+ request; this effectively ignores the host_index
1979
+ in the spec for a single request.
1980
+ :type _host_index: int, optional
1981
+ :return: Returns the result object.
1982
+ """ # noqa: E501
1983
+
1984
+ _param = self._fork_database_serialize(
1985
+ database_id=database_id,
1986
+ fork_database_request=fork_database_request,
1987
+ _request_auth=_request_auth,
1988
+ _content_type=_content_type,
1989
+ _headers=_headers,
1990
+ _host_index=_host_index
1991
+ )
1992
+
1993
+ _response_types_map: Dict[str, Optional[str]] = {
1994
+ '201': "CreateDatabaseResponse",
1995
+ '400': "ApiErrorResponse",
1996
+ '404': "ApiErrorResponse",
1997
+ }
1998
+ response_data = self.api_client.call_api(
1999
+ *_param,
2000
+ _request_timeout=_request_timeout
2001
+ )
2002
+ return response_data.response
2003
+
2004
+
2005
+ def _fork_database_serialize(
2006
+ self,
2007
+ database_id,
2008
+ fork_database_request,
2009
+ _request_auth,
2010
+ _content_type,
2011
+ _headers,
2012
+ _host_index,
2013
+ ) -> RequestSerialized:
2014
+
2015
+ _host = None
2016
+
2017
+ _collection_formats: Dict[str, str] = {
2018
+ }
2019
+
2020
+ _path_params: Dict[str, str] = {}
2021
+ _query_params: List[Tuple[str, str]] = []
2022
+ _header_params: Dict[str, Optional[str]] = _headers or {}
2023
+ _form_params: List[Tuple[str, str]] = []
2024
+ _files: Dict[
2025
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2026
+ ] = {}
2027
+ _body_params: Optional[bytes] = None
2028
+
2029
+ # process the path parameters
2030
+ if database_id is not None:
2031
+ _path_params['database_id'] = database_id
2032
+ # process the query parameters
2033
+ # process the header parameters
2034
+ # process the form parameters
2035
+ # process the body parameter
2036
+ if fork_database_request is not None:
2037
+ _body_params = fork_database_request
2038
+
2039
+
2040
+ # set the HTTP header `Accept`
2041
+ if 'Accept' not in _header_params:
2042
+ _header_params['Accept'] = self.api_client.select_header_accept(
2043
+ [
2044
+ 'application/json'
2045
+ ]
2046
+ )
2047
+
2048
+ # set the HTTP header `Content-Type`
2049
+ if _content_type:
2050
+ _header_params['Content-Type'] = _content_type
2051
+ else:
2052
+ _default_content_type = (
2053
+ self.api_client.select_header_content_type(
2054
+ [
2055
+ 'application/json'
2056
+ ]
2057
+ )
2058
+ )
2059
+ if _default_content_type is not None:
2060
+ _header_params['Content-Type'] = _default_content_type
2061
+
2062
+ # authentication setting
2063
+ _auth_settings: List[str] = [
2064
+ 'WorkspaceId',
2065
+ 'BearerAuth'
2066
+ ]
2067
+
2068
+ return self.api_client.param_serialize(
2069
+ method='POST',
2070
+ resource_path='/v1/databases/{database_id}/fork',
2071
+ path_params=_path_params,
2072
+ query_params=_query_params,
2073
+ header_params=_header_params,
2074
+ body=_body_params,
2075
+ post_params=_form_params,
2076
+ files=_files,
2077
+ auth_settings=_auth_settings,
2078
+ collection_formats=_collection_formats,
2079
+ _host=_host,
2080
+ _request_auth=_request_auth
2081
+ )
2082
+
2083
+
2084
+
2085
+
1789
2086
  @validate_call
1790
2087
  def get_database(
1791
2088
  self,
@@ -2315,9 +2612,9 @@ class DatabasesApi:
2315
2612
  _headers: Optional[Dict[StrictStr, Any]] = None,
2316
2613
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2317
2614
  ) -> LoadManagedTableResponse:
2318
- """Load database table from upload
2615
+ """Load database table from upload or query result
2319
2616
 
2320
- Publish a previously-uploaded file as the new contents of a table on the database's default catalog. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. CSV, JSON, and Parquet uploads are supported; the format is auto-detected or set via `format`. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the upload is applied: `replace` overwrites the table's contents, `append` inserts the uploaded rows on top of the existing data. Concurrent loads against the same upload return 409. Set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID.
2617
+ Publish data as the new contents of a table on the database's default catalog, from one of two sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
2321
2618
 
2322
2619
  :param database_id: Database ID (required)
2323
2620
  :type database_id: str
@@ -2398,9 +2695,9 @@ class DatabasesApi:
2398
2695
  _headers: Optional[Dict[StrictStr, Any]] = None,
2399
2696
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2400
2697
  ) -> ApiResponse[LoadManagedTableResponse]:
2401
- """Load database table from upload
2698
+ """Load database table from upload or query result
2402
2699
 
2403
- Publish a previously-uploaded file as the new contents of a table on the database's default catalog. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. CSV, JSON, and Parquet uploads are supported; the format is auto-detected or set via `format`. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the upload is applied: `replace` overwrites the table's contents, `append` inserts the uploaded rows on top of the existing data. Concurrent loads against the same upload return 409. Set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID.
2700
+ Publish data as the new contents of a table on the database's default catalog, from one of two sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
2404
2701
 
2405
2702
  :param database_id: Database ID (required)
2406
2703
  :type database_id: str
@@ -2481,9 +2778,9 @@ class DatabasesApi:
2481
2778
  _headers: Optional[Dict[StrictStr, Any]] = None,
2482
2779
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2483
2780
  ) -> RESTResponseType:
2484
- """Load database table from upload
2781
+ """Load database table from upload or query result
2485
2782
 
2486
- Publish a previously-uploaded file as the new contents of a table on the database's default catalog. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. CSV, JSON, and Parquet uploads are supported; the format is auto-detected or set via `format`. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the upload is applied: `replace` overwrites the table's contents, `append` inserts the uploaded rows on top of the existing data. Concurrent loads against the same upload return 409. Set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID.
2783
+ Publish data as the new contents of a table on the database's default catalog, from one of two sources — provide exactly one. The database-scoped equivalent of the connection-scoped managed-table load — addressed by `database_id`, so no `default_connection_id` is needed. With `upload_id`, a previously-uploaded file is published: CSV, JSON, and Parquet are supported; the format is auto-detected or set via `format`. With `result_id`, a persisted query result is copied into the table, so the table keeps its data even after the result expires. If the target table (or its schema) has not been declared yet, it is created automatically as part of the load — declaring tables up front is optional. `mode` selects how the data is applied: `replace` overwrites the table's contents, `append` inserts the new rows on top of the existing data. Concurrent loads against the same upload return 409. For an upload, set `async` to run the load in the background and get back a job ID to poll; add `async_after_ms` to wait briefly for it to finish before falling back to a job ID. A `result_id` load runs synchronously.
2487
2784
 
2488
2785
  :param database_id: Database ID (required)
2489
2786
  :type database_id: str
@@ -66,6 +66,7 @@ from hotdata.models.execute_saved_query_request import ExecuteSavedQueryRequest
66
66
  from hotdata.models.finalize_upload_part import FinalizeUploadPart
67
67
  from hotdata.models.finalize_upload_request import FinalizeUploadRequest
68
68
  from hotdata.models.finalize_upload_response import FinalizeUploadResponse
69
+ from hotdata.models.fork_database_request import ForkDatabaseRequest
69
70
  from hotdata.models.get_connection_response import GetConnectionResponse
70
71
  from hotdata.models.get_database_context_response import GetDatabaseContextResponse
71
72
  from hotdata.models.get_result_response import GetResultResponse
@@ -18,8 +18,8 @@ import pprint
18
18
  import re # noqa: F401
19
19
  import json
20
20
 
21
- from pydantic import BaseModel, ConfigDict, StrictStr
22
- from typing import Any, ClassVar, Dict, List
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
@@ -27,8 +27,9 @@ class AddManagedTableDecl(BaseModel):
27
27
  """
28
28
  One table declaration inside an add-schema request body.
29
29
  """ # noqa: E501
30
+ key: Optional[List[StrictStr]] = Field(default=None, description="Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected.")
30
31
  name: StrictStr
31
- __properties: ClassVar[List[str]] = ["name"]
32
+ __properties: ClassVar[List[str]] = ["key", "name"]
32
33
 
33
34
  model_config = ConfigDict(
34
35
  populate_by_name=True,
@@ -81,6 +82,7 @@ class AddManagedTableDecl(BaseModel):
81
82
  return cls.model_validate(obj)
82
83
 
83
84
  _obj = cls.model_validate({
85
+ "key": obj.get("key"),
84
86
  "name": obj.get("name")
85
87
  })
86
88
  return _obj
@@ -18,8 +18,8 @@ import pprint
18
18
  import re # noqa: F401
19
19
  import json
20
20
 
21
- from pydantic import BaseModel, ConfigDict, StrictStr
22
- from typing import Any, ClassVar, Dict, List
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
@@ -27,8 +27,9 @@ class AddManagedTableRequest(BaseModel):
27
27
  """
28
28
  Request body for adding a table to an existing schema: `POST /v1/connections/{id}/schemas/{schema}/tables` and `POST /v1/databases/{id}/schemas/{schema}/tables`.
29
29
  """ # noqa: E501
30
+ key: Optional[List[StrictStr]] = Field(default=None, description="Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected.")
30
31
  name: StrictStr
31
- __properties: ClassVar[List[str]] = ["name"]
32
+ __properties: ClassVar[List[str]] = ["key", "name"]
32
33
 
33
34
  model_config = ConfigDict(
34
35
  populate_by_name=True,
@@ -81,6 +82,7 @@ class AddManagedTableRequest(BaseModel):
81
82
  return cls.model_validate(obj)
82
83
 
83
84
  _obj = cls.model_validate({
85
+ "key": obj.get("key"),
84
86
  "name": obj.get("name")
85
87
  })
86
88
  return _obj
@@ -28,11 +28,12 @@ class CreateDatabaseRequest(BaseModel):
28
28
  """
29
29
  Request body for POST /databases
30
30
  """ # noqa: E501
31
- default_catalog: Optional[StrictStr] = Field(default=None, description="Optional name the database's auto-created default catalog answers to inside its query scope. Must be a valid SQL identifier (`[a-z0-9_]`, not starting with a digit) and may not collide with the reserved catalog names `hotdata`, `datasets`, or `information_schema`. Defaults to `default` when omitted, so `default.main.<table>` keeps working.")
31
+ default_catalog: Optional[StrictStr] = Field(default=None, description="Optional name the database's auto-created default catalog answers to inside its query scope. Must be a valid SQL identifier (`[a-z0-9_]`, not starting with a digit) and may not collide with the reserved catalog names `hotdata` or `information_schema`. Defaults to `default` when omitted, so `default.main.<table>` keeps working.")
32
+ default_schema: Optional[StrictStr] = Field(default=None, description="Optional schema that unqualified table names resolve to inside this database's query scope. Must be a valid SQL identifier (`[a-z0-9_]`, not starting with a digit). When omitted, a database that declares exactly one schema adopts that schema as its default; otherwise unqualified names resolve to `main`. Fully-qualified names (`<catalog>.<schema>.<table>`) are unaffected, and a per-query `default_schema` still takes precedence.")
32
33
  expires_at: Optional[StrictStr] = Field(default=None, description="When this database expires. Accepts either an RFC 3339 timestamp (e.g. `\"2026-06-01T00:00:00Z\"`) or a relative duration suffixed with `h` (hours), `m` (minutes), or `d` (days) — for example `\"24h\"`, `\"48h\"`, or `\"7d\"`. Omitted (or empty) means the database never expires. Expiry is best-effort: the database will not be deleted before `expires_at`, but cleanup may run later than the exact timestamp.")
33
34
  name: Optional[StrictStr] = Field(default=None, description="Optional free-form display label (for UIs/CLIs). Not unique. Not an identifier — databases are always addressed by `id`. Accepts the legacy `description` key as an alias so clients that predate the rename keep populating this field.")
34
35
  schemas: Optional[List[DatabaseDefaultSchemaDecl]] = Field(default=None, description="Optional schemas/tables to declare on the database's auto-created default catalog. Tables declared here can be loaded via the standard managed-table load endpoint targeting `default_connection_id`. Omitted or empty means the default catalog starts empty.")
35
- __properties: ClassVar[List[str]] = ["default_catalog", "expires_at", "name", "schemas"]
36
+ __properties: ClassVar[List[str]] = ["default_catalog", "default_schema", "expires_at", "name", "schemas"]
36
37
 
37
38
  model_config = ConfigDict(
38
39
  populate_by_name=True,
@@ -85,6 +86,11 @@ class CreateDatabaseRequest(BaseModel):
85
86
  if self.default_catalog is None and "default_catalog" in self.model_fields_set:
86
87
  _dict['default_catalog'] = None
87
88
 
89
+ # set to None if default_schema (nullable) is None
90
+ # and model_fields_set contains the field
91
+ if self.default_schema is None and "default_schema" in self.model_fields_set:
92
+ _dict['default_schema'] = None
93
+
88
94
  # set to None if expires_at (nullable) is None
89
95
  # and model_fields_set contains the field
90
96
  if self.expires_at is None and "expires_at" in self.model_fields_set:
@@ -108,6 +114,7 @@ class CreateDatabaseRequest(BaseModel):
108
114
 
109
115
  _obj = cls.model_validate({
110
116
  "default_catalog": obj.get("default_catalog"),
117
+ "default_schema": obj.get("default_schema"),
111
118
  "expires_at": obj.get("expires_at"),
112
119
  "name": obj.get("name"),
113
120
  "schemas": [DatabaseDefaultSchemaDecl.from_dict(_item) for _item in obj["schemas"]] if obj.get("schemas") is not None else None
@@ -30,10 +30,11 @@ class CreateDatabaseResponse(BaseModel):
30
30
  """ # noqa: E501
31
31
  default_catalog: StrictStr = Field(description="Name the database's default catalog answers to inside its query scope (`default` unless overridden at create time).")
32
32
  default_connection_id: StrictStr = Field(description="Internal id of the connection that backs this database's `default` catalog. Workspace-level connection endpoints (list, get, health, delete, cache purge) refuse to act on this id — it is exposed only for the managed-tables load endpoint (`POST /v1/connections/{id}/schemas/{s}/tables/{t}/loads`) so callers can publish parquet into tables declared at database-create time. Addressing it directly in SQL is not the recommended path — use `default` inside an `X-Database-Id` scope instead.")
33
+ default_schema: StrictStr = Field(description="Schema that unqualified table names resolve to inside this database's query scope. `main` unless the database declares a single schema or a `default_schema` was set at create time.")
33
34
  expires_at: Optional[datetime] = Field(default=None, description="When this database expires.")
34
35
  id: StrictStr
35
36
  name: Optional[StrictStr] = None
36
- __properties: ClassVar[List[str]] = ["default_catalog", "default_connection_id", "expires_at", "id", "name"]
37
+ __properties: ClassVar[List[str]] = ["default_catalog", "default_connection_id", "default_schema", "expires_at", "id", "name"]
37
38
 
38
39
  model_config = ConfigDict(
39
40
  populate_by_name=True,
@@ -98,6 +99,7 @@ class CreateDatabaseResponse(BaseModel):
98
99
  _obj = cls.model_validate({
99
100
  "default_catalog": obj.get("default_catalog"),
100
101
  "default_connection_id": obj.get("default_connection_id"),
102
+ "default_schema": obj.get("default_schema"),
101
103
  "expires_at": obj.get("expires_at"),
102
104
  "id": obj.get("id"),
103
105
  "name": obj.get("name")
@@ -18,8 +18,8 @@ import pprint
18
18
  import re # noqa: F401
19
19
  import json
20
20
 
21
- from pydantic import BaseModel, ConfigDict, StrictStr
22
- from typing import Any, ClassVar, Dict, List
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
23
  from typing import Optional, Set
24
24
  from typing_extensions import Self
25
25
 
@@ -27,8 +27,9 @@ class DatabaseDefaultTableDecl(BaseModel):
27
27
  """
28
28
  One table declaration inside a default-catalog schema, supplied at database-create time.
29
29
  """ # noqa: E501
30
+ key: Optional[List[StrictStr]] = Field(default=None, description="Columns that uniquely identify a row, enabling the key-based load modes (`delete`, `update`, `upsert`) on this table: those loads match rows by these columns' values. Omit (the default) to declare no key; the table can still be loaded with `replace` and `append`, but key-based modes are then rejected.")
30
31
  name: StrictStr
31
- __properties: ClassVar[List[str]] = ["name"]
32
+ __properties: ClassVar[List[str]] = ["key", "name"]
32
33
 
33
34
  model_config = ConfigDict(
34
35
  populate_by_name=True,
@@ -81,6 +82,7 @@ class DatabaseDefaultTableDecl(BaseModel):
81
82
  return cls.model_validate(obj)
82
83
 
83
84
  _obj = cls.model_validate({
85
+ "key": obj.get("key"),
84
86
  "name": obj.get("name")
85
87
  })
86
88
  return _obj