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.
- {hotdata-0.11.0 → hotdata-0.13.0}/PKG-INFO +32 -3
- {hotdata-0.11.0 → hotdata-0.13.0}/README.md +30 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/__init__.py +29 -1
- hotdata-0.13.0/hotdata/_workspace.py +84 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/connections_api.py +62 -294
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/databases_api.py +1096 -194
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/indexes_api.py +30 -27
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/information_schema_api.py +3 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/jobs_api.py +18 -15
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/query_api.py +5 -4
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/results_api.py +12 -3
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/uploads_api.py +9 -9
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api_client.py +14 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/configuration.py +14 -2
- hotdata-0.13.0/hotdata/loads.py +273 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/__init__.py +7 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/add_managed_schema_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/add_managed_table_decl.py +11 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/add_managed_table_request.py +11 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/attach_database_catalog_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/batch_create_upload_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/bulk_create_databases_request.py +5 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_type_spec.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_connection_request.py +6 -4
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_database_request.py +8 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_database_response.py +21 -3
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_embedding_provider_request.py +4 -0
- hotdata-0.13.0/hotdata/models/create_index_request.py +189 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_saved_query_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_upload_request.py +6 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_workspace_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_default_schema_decl.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_default_table_decl.py +11 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_detail_response.py +13 -2
- hotdata-0.13.0/hotdata/models/database_lineage_response.py +114 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_summary.py +12 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/execute_saved_query_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_part.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/fork_database_request.py +12 -1
- hotdata-0.13.0/hotdata/models/forked_from_info.py +117 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/get_result_response.py +9 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/index_entry_response.py +12 -3
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/index_info_response.py +33 -4
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/information_schema_response.py +5 -5
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/job_result.py +1 -1
- hotdata-0.13.0/hotdata/models/job_status.py +41 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/job_status_response.py +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/job_type.py +3 -0
- hotdata-0.13.0/hotdata/models/lineage_ancestor_info.py +119 -0
- hotdata-0.13.0/hotdata/models/lineage_fork_info.py +119 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/load_managed_table_request.py +6 -2
- hotdata-0.13.0/hotdata/models/managed_table_constant_per_key_response.py +94 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/mint_upload_parts_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/query_request.py +6 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/query_response.py +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/query_run_info.py +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_info.py +6 -1
- hotdata-0.11.0/hotdata/models/job_status.py → hotdata-0.13.0/hotdata/models/table_layout.py +5 -8
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_partition_key.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_sort_key.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/update_embedding_provider_request.py +4 -0
- hotdata-0.13.0/hotdata/models/update_managed_table_request.py +92 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/update_saved_query_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/upsert_database_context_request.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/workspace_usage_response.py +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/query.py +57 -6
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/PKG-INFO +32 -3
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/SOURCES.txt +21 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/requires.txt +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/pyproject.toml +2 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_add_managed_schema_request.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_add_managed_table_decl.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_add_managed_table_request.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_batch_create_upload_request.py +2 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_bulk_create_databases_request.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_connections_api.py +3 -10
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_connection_request.py +2 -3
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_database_request.py +3 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_database_response.py +7 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_embedding_provider_request.py +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_index_request.py +5 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_default_schema_decl.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_default_table_decl.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_detail_response.py +6 -0
- hotdata-0.13.0/test/test_database_lineage_response.py +95 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_summary.py +6 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_databases_api.py +21 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_fork_database_request.py +1 -0
- hotdata-0.13.0/test/test_forked_from_info.py +57 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_get_result_response.py +2 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_index_entry_response.py +4 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_index_info_response.py +5 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_information_schema_response.py +8 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_result.py +4 -0
- hotdata-0.13.0/test/test_lineage_ancestor_info.py +59 -0
- hotdata-0.13.0/test/test_lineage_fork_info.py +59 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_databases_response.py +2 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_indexes_response.py +10 -2
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_load_managed_table_request.py +1 -1
- hotdata-0.13.0/test/test_managed_table_constant_per_key_response.py +63 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_request.py +1 -1
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_info.py +8 -0
- hotdata-0.13.0/test/test_table_layout.py +34 -0
- hotdata-0.13.0/test/test_update_managed_table_request.py +52 -0
- hotdata-0.13.0/tests/test_config_env.py +104 -0
- hotdata-0.13.0/tests/test_loads.py +254 -0
- hotdata-0.13.0/tests/test_model_extra_forbid.py +113 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_query.py +58 -1
- hotdata-0.13.0/tests/test_workspace_guard.py +160 -0
- hotdata-0.11.0/hotdata/models/create_index_request.py +0 -147
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/_retry.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/_upload_watchdog.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/_useragent.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/__init__.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/database_context_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/embedding_providers_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/query_runs_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/saved_queries_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/usage_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api/workspaces_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/api_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/arrow.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/exceptions.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/api_error_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/api_error_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/async_query_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/batch_create_upload_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/boolean_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/bulk_create_databases_result.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/categorical_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/category_value_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_definition.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of1.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of2.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of3.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_detail_one_of4.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/column_profile_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/connection_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_connection_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_embedding_provider_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/create_workspace_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_attachment_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_batch_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_context_entry.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/database_count_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/delete_database_batch_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/discovery_status.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/embedding_provider_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/error.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/finalize_upload_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/get_connection_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/get_database_context_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/index_status.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_connections_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_database_contexts_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_databases_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_embedding_providers_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_indexes_page_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_indexes_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_jobs_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_query_runs_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_results_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_saved_queries_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_saved_query_versions_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/list_workspaces_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/load_managed_table_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/managed_schema_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/managed_table_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/mint_upload_parts_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/minted_upload_part_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/numeric_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/result_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/results_format_query.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/saved_query_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/saved_query_summary.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/saved_query_version_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/submit_job_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/table_profile_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/temporal_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/text_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/update_embedding_provider_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/upload_session_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/upsert_database_context_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/workspace_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/models/workspace_list_item.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/py.typed +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/rest.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata/uploads.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/dependency_links.txt +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/hotdata.egg-info/top_level.txt +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/setup.cfg +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_api_client_close.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_api_error_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_api_error_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_async_query_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_attach_database_catalog_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_batch_create_upload_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_boolean_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_bulk_create_databases_result.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_categorical_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_category_value_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_definition.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of1.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of2.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of3.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_detail_one_of4.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_profile_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_column_type_spec.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_connection_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_connection_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_embedding_provider_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_saved_query_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_upload_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_workspace_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_create_workspace_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_attachment_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_batch_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_context_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_context_entry.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_database_count_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_delete_database_batch_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_discovery_status.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_embedding_provider_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_embedding_providers_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_error.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_execute_saved_query_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_finalize_upload_part.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_finalize_upload_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_finalize_upload_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_get_connection_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_get_database_context_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_index_status.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_indexes_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_information_schema_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_status.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_status_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_job_type.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_jobs_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_connections_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_database_contexts_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_embedding_providers_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_indexes_page_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_jobs_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_query_runs_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_results_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_saved_queries_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_saved_query_versions_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_list_workspaces_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_load_managed_table_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_managed_schema_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_managed_table_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_mint_upload_parts_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_mint_upload_parts_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_minted_upload_part_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_numeric_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_run_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_query_runs_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_result_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_results_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_results_format_query.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_queries_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_query_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_query_summary.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_saved_query_version_info.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_submit_job_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_partition_key.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_profile_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_table_sort_key.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_temporal_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_text_profile_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_update_embedding_provider_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_update_embedding_provider_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_update_saved_query_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_upload_session_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_uploads_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_upsert_database_context_request.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_upsert_database_context_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_usage_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspace_detail.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspace_list_item.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspace_usage_response.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/test/test_workspaces_api.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_api_token_auth.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_arrow.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_config_auth_surface.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_request_defaults.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_retry.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_update_changelog.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_codex_fixes.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_multipart_resilient.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_parity_fixes.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_resilient.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_retry_policy.py +0 -0
- {hotdata-0.11.0 → hotdata-0.13.0}/tests/test_upload_watchdog.py +0 -0
- {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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
+
]
|