Created
September 3, 2025 20:10
-
-
Save cmpadden/357af2210fc3a4cfa5acca082dceba65 to your computer and use it in GitHub Desktop.
unit-tests_build_2160_pytest-dagster-airbyte-unit-3-dot-12.log
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [2025-09-03T19:51:26Z] ============================= test session starts ============================== | |
| [2025-09-03T19:51:26Z] platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 -- /workdir/python_modules/libraries/dagster-airbyte/.tox/py312-unit/bin/python3 | |
| [2025-09-03T19:51:26Z] cachedir: python_modules/libraries/dagster-airbyte/.tox/py312-unit/.pytest_cache | |
| [2025-09-03T19:51:26Z] rootdir: /workdir | |
| [2025-09-03T19:51:26Z] configfile: pyproject.toml | |
| [2025-09-03T19:51:26Z] plugins: flaky-3.8.1, buildkite-test-collector-1.1.1, timeout-2.4.0, asyncio-1.1.0, anyio-4.10.0, mock-3.14.0, xdist-3.6.1, syrupy-4.9.1, requests-mock-1.12.1, cov-5.0.0 | |
| [2025-09-03T19:51:26Z] timeout: 240.0s | |
| [2025-09-03T19:51:26Z] timeout method: signal | |
| [2025-09-03T19:51:26Z] timeout func_only: False | |
| [2025-09-03T19:51:26Z] asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function | |
| collected 545 items | |
| [2025-09-03T19:51:28Z] | |
| [2025-09-03T19:51:28Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_fetch_airbyte_workspace_data FAILED [ 0%] | |
| [2025-09-03T19:51:28Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_fetch_airbyte_workspace_data ERROR [ 0%] | |
| [2025-09-03T19:51:28Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_spec FAILED [ 0%] | |
| [2025-09-03T19:51:28Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_spec ERROR [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_connection_selector FAILED [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_connection_selector ERROR [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_cached_load_spec_single_resource FAILED [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_cached_load_spec_single_resource ERROR [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_cached_load_spec_multiple_resources FAILED [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_cached_load_spec_multiple_resources ERROR [ 0%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_cached_load_spec_with_asset_factory FAILED [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_cached_load_spec_with_asset_factory ERROR [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_custom_metadata FAILED [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_custom_metadata ERROR [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_custom_group_name_with_asset_factory FAILED [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_custom_group_name_with_asset_factory ERROR [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_invariant_group_name_with_asset_decorator FAILED [ 1%] | |
| [2025-09-03T19:51:29Z] dagster_airbyte_tests/beta/test_asset_specs.py::test_translator_invariant_group_name_with_asset_decorator ERROR [ 1%] | |
| [2025-09-03T19:51:30Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_load FAILED [ 1%] | |
| [2025-09-03T19:51:30Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_load ERROR [ 1%] | |
| [2025-09-03T19:51:30Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[single_connection] FAILED [ 2%] | |
| [2025-09-03T19:51:30Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[single_connection] ERROR [ 2%] | |
| [2025-09-03T19:51:31Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[single_connection_by_id] FAILED [ 2%] | |
| [2025-09-03T19:51:31Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[single_connection_by_id] ERROR [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[no_connections] FAILED [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[no_connections] ERROR [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[junk_connection] FAILED [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_basic_component_filter[junk_connection] ERROR [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_custom_filter_fn_python[all_connections] FAILED [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_custom_filter_fn_python[all_connections] ERROR [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_custom_filter_fn_python[filter_by_id] FAILED [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_custom_filter_fn_python[filter_by_id] ERROR [ 2%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_custom_filter_fn_python[no_connections] FAILED [ 3%] | |
| [2025-09-03T19:51:32Z] dagster_airbyte_tests/beta/test_component.py::test_custom_filter_fn_python[no_connections] ERROR [ 3%] | |
| [2025-09-03T19:51:33Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[group_name] FAILED [ 3%] | |
| [2025-09-03T19:51:33Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[group_name] ERROR [ 3%] | |
| [2025-09-03T19:51:34Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[owners] FAILED [ 3%] | |
| [2025-09-03T19:51:34Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[owners] ERROR [ 3%] | |
| [2025-09-03T19:51:34Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[tags] FAILED [ 3%] | |
| [2025-09-03T19:51:34Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[tags] ERROR [ 3%] | |
| [2025-09-03T19:51:35Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[kinds] FAILED [ 3%] | |
| [2025-09-03T19:51:35Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[kinds] ERROR [ 3%] | |
| [2025-09-03T19:51:36Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[tags-and-kinds] FAILED [ 4%] | |
| [2025-09-03T19:51:36Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[tags-and-kinds] ERROR [ 4%] | |
| [2025-09-03T19:51:36Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[code-version] FAILED [ 4%] | |
| [2025-09-03T19:51:36Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[code-version] ERROR [ 4%] | |
| [2025-09-03T19:51:37Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[description] FAILED [ 4%] | |
| [2025-09-03T19:51:37Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[description] ERROR [ 4%] | |
| [2025-09-03T19:51:37Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[metadata] FAILED [ 4%] | |
| [2025-09-03T19:51:37Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[metadata] ERROR [ 4%] | |
| [2025-09-03T19:51:38Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[deps] FAILED [ 4%] | |
| [2025-09-03T19:51:38Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[deps] ERROR [ 4%] | |
| [2025-09-03T19:51:39Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[automation_condition] FAILED [ 4%] | |
| [2025-09-03T19:51:39Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[automation_condition] ERROR [ 4%] | |
| [2025-09-03T19:51:39Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[key] FAILED [ 5%] | |
| [2025-09-03T19:51:39Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[key] ERROR [ 5%] | |
| [2025-09-03T19:51:40Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[key_prefix] FAILED [ 5%] | |
| [2025-09-03T19:51:40Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[key_prefix] ERROR [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[partitions_defs] FAILED [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_component.py::TestAirbyteTranslation::test_translation[partitions_defs] ERROR [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_refresh_access_token FAILED [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_refresh_access_token ERROR [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_basic_resource_request FAILED [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_basic_resource_request ERROR [ 5%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_succeeded] FAILED [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_succeeded] ERROR [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_cancelled] FAILED [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_cancelled] ERROR [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_error] FAILED [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_error] ERROR [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_failed] FAILED [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_failed] ERROR [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_unrecognized] FAILED [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_job_status[job_status_unrecognized] ERROR [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_short_success] FAILED [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_short_success] ERROR [ 6%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_short_failure] FAILED [ 7%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_short_failure] ERROR [ 7%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_medium_success] FAILED [ 7%] | |
| [2025-09-03T19:51:41Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_medium_success] ERROR [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_medium_failure] FAILED [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_medium_failure] ERROR [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_long_success] FAILED [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_poll_process[sync_long_success] ERROR [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_cancel_on_termination[cancel_on_termination_true] FAILED [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_cancel_on_termination[cancel_on_termination_true] ERROR [ 7%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_cancel_on_termination[cancel_on_termination_false] FAILED [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_sync_and_poll_client_cancel_on_termination[cancel_on_termination_false] ERROR [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_fivetran_airbyte_cloud_sync_and_poll_materialization_method FAILED [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_fivetran_airbyte_cloud_sync_and_poll_materialization_method ERROR [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_oss_api_url_configuration FAILED [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_oss_username_password_auth FAILED [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_oss_client_credentials_auth FAILED [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_cloud_requires_client_credentials FAILED [ 8%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_resources.py::test_airbyte_oss_auth_method_mutual_exclusivity PASSED [ 9%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_translator.py::test_airbyte_workspace_data_to_table_props FAILED [ 9%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_translator.py::test_airbyte_workspace_data_to_table_props ERROR [ 9%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_translator.py::test_translator_asset_spec FAILED [ 9%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_translator.py::test_translator_asset_spec ERROR [ 9%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_translator.py::test_custom_translator FAILED [ 9%] | |
| [2025-09-03T19:51:42Z] dagster_airbyte_tests/beta/test_translator.py::test_custom_translator ERROR [ 9%] | |
| [2025-09-03T19:51:43Z] dagster_airbyte_tests/test_asset_defs.py::test_assets[None-] PASSED [ 9%] | |
| [2025-09-03T19:51:43Z] dagster_airbyte_tests/test_asset_defs.py::test_assets[None-the_prefix_] PASSED [ 10%] | |
| [2025-09-03T19:51:43Z] dagster_airbyte_tests/test_asset_defs.py::test_assets[auto_materialize_policy1-] PASSED [ 10%] | |
| [2025-09-03T19:51:43Z] dagster_airbyte_tests/test_asset_defs.py::test_assets[auto_materialize_policy1-the_prefix_] PASSED [ 10%] | |
| [2025-09-03T19:51:43Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-None-None-] PASSED [ 10%] | |
| [2025-09-03T19:51:44Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-None-None-the_prefix_] PASSED [ 10%] | |
| [2025-09-03T19:51:44Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-None-my_source_asset_key-] PASSED [ 11%] | |
| [2025-09-03T19:51:44Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-None-my_source_asset_key-the_prefix_] PASSED [ 11%] | |
| [2025-09-03T19:51:44Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-legacy_freshness_policy1-None-] PASSED [ 11%] | |
| [2025-09-03T19:51:45Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-legacy_freshness_policy1-None-the_prefix_] PASSED [ 11%] | |
| [2025-09-03T19:51:45Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-legacy_freshness_policy1-my_source_asset_key-] PASSED [ 11%] | |
| [2025-09-03T19:51:45Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[None-legacy_freshness_policy1-my_source_asset_key-the_prefix_] PASSED [ 11%] | |
| [2025-09-03T19:51:45Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-None-None-] PASSED [ 12%] | |
| [2025-09-03T19:51:46Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-None-None-the_prefix_] PASSED [ 12%] | |
| [2025-09-03T19:51:46Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-None-my_source_asset_key-] PASSED [ 12%] | |
| [2025-09-03T19:51:46Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-None-my_source_asset_key-the_prefix_] PASSED [ 12%] | |
| [2025-09-03T19:51:46Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-legacy_freshness_policy1-None-] PASSED [ 12%] | |
| [2025-09-03T19:51:46Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-legacy_freshness_policy1-None-the_prefix_] PASSED [ 13%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-legacy_freshness_policy1-my_source_asset_key-] PASSED [ 13%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_with_normalization[auto_materialize_policy1-legacy_freshness_policy1-my_source_asset_key-the_prefix_] PASSED [ 13%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_asset_defs.py::test_assets_cloud PASSED [ 13%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_asset_defs.py::test_built_airbyte_asset_with_downstream_asset_via_definition PASSED [ 13%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_asset_defs.py::test_built_airbyte_asset_with_downstream_asset PASSED [ 13%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_asset_defs.py::test_built_airbyte_asset_table_name PASSED [ 14%] | |
| [2025-09-03T19:51:47Z] dagster_airbyte_tests/test_cloud_resources.py::test_trigger_connection PASSED [ 14%] | |
| [2025-09-03T19:51:48Z] dagster_airbyte_tests/test_cloud_resources.py::test_trigger_connection_fail PASSED [ 14%] | |
| [2025-09-03T19:51:48Z] dagster_airbyte_tests/test_cloud_resources.py::test_sync_and_poll[succeeded] PASSED [ 14%] | |
| [2025-09-03T19:51:48Z] dagster_airbyte_tests/test_cloud_resources.py::test_sync_and_poll[cancelled] PASSED [ 14%] | |
| [2025-09-03T19:51:48Z] dagster_airbyte_tests/test_cloud_resources.py::test_sync_and_poll[error] PASSED [ 15%] | |
| [2025-09-03T19:51:48Z] dagster_airbyte_tests/test_cloud_resources.py::test_sync_and_poll[unrecognized] PASSED [ 15%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_cloud_resources.py::test_start_sync_bad_out_fail PASSED [ 15%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_cloud_resources.py::test_refresh_access_token PASSED [ 15%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_generated_classes.py::test_destination_constructors PASSED [ 15%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_generated_classes.py::test_source_constructors PASSED [ 15%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-<lambda>-True-True] SKIPPED [ 16%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-<lambda>-True-False] SKIPPED [ 16%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-<lambda>-False-True] SKIPPED [ 16%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-<lambda>-False-False] SKIPPED [ 16%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-None-True-True] SKIPPED [ 16%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-None-True-False] SKIPPED [ 17%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-None-False-True] SKIPPED [ 17%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-None-None-False-False] SKIPPED [ 17%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-<lambda>-None-True-True] SKIPPED [ 17%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-<lambda>-None-True-False] SKIPPED [ 17%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-<lambda>-None-False-True] SKIPPED [ 17%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-True-<lambda>-None-False-False] SKIPPED [ 18%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-<lambda>-True-True] SKIPPED [ 18%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-<lambda>-True-False] SKIPPED [ 18%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-<lambda>-False-True] SKIPPED [ 18%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-<lambda>-False-False] SKIPPED [ 18%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-None-True-True] SKIPPED [ 19%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-None-True-False] SKIPPED [ 19%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-None-False-True] SKIPPED [ 19%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-None-None-False-False] SKIPPED [ 19%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-<lambda>-None-True-True] SKIPPED [ 19%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-<lambda>-None-True-False] SKIPPED [ 20%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-<lambda>-None-False-True] SKIPPED [ 20%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-None-False-<lambda>-None-False-False] SKIPPED [ 20%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 20%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 20%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 20%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 21%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-None-True-True] SKIPPED [ 21%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-None-True-False] SKIPPED [ 21%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-None-False-True] SKIPPED [ 21%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-None-None-False-False] SKIPPED [ 21%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 22%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 22%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 22%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 22%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 22%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 22%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 23%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 23%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-None-True-True] SKIPPED [ 23%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-None-True-False] SKIPPED [ 23%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-None-False-True] SKIPPED [ 23%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-None-None-False-False] SKIPPED [ 24%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 24%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 24%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 24%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-None-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 24%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-<lambda>-True-True] SKIPPED [ 24%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-<lambda>-True-False] SKIPPED [ 25%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-<lambda>-False-True] SKIPPED [ 25%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-<lambda>-False-False] SKIPPED [ 25%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-None-True-True] SKIPPED [ 25%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-None-True-False] SKIPPED [ 25%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-None-False-True] SKIPPED [ 26%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-None-None-False-False] SKIPPED [ 26%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-<lambda>-None-True-True] SKIPPED [ 26%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-<lambda>-None-True-False] SKIPPED [ 26%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-<lambda>-None-False-True] SKIPPED [ 26%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-True-<lambda>-None-False-False] SKIPPED [ 26%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-<lambda>-True-True] SKIPPED [ 27%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-<lambda>-True-False] SKIPPED [ 27%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-<lambda>-False-True] SKIPPED [ 27%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-<lambda>-False-False] SKIPPED [ 27%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-None-True-True] SKIPPED [ 27%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-None-True-False] SKIPPED [ 28%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-None-False-True] SKIPPED [ 28%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-None-None-False-False] SKIPPED [ 28%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-<lambda>-None-True-True] SKIPPED [ 28%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-<lambda>-None-True-False] SKIPPED [ 28%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-<lambda>-None-False-True] SKIPPED [ 28%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-None-False-<lambda>-None-False-False] SKIPPED [ 29%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 29%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 29%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 29%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 29%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-None-True-True] SKIPPED [ 30%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-None-True-False] SKIPPED [ 30%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-None-False-True] SKIPPED [ 30%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-None-None-False-False] SKIPPED [ 30%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 30%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 31%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 31%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 31%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 31%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 31%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 31%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 32%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-None-True-True] SKIPPED [ 32%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-None-True-False] SKIPPED [ 32%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-None-False-True] SKIPPED [ 32%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-None-None-False-False] SKIPPED [ 32%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 33%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 33%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 33%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-None-<lambda>-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 33%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-<lambda>-True-True] SKIPPED [ 33%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-<lambda>-True-False] SKIPPED [ 33%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-<lambda>-False-True] SKIPPED [ 34%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-<lambda>-False-False] SKIPPED [ 34%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-None-True-True] SKIPPED [ 34%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-None-True-False] SKIPPED [ 34%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-None-False-True] SKIPPED [ 34%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-None-None-False-False] SKIPPED [ 35%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-<lambda>-None-True-True] SKIPPED [ 35%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-<lambda>-None-True-False] SKIPPED [ 35%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-<lambda>-None-False-True] SKIPPED [ 35%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-True-<lambda>-None-False-False] SKIPPED [ 35%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-<lambda>-True-True] SKIPPED [ 35%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-<lambda>-True-False] SKIPPED [ 36%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-<lambda>-False-True] SKIPPED [ 36%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-<lambda>-False-False] SKIPPED [ 36%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-None-True-True] SKIPPED [ 36%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-None-True-False] SKIPPED [ 36%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-None-False-True] SKIPPED [ 37%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-None-None-False-False] SKIPPED [ 37%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-<lambda>-None-True-True] SKIPPED [ 37%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-<lambda>-None-True-False] SKIPPED [ 37%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-<lambda>-None-False-True] SKIPPED [ 37%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-None-False-<lambda>-None-False-False] SKIPPED [ 37%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 38%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 38%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 38%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 38%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-None-True-True] SKIPPED [ 38%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-None-True-False] SKIPPED [ 39%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-None-False-True] SKIPPED [ 39%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-None-None-False-False] SKIPPED [ 39%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 39%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 39%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 40%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 40%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 40%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 40%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 40%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 40%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-None-True-True] SKIPPED [ 41%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-None-True-False] SKIPPED [ 41%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-None-False-True] SKIPPED [ 41%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-None-None-False-False] SKIPPED [ 41%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 41%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 42%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 42%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-None-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 42%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-<lambda>-True-True] SKIPPED [ 42%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-<lambda>-True-False] SKIPPED [ 42%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-<lambda>-False-True] SKIPPED [ 42%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-<lambda>-False-False] SKIPPED [ 43%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-None-True-True] SKIPPED [ 43%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-None-True-False] SKIPPED [ 43%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-None-False-True] SKIPPED [ 43%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-None-None-False-False] SKIPPED [ 43%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-<lambda>-None-True-True] SKIPPED [ 44%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-<lambda>-None-True-False] SKIPPED [ 44%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-<lambda>-None-False-True] SKIPPED [ 44%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-True-<lambda>-None-False-False] SKIPPED [ 44%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-<lambda>-True-True] SKIPPED [ 44%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-<lambda>-True-False] SKIPPED [ 44%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-<lambda>-False-True] SKIPPED [ 45%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-<lambda>-False-False] SKIPPED [ 45%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-None-True-True] SKIPPED [ 45%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-None-True-False] SKIPPED [ 45%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-None-False-True] SKIPPED [ 45%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-None-None-False-False] SKIPPED [ 46%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-<lambda>-None-True-True] SKIPPED [ 46%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-<lambda>-None-True-False] SKIPPED [ 46%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-<lambda>-None-False-True] SKIPPED [ 46%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-None-False-<lambda>-None-False-False] SKIPPED [ 46%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 46%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 47%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 47%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 47%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-None-True-True] SKIPPED [ 47%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-None-True-False] SKIPPED [ 47%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-None-False-True] SKIPPED [ 48%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-None-None-False-False] SKIPPED [ 48%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 48%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 48%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 48%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 48%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 49%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 49%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 49%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 49%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-None-True-True] SKIPPED [ 49%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-None-True-False] SKIPPED [ 50%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-None-False-True] SKIPPED [ 50%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-None-None-False-False] SKIPPED [ 50%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 50%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 50%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 51%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[True-<lambda>-<lambda>-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 51%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-<lambda>-True-True] SKIPPED [ 51%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-<lambda>-True-False] SKIPPED [ 51%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-<lambda>-False-True] SKIPPED [ 51%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-<lambda>-False-False] SKIPPED [ 51%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-None-True-True] SKIPPED [ 52%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-None-True-False] SKIPPED [ 52%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-None-False-True] SKIPPED [ 52%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-None-None-False-False] SKIPPED [ 52%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-<lambda>-None-True-True] SKIPPED [ 52%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-<lambda>-None-True-False] SKIPPED [ 53%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-<lambda>-None-False-True] SKIPPED [ 53%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-True-<lambda>-None-False-False] SKIPPED [ 53%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-<lambda>-True-True] SKIPPED [ 53%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-<lambda>-True-False] SKIPPED [ 53%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-<lambda>-False-True] SKIPPED [ 53%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-<lambda>-False-False] SKIPPED [ 54%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-None-True-True] SKIPPED [ 54%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-None-True-False] SKIPPED [ 54%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-None-False-True] SKIPPED [ 54%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-None-None-False-False] SKIPPED [ 54%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-<lambda>-None-True-True] SKIPPED [ 55%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-<lambda>-None-True-False] SKIPPED [ 55%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-<lambda>-None-False-True] SKIPPED [ 55%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-None-False-<lambda>-None-False-False] SKIPPED [ 55%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 55%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 55%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 56%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 56%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-None-True-True] SKIPPED [ 56%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-None-True-False] SKIPPED [ 56%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-None-False-True] SKIPPED [ 56%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-None-None-False-False] SKIPPED [ 57%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 57%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 57%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 57%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 57%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 57%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 58%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 58%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 58%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-None-True-True] SKIPPED [ 58%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-None-True-False] SKIPPED [ 58%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-None-False-True] SKIPPED [ 59%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-None-None-False-False] SKIPPED [ 59%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 59%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 59%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 59%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-None-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 60%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-<lambda>-True-True] SKIPPED [ 60%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-<lambda>-True-False] SKIPPED [ 60%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-<lambda>-False-True] SKIPPED [ 60%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-<lambda>-False-False] SKIPPED [ 60%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-None-True-True] SKIPPED [ 60%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-None-True-False] SKIPPED [ 61%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-None-False-True] SKIPPED [ 61%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-None-None-False-False] SKIPPED [ 61%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-<lambda>-None-True-True] SKIPPED [ 61%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-<lambda>-None-True-False] SKIPPED [ 61%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-<lambda>-None-False-True] SKIPPED [ 62%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-True-<lambda>-None-False-False] SKIPPED [ 62%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-<lambda>-True-True] SKIPPED [ 62%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-<lambda>-True-False] SKIPPED [ 62%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-<lambda>-False-True] SKIPPED [ 62%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-<lambda>-False-False] SKIPPED [ 62%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-None-True-True] SKIPPED [ 63%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-None-True-False] SKIPPED [ 63%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-None-False-True] SKIPPED [ 63%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-None-None-False-False] SKIPPED [ 63%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-<lambda>-None-True-True] SKIPPED [ 63%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-<lambda>-None-True-False] SKIPPED [ 64%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-<lambda>-None-False-True] SKIPPED [ 64%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-None-False-<lambda>-None-False-False] SKIPPED [ 64%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 64%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 64%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 64%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 65%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-None-True-True] SKIPPED [ 65%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-None-True-False] SKIPPED [ 65%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-None-False-True] SKIPPED [ 65%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-None-None-False-False] SKIPPED [ 65%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 66%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 66%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 66%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 66%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 66%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 66%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 67%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 67%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-None-True-True] SKIPPED [ 67%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-None-True-False] SKIPPED [ 67%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-None-False-True] SKIPPED [ 67%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-None-None-False-False] SKIPPED [ 68%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 68%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 68%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 68%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-None-<lambda>-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 68%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-<lambda>-True-True] SKIPPED [ 68%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-<lambda>-True-False] SKIPPED [ 69%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-<lambda>-False-True] SKIPPED [ 69%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-<lambda>-False-False] SKIPPED [ 69%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-None-True-True] SKIPPED [ 69%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-None-True-False] SKIPPED [ 69%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-None-False-True] SKIPPED [ 70%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-None-None-False-False] SKIPPED [ 70%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-<lambda>-None-True-True] SKIPPED [ 70%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-<lambda>-None-True-False] SKIPPED [ 70%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-<lambda>-None-False-True] SKIPPED [ 70%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-True-<lambda>-None-False-False] SKIPPED [ 71%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-<lambda>-True-True] SKIPPED [ 71%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-<lambda>-True-False] SKIPPED [ 71%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-<lambda>-False-True] SKIPPED [ 71%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-<lambda>-False-False] SKIPPED [ 71%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-None-True-True] SKIPPED [ 71%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-None-True-False] SKIPPED [ 72%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-None-False-True] SKIPPED [ 72%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-None-None-False-False] SKIPPED [ 72%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-<lambda>-None-True-True] SKIPPED [ 72%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-<lambda>-None-True-False] SKIPPED [ 72%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-<lambda>-None-False-True] SKIPPED [ 73%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-None-False-<lambda>-None-False-False] SKIPPED [ 73%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 73%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 73%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 73%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 73%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-None-True-True] SKIPPED [ 74%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-None-True-False] SKIPPED [ 74%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-None-False-True] SKIPPED [ 74%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-None-None-False-False] SKIPPED [ 74%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 74%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 75%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 75%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 75%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 75%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 75%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 75%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 76%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-None-True-True] SKIPPED [ 76%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-None-True-False] SKIPPED [ 76%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-None-False-True] SKIPPED [ 76%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-None-None-False-False] SKIPPED [ 76%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 77%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 77%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 77%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-None-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 77%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-<lambda>-True-True] SKIPPED [ 77%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-<lambda>-True-False] SKIPPED [ 77%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-<lambda>-False-True] SKIPPED [ 78%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-<lambda>-False-False] SKIPPED [ 78%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-None-True-True] SKIPPED [ 78%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-None-True-False] SKIPPED [ 78%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-None-False-True] SKIPPED [ 78%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-None-None-False-False] SKIPPED [ 79%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-<lambda>-None-True-True] SKIPPED [ 79%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-<lambda>-None-True-False] SKIPPED [ 79%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-<lambda>-None-False-True] SKIPPED [ 79%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-True-<lambda>-None-False-False] SKIPPED [ 79%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-<lambda>-True-True] SKIPPED [ 80%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-<lambda>-True-False] SKIPPED [ 80%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-<lambda>-False-True] SKIPPED [ 80%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-<lambda>-False-False] SKIPPED [ 80%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-None-True-True] SKIPPED [ 80%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-None-True-False] SKIPPED [ 80%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-None-False-True] SKIPPED [ 81%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-None-None-False-False] SKIPPED [ 81%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-<lambda>-None-True-True] SKIPPED [ 81%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-<lambda>-None-True-False] SKIPPED [ 81%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-<lambda>-None-False-True] SKIPPED [ 81%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-None-False-<lambda>-None-False-False] SKIPPED [ 82%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-<lambda>-True-True] SKIPPED [ 82%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-<lambda>-True-False] SKIPPED [ 82%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-<lambda>-False-True] SKIPPED [ 82%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-<lambda>-False-False] SKIPPED [ 82%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-None-True-True] SKIPPED [ 82%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-None-True-False] SKIPPED [ 83%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-None-False-True] SKIPPED [ 83%] | |
| [2025-09-03T19:51:49Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-None-None-False-False] SKIPPED [ 83%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-<lambda>-None-True-True] SKIPPED [ 83%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-<lambda>-None-True-False] SKIPPED [ 83%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-<lambda>-None-False-True] SKIPPED [ 84%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-True-<lambda>-None-False-False] SKIPPED [ 84%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-<lambda>-True-True] SKIPPED [ 84%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-<lambda>-True-False] SKIPPED [ 84%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-<lambda>-False-True] SKIPPED [ 84%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-<lambda>-False-False] SKIPPED [ 84%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-None-True-True] SKIPPED [ 85%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-None-True-False] SKIPPED [ 85%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-None-False-True] SKIPPED [ 85%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-None-None-False-False] SKIPPED [ 85%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-<lambda>-None-True-True] SKIPPED [ 85%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-<lambda>-None-True-False] SKIPPED [ 86%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-<lambda>-None-False-True] SKIPPED [ 86%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance[False-<lambda>-<lambda>-<lambda>-False-<lambda>-None-False-False] SKIPPED [ 86%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance_cloud PASSED [ 86%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_load_from_instance.py::test_load_from_instance_with_downstream_asset_errors PASSED [ 86%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[False-False-True] PASSED [ 86%] | |
| [2025-09-03T19:51:50Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[False-False-False] PASSED [ 87%] | |
| [2025-09-03T19:51:51Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[False-True-True] PASSED [ 87%] | |
| [2025-09-03T19:51:51Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[False-True-False] PASSED [ 87%] | |
| [2025-09-03T19:51:51Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[True-False-True] PASSED [ 87%] | |
| [2025-09-03T19:51:52Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[True-False-False] PASSED [ 87%] | |
| [2025-09-03T19:51:52Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[True-True-True] PASSED [ 88%] | |
| [2025-09-03T19:51:52Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op[True-True-False] PASSED [ 88%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_ops.py::test_airbyte_sync_op_cloud PASSED [ 88%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_trigger_connection[True] PASSED [ 88%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_trigger_connection_fail[True] PASSED [ 88%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-True-succeeded] PASSED [ 88%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-True-cancelled] PASSED [ 89%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-True-error] PASSED [ 89%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-True-unrecognized] PASSED [ 89%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-False-succeeded] PASSED [ 89%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-False-cancelled] PASSED [ 89%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-False-error] PASSED [ 90%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[True-False-unrecognized] PASSED [ 90%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_start_sync_bad_out_fail[True] PASSED [ 90%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_get_connection_details_bad_out_fail[True] PASSED [ 90%] | |
| [2025-09-03T19:51:53Z] dagster_airbyte_tests/test_resources.py::test_get_job_status_bad_out_fail[True-True] PASSED [ 90%] | |
| [2025-09-03T19:51:54Z] dagster_airbyte_tests/test_resources.py::test_get_job_status_bad_out_fail[True-False] PASSED [ 91%] | |
| [2025-09-03T19:51:54Z] dagster_airbyte_tests/test_resources.py::test_logging_multi_attempts[True] PASSED [ 91%] | |
| [2025-09-03T19:51:54Z] dagster_airbyte_tests/test_resources.py::test_assets[True-True] PASSED [ 91%] | |
| [2025-09-03T19:51:54Z] dagster_airbyte_tests/test_resources.py::test_assets[True-False] PASSED [ 91%] | |
| [2025-09-03T19:52:04Z] dagster_airbyte_tests/test_resources.py::test_assets_with_mapping[True-True] PASSED [ 91%] | |
| [2025-09-03T19:52:14Z] dagster_airbyte_tests/test_resources.py::test_assets_with_mapping[True-False] PASSED [ 91%] | |
| [2025-09-03T19:52:16Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[True-True-True] PASSED [ 92%] | |
| [2025-09-03T19:52:18Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[True-True-False] PASSED [ 92%] | |
| [2025-09-03T19:52:20Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[True-False-True] PASSED [ 92%] | |
| [2025-09-03T19:52:22Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[True-False-False] PASSED [ 92%] | |
| [2025-09-03T19:52:24Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[True-True-True] PASSED [ 92%] | |
| [2025-09-03T19:52:26Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[True-True-False] PASSED [ 93%] | |
| [2025-09-03T19:52:28Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[True-False-True] PASSED [ 93%] | |
| [2025-09-03T19:52:30Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[True-False-False] PASSED [ 93%] | |
| [2025-09-03T19:52:30Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[True-True-True] PASSED [ 93%] | |
| [2025-09-03T19:52:30Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[True-True-False] PASSED [ 93%] | |
| [2025-09-03T19:52:30Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[True-False-True] PASSED [ 93%] | |
| [2025-09-03T19:52:30Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[True-False-False] PASSED [ 94%] | |
| [2025-09-03T19:52:30Z] dagster_airbyte_tests/test_resources.py::test_trigger_connection[False] PASSED [ 94%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_trigger_connection_fail[False] PASSED [ 94%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-True-succeeded] PASSED [ 94%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-True-cancelled] PASSED [ 94%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-True-error] PASSED [ 95%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-True-unrecognized] PASSED [ 95%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-False-succeeded] PASSED [ 95%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-False-cancelled] PASSED [ 95%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-False-error] PASSED [ 95%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll[False-False-unrecognized] PASSED [ 95%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_start_sync_bad_out_fail[False] PASSED [ 96%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_get_connection_details_bad_out_fail[False] PASSED [ 96%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_get_job_status_bad_out_fail[False-True] PASSED [ 96%] | |
| [2025-09-03T19:52:31Z] dagster_airbyte_tests/test_resources.py::test_get_job_status_bad_out_fail[False-False] PASSED [ 96%] | |
| [2025-09-03T19:52:32Z] dagster_airbyte_tests/test_resources.py::test_logging_multi_attempts[False] PASSED [ 96%] | |
| [2025-09-03T19:52:32Z] dagster_airbyte_tests/test_resources.py::test_assets[False-True] PASSED [ 97%] | |
| [2025-09-03T19:52:32Z] dagster_airbyte_tests/test_resources.py::test_assets[False-False] PASSED [ 97%] | |
| [2025-09-03T19:52:42Z] dagster_airbyte_tests/test_resources.py::test_assets_with_mapping[False-True] PASSED [ 97%] | |
| [2025-09-03T19:52:52Z] dagster_airbyte_tests/test_resources.py::test_assets_with_mapping[False-False] PASSED [ 97%] | |
| [2025-09-03T19:52:54Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[False-True-True] PASSED [ 97%] | |
| [2025-09-03T19:52:56Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[False-True-False] PASSED [ 97%] | |
| [2025-09-03T19:52:58Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[False-False-True] PASSED [ 98%] | |
| [2025-09-03T19:53:00Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_termination[False-False-False] PASSED [ 98%] | |
| [2025-09-03T19:53:02Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[False-True-True] PASSED [ 98%] | |
| [2025-09-03T19:53:04Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[False-True-False] PASSED [ 98%] | |
| [2025-09-03T19:53:06Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[False-False-True] PASSED [ 98%] | |
| [2025-09-03T19:53:08Z] dagster_airbyte_tests/test_resources.py::test_sync_and_poll_timeout[False-False-False] PASSED [ 99%] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[False-True-True] PASSED [ 99%] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[False-True-False] PASSED [ 99%] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[False-False-True] PASSED [ 99%] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/test_resources.py::test_normalization_support[False-False-False] PASSED [ 99%] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/test_version.py::test_version PASSED [100%] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ==================================== ERRORS ==================================== | |
| [2025-09-03T19:53:09Z] ____________ ERROR at teardown of test_fetch_airbyte_workspace_data ____________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c592a4620>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ---------------------------- Captured stdout setup ----------------------------- | |
| [2025-09-03T19:53:09Z] 401 Client Error: Unauthorized for url: https://api.buildkite.com/v2/analytics/organizations/dagster/suites/None/tests/muted | |
| [2025-09-03T19:53:09Z] 401 Client Error: Unauthorized for url: https://api.buildkite.com/v2/analytics/organizations/dagster/suites/None/tests/skipped | |
| [2025-09-03T19:53:09Z] __________________ ERROR at teardown of test_translator_spec ___________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5744c620>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ________________ ERROR at teardown of test_connection_selector _________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57409250>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] __________ ERROR at teardown of test_cached_load_spec_single_resource __________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57409730>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ________ ERROR at teardown of test_cached_load_spec_multiple_resources _________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57408650>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ________ ERROR at teardown of test_cached_load_spec_with_asset_factory _________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c579bd8e0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _____________ ERROR at teardown of test_translator_custom_metadata _____________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57478620>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] __ ERROR at teardown of test_translator_custom_group_name_with_asset_factory ___ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57479880>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_translator_invariant_group_name_with_asset_decorator _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57473bf0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ________________ ERROR at teardown of test_basic_component_load ________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57470c80>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmplc1e6hws/src/sandbox_module_uZhh3mS2/defs/sandbox_module_f9zQO9Mm. | |
| [2025-09-03T19:53:09Z] _____ ERROR at teardown of test_basic_component_filter[single_connection] ______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572d5580>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmp_crt3h1x/src/sandbox_module_FWjpEI3C/defs/sandbox_module_oVOyk3tS. | |
| [2025-09-03T19:53:09Z] __ ERROR at teardown of test_basic_component_filter[single_connection_by_id] ___ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572d74a0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpy5jyjcc4/src/sandbox_module_VG2ZT77V/defs/sandbox_module_AYtmgDW9. | |
| [2025-09-03T19:53:09Z] _______ ERROR at teardown of test_basic_component_filter[no_connections] _______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572d9be0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpp81mm630/src/sandbox_module_M6cFTN9F/defs/sandbox_module_YKcmLkBD. | |
| [2025-09-03T19:53:09Z] ______ ERROR at teardown of test_basic_component_filter[junk_connection] _______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c592d6a80>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmp6wwz5hr3/src/sandbox_module_hgZCsJii/defs/sandbox_module_R0RTyt24. | |
| [2025-09-03T19:53:09Z] ______ ERROR at teardown of test_custom_filter_fn_python[all_connections] ______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572e2360>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _______ ERROR at teardown of test_custom_filter_fn_python[filter_by_id] ________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572e9280>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ______ ERROR at teardown of test_custom_filter_fn_python[no_connections] _______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572e9460>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ___ ERROR at teardown of TestAirbyteTranslation.test_translation[group_name] ___ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572ed130>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmp2hgvmc9v/src/sandbox_module_Z0BTHNK4/defs/sandbox_module_KRbA7Qfe. | |
| [2025-09-03T19:53:09Z] _____ ERROR at teardown of TestAirbyteTranslation.test_translation[owners] _____ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572f21b0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmps4ys1wy7/src/sandbox_module_BhdRv93j/defs/sandbox_module_xyfyQemY. | |
| [2025-09-03T19:53:09Z] ______ ERROR at teardown of TestAirbyteTranslation.test_translation[tags] ______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572f3470>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmph_2ovvws/src/sandbox_module_FMgQtdMM/defs/sandbox_module_Ao51EFTP. | |
| [2025-09-03T19:53:09Z] _____ ERROR at teardown of TestAirbyteTranslation.test_translation[kinds] ______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c571ffe00>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpbf79ph7p/src/sandbox_module_DnSW6YhP/defs/sandbox_module_BxLRH4k8. | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of TestAirbyteTranslation.test_translation[tags-and-kinds] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c571ffb60>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmphlhr9rnj/src/sandbox_module_Yk30BoJJ/defs/sandbox_module_LLRTyw8g. | |
| [2025-09-03T19:53:09Z] __ ERROR at teardown of TestAirbyteTranslation.test_translation[code-version] __ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572066f0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpukdmj7fx/src/sandbox_module_PMhbdYUi/defs/sandbox_module_sPsHBCiH. | |
| [2025-09-03T19:53:09Z] __ ERROR at teardown of TestAirbyteTranslation.test_translation[description] ___ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5720c470>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmp0_lq0oci/src/sandbox_module_hJJPv3jC/defs/sandbox_module_yprgBQX3. | |
| [2025-09-03T19:53:09Z] ____ ERROR at teardown of TestAirbyteTranslation.test_translation[metadata] ____ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57211c40>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmphlma_qie/src/sandbox_module_TPvuC1Mt/defs/sandbox_module_WiUlbsU5. | |
| [2025-09-03T19:53:09Z] ______ ERROR at teardown of TestAirbyteTranslation.test_translation[deps] ______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5721bec0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmp7nrspwkz/src/sandbox_module_mX3W7R63/defs/sandbox_module_Wn2Fm647. | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of TestAirbyteTranslation.test_translation[automation_condition] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57220230>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpl3xd1tji/src/sandbox_module_AXHg6EKl/defs/sandbox_module_SW3s3SQL. | |
| [2025-09-03T19:53:09Z] ______ ERROR at teardown of TestAirbyteTranslation.test_translation[key] _______ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57226c30>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmprdcobu7n/src/sandbox_module_QuhwkkHp/defs/sandbox_module_gYaopeWh. | |
| [2025-09-03T19:53:09Z] ___ ERROR at teardown of TestAirbyteTranslation.test_translation[key_prefix] ___ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5722acc0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpdg3g9rkd/src/sandbox_module_OdPBcT5f/defs/sandbox_module_CauMsQee. | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of TestAirbyteTranslation.test_translation[partitions_defs] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57233860>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmpj32kr4ef/src/sandbox_module_SWmJGKhW/defs/sandbox_module_a9nM2gC2. | |
| [2025-09-03T19:53:09Z] ________________ ERROR at teardown of test_refresh_access_token ________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57237650>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _______________ ERROR at teardown of test_basic_resource_request _______________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57207ef0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826'), ('POST', 'https://api.airbyte.com/v1/jobs'), ('GET', 'https://api.airbyte.com/v1/jobs/12345'), ('DELETE', 'https://api.airbyte.com/v1/jobs/12345')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_job_status[job_status_succeeded] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c572390d0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_job_status[job_status_cancelled] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5723af00>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_job_status[job_status_error] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57246f30>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_job_status[job_status_failed] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57247ec0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_job_status[job_status_unrecognized] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c57245340>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_poll_process[sync_short_success] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c571e39e0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_poll_process[sync_short_failure] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c566602f0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_poll_process[sync_medium_success] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c56663e60>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_poll_process[sync_medium_failure] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c566617f0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_poll_process[sync_long_success] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c56602930>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_cancel_on_termination[cancel_on_termination_true] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c566020c0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_airbyte_sync_and_poll_client_cancel_on_termination[cancel_on_termination_false] _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5666e3c0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _ ERROR at teardown of test_fivetran_airbyte_cloud_sync_and_poll_materialization_method _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c5666cf50>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _______ ERROR at teardown of test_airbyte_workspace_data_to_table_props ________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c569dc950>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _______________ ERROR at teardown of test_translator_asset_spec ________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c569df740>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] _________________ ERROR at teardown of test_custom_translator __________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > lambda: ihook(item=item, **kwds), when=when, reraise=reraise | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/flaky/flaky_pytest_plugin.py:146: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/conftest.py:216: in base_api_mocks_fixture | |
| [2025-09-03T19:53:09Z] with responses.RequestsMock() as response: | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:929: in __exit__ | |
| [2025-09-03T19:53:09Z] self.stop(allow_assert=success) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <responses.RequestsMock object at 0x7f8c56a05ee0>, allow_assert = True | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def stop(self, allow_assert: bool = True) -> None: | |
| [2025-09-03T19:53:09Z] if self._patcher: | |
| [2025-09-03T19:53:09Z] # prevent stopping unstarted patchers | |
| [2025-09-03T19:53:09Z] self._patcher.stop() | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # once patcher is stopped, clean it. This is required to create a new | |
| [2025-09-03T19:53:09Z] # fresh patcher on self.start() | |
| [2025-09-03T19:53:09Z] self._patcher = None | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not self.assert_all_requests_are_fired: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if not allow_assert: | |
| [2025-09-03T19:53:09Z] return | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] not_called = [m for m in self.registered() if m.call_count == 0] | |
| [2025-09-03T19:53:09Z] if not_called: | |
| [2025-09-03T19:53:09Z] > raise AssertionError( | |
| [2025-09-03T19:53:09Z] "Not all requests have been executed {0!r}".format( | |
| [2025-09-03T19:53:09Z] [(match.method, match.url) for match in not_called] | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E AssertionError: Not all requests have been executed [('POST', 'https://api.airbyte.com/v1/applications/token'), ('GET', 'https://api.airbyte.com/v1/connections'), ('POST', 'https://cloud.airbyte.com/api/v1/connections/get'), ('GET', 'https://api.airbyte.com/v1/destinations/18dccc91-0ab1-4f72-9ed7-0b8fc27c5826')] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/responses/__init__.py:1126: AssertionError | |
| [2025-09-03T19:53:09Z] =================================== FAILURES =================================== | |
| [2025-09-03T19:53:09Z] ______________________ test_fetch_airbyte_workspace_data _______________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c592a4620> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_fetch_airbyte_workspace_data( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:09Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:32: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744ecc0> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744f...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744f1a0>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744ff80>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] ---------------------------- Captured stdout setup ----------------------------- | |
| [2025-09-03T19:53:09Z] 401 Client Error: Unauthorized for url: https://api.buildkite.com/v2/analytics/organizations/dagster/suites/None/tests/muted | |
| [2025-09-03T19:53:09Z] 401 Client Error: Unauthorized for url: https://api.buildkite.com/v2/analytics/organizations/dagster/suites/None/tests/skipped | |
| [2025-09-03T19:53:09Z] _____________________________ test_translator_spec _____________________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c5744c620> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_translator_spec( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:49: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744c0e0> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744f...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744fda0>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5744fce0>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] ___________________________ test_connection_selector ___________________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57409250> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_connection_selector( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:76: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740aed0> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740b...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740a480>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57408c50>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] ____________________ test_cached_load_spec_single_resource _____________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57409730> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_cached_load_spec_single_resource( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:107: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740baa0> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740b...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740b680>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740b6b0>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] ___________________ test_cached_load_spec_multiple_resources ___________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57408650> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_cached_load_spec_multiple_resources( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:128: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5740a780> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57408...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57408b90>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c574092e0>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] ___________________ test_cached_load_spec_with_asset_factory ___________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c579bd8e0> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_cached_load_spec_with_asset_factory( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:156: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57479e50> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57478...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c574785c0>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57478770>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] _______________________ test_translator_custom_metadata ________________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57478620> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_translator_custom_metadata( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:183: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57478500> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57479...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5747b230>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5747a330>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] _____________ test_translator_custom_group_name_with_asset_factory _____________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57479880> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_translator_custom_group_name_with_asset_factory( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:212: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5747a690> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5747a...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5747ab10>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5747ab40>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] __________ test_translator_invariant_group_name_with_asset_decorator ___________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57473bf0> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_translator_invariant_group_name_with_asset_decorator( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with environ( | |
| [2025-09-03T19:53:09Z] {"AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET} | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] > workspace = AirbyteWorkspace( | |
| [2025-09-03T19:53:09Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] client_id=EnvVar("AIRBYTE_CLIENT_ID"), | |
| [2025-09-03T19:53:09Z] client_secret=EnvVar("AIRBYTE_CLIENT_SECRET"), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_asset_specs.py:233: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:09Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:09Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:09Z] config_dict = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {'client_id': 'AIRBYTE_CLIENT_ID', 'client_secret': 'AIRBYTE_CLIENT_SECRET', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:09Z] field_key = 'password' | |
| [2025-09-03T19:53:09Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57470230> | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57472...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57473890>), ...} | |
| [2025-09-03T19:53:09Z] config_key = 'password', value = 'AIRBYTE_CLIENT_SECRET' | |
| [2025-09-03T19:53:09Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57473b00>) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:09Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:09Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:09Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:09Z] """ | |
| [2025-09-03T19:53:09Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:09Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:09Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:09Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:09Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:09Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:09Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:09Z] field = None | |
| [2025-09-03T19:53:09Z] field_key = config_key | |
| [2025-09-03T19:53:09Z] if field_info: | |
| [2025-09-03T19:53:09Z] field_key, field = field_info | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if field and field.discriminator: | |
| [2025-09-03T19:53:09Z] nested_dict = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:09Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:09Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:09Z] discriminator_key, | |
| [2025-09-03T19:53:09Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:09Z] check.invariant( | |
| [2025-09-03T19:53:09Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:09Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:09Z] **nested_values, | |
| [2025-09-03T19:53:09Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:09Z] elif ( | |
| [2025-09-03T19:53:09Z] field | |
| [2025-09-03T19:53:09Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:09Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:09Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:09Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:09Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] value | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] else: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:09Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:09Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:09Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:09Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:09Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:09Z] E rest_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] E configuration_api_base_url | |
| [2025-09-03T19:53:09Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:09Z] __________________________ test_basic_component_load ___________________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def derive_model_type( | |
| [2025-09-03T19:53:09Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:09Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:09Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:09Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields: dict[ | |
| [2025-09-03T19:53:09Z] str, Any | |
| [2025-09-03T19:53:09Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:09Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:09Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:09Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] field_infos = [] | |
| [2025-09-03T19:53:09Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:09Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:09Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:09Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:09Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:09Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:09Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:09Z] default_value = ( | |
| [2025-09-03T19:53:09Z] annotation_info.default | |
| [2025-09-03T19:53:09Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:09Z] else _Unset | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] default=default_value, | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # make all fields injectable | |
| [2025-09-03T19:53:09Z] if field_type != str: | |
| [2025-09-03T19:53:09Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:09Z] field_type, | |
| [2025-09-03T19:53:09Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:09Z] model_name, | |
| [2025-09-03T19:53:09Z] __base__=Model, | |
| [2025-09-03T19:53:09Z] **model_fields, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:09Z] return meta( | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:09Z] complete_model_class( | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:09Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:09Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:09Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:09Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:09Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:09Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:09Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:09Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:09Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:09Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:09Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:09Z] return self.match_type(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:09Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:09Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:09Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:09Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:09Z] return self.match_type(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:09Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c571589a0> | |
| [2025-09-03T19:53:09Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:09Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:09Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:09Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:09Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:09Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:09Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:09Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:09Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:09Z] E | |
| [2025-09-03T19:53:09Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:09Z] E | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = ComponentTree(defs_module=<module 'sandbox_module_uZhh3mS2.defs' (namespace) from ['/tmp/tmplc1e6hws/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:09Z] path = ComponentPath(file_path=PosixPath('/tmp/tmplc1e6hws/src/sandbox_module_uZhh3mS2/defs/sandbox_module_f9zQO9Mm'), instance_key=0) | |
| [2025-09-03T19:53:09Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c57112840> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] @contextmanager | |
| [2025-09-03T19:53:09Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:09Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] > yield | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:09Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:09Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:09Z] return cls.model() | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:09Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def derive_model_type( | |
| [2025-09-03T19:53:09Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:09Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:09Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:09Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields: dict[ | |
| [2025-09-03T19:53:09Z] str, Any | |
| [2025-09-03T19:53:09Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:09Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:09Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:09Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] field_infos = [] | |
| [2025-09-03T19:53:09Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:09Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:09Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:09Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:09Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:09Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:09Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:09Z] default_value = ( | |
| [2025-09-03T19:53:09Z] annotation_info.default | |
| [2025-09-03T19:53:09Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:09Z] else _Unset | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] default=default_value, | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # make all fields injectable | |
| [2025-09-03T19:53:09Z] if field_type != str: | |
| [2025-09-03T19:53:09Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:09Z] field_type, | |
| [2025-09-03T19:53:09Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:09Z] model_name, | |
| [2025-09-03T19:53:09Z] __base__=Model, | |
| [2025-09-03T19:53:09Z] **model_fields, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:09Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:09Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57470c80> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def test_basic_component_load( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with ( | |
| [2025-09-03T19:53:09Z] environ( | |
| [2025-09-03T19:53:09Z] { | |
| [2025-09-03T19:53:09Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:09Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:09Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:09Z] defs_yaml_contents=BASIC_AIRBYTE_COMPONENT_BODY, | |
| [2025-09-03T19:53:09Z] ) as ( | |
| [2025-09-03T19:53:09Z] component, | |
| [2025-09-03T19:53:09Z] defs, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_component.py:83: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:09Z] return next(self.gen) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:09Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:09Z] return next(self.gen) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:09Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:09Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:09Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:09Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:09Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:09Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:09Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:09Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:09Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:09Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:09Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:09Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:09Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:09Z] self.gen.throw(value) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = ComponentTree(defs_module=<module 'sandbox_module_uZhh3mS2.defs' (namespace) from ['/tmp/tmplc1e6hws/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:09Z] path = ComponentPath(file_path=PosixPath('/tmp/tmplc1e6hws/src/sandbox_module_uZhh3mS2/defs/sandbox_module_f9zQO9Mm'), instance_key=0) | |
| [2025-09-03T19:53:09Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c57112840> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] @contextmanager | |
| [2025-09-03T19:53:09Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:09Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] yield | |
| [2025-09-03T19:53:09Z] except Exception as e: | |
| [2025-09-03T19:53:09Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:09Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:09Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:09Z] ) from e | |
| [2025-09-03T19:53:09Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_f9zQO9Mm[0]: | |
| [2025-09-03T19:53:09Z] E └── sandbox_module_f9zQO9Mm | |
| [2025-09-03T19:53:09Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:09Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmplc1e6hws/src/sandbox_module_uZhh3mS2/defs/sandbox_module_f9zQO9Mm. | |
| [2025-09-03T19:53:09Z] ________________ test_basic_component_filter[single_connection] ________________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def derive_model_type( | |
| [2025-09-03T19:53:09Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:09Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:09Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:09Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields: dict[ | |
| [2025-09-03T19:53:09Z] str, Any | |
| [2025-09-03T19:53:09Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:09Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:09Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:09Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] field_infos = [] | |
| [2025-09-03T19:53:09Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:09Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:09Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:09Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:09Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:09Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:09Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:09Z] default_value = ( | |
| [2025-09-03T19:53:09Z] annotation_info.default | |
| [2025-09-03T19:53:09Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:09Z] else _Unset | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] default=default_value, | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # make all fields injectable | |
| [2025-09-03T19:53:09Z] if field_type != str: | |
| [2025-09-03T19:53:09Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:09Z] field_type, | |
| [2025-09-03T19:53:09Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:09Z] model_name, | |
| [2025-09-03T19:53:09Z] __base__=Model, | |
| [2025-09-03T19:53:09Z] **model_fields, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:09Z] return meta( | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:09Z] complete_model_class( | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:09Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:09Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:09Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:09Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:09Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:09Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:09Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:09Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:09Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:09Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:09Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:09Z] return self.match_type(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:09Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:09Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:09Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:09Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:09Z] return self.match_type(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:09Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56e93240> | |
| [2025-09-03T19:53:09Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:09Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:09Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:09Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:09Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:09Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:09Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:09Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:09Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:09Z] E | |
| [2025-09-03T19:53:09Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:09Z] E | |
| [2025-09-03T19:53:09Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = ComponentTree(defs_module=<module 'sandbox_module_FWjpEI3C.defs' (namespace) from ['/tmp/tmp_crt3h1x/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:09Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp_crt3h1x/src/sandbox_module_FWjpEI3C/defs/sandbox_module_oVOyk3tS'), instance_key=0) | |
| [2025-09-03T19:53:09Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c571acd60> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] @contextmanager | |
| [2025-09-03T19:53:09Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:09Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] > yield | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:09Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:09Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:09Z] return cls.model() | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:09Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] def derive_model_type( | |
| [2025-09-03T19:53:09Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:09Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:09Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:09Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields: dict[ | |
| [2025-09-03T19:53:09Z] str, Any | |
| [2025-09-03T19:53:09Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:09Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:09Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:09Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] field_infos = [] | |
| [2025-09-03T19:53:09Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:09Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:09Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:09Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:09Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:09Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:09Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:09Z] default_value = ( | |
| [2025-09-03T19:53:09Z] annotation_info.default | |
| [2025-09-03T19:53:09Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:09Z] else _Unset | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] default=default_value, | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:09Z] field_infos.append( | |
| [2025-09-03T19:53:09Z] Field( | |
| [2025-09-03T19:53:09Z] description=field_resolver.description, | |
| [2025-09-03T19:53:09Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] # make all fields injectable | |
| [2025-09-03T19:53:09Z] if field_type != str: | |
| [2025-09-03T19:53:09Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:09Z] field_type, | |
| [2025-09-03T19:53:09Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:09Z] model_name, | |
| [2025-09-03T19:53:09Z] __base__=Model, | |
| [2025-09-03T19:53:09Z] **model_fields, | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:09Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:09Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572d5580> | |
| [2025-09-03T19:53:09Z] connection_selector = {'by_name': ['Postgres To Snowflake']}, num_assets = 2 | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:09Z] "connection_selector, num_assets", | |
| [2025-09-03T19:53:09Z] [ | |
| [2025-09-03T19:53:09Z] ({"by_name": ["Postgres To Snowflake"]}, 2), | |
| [2025-09-03T19:53:09Z] ({"by_id": [TEST_CONNECTION_ID]}, 2), | |
| [2025-09-03T19:53:09Z] ({"by_id": []}, 0), | |
| [2025-09-03T19:53:09Z] ({"by_name": ["Postgres To Snowflake", "junk"]}, 2), | |
| [2025-09-03T19:53:09Z] ], | |
| [2025-09-03T19:53:09Z] ids=[ | |
| [2025-09-03T19:53:09Z] "single_connection", | |
| [2025-09-03T19:53:09Z] "single_connection_by_id", | |
| [2025-09-03T19:53:09Z] "no_connections", | |
| [2025-09-03T19:53:09Z] "junk_connection", | |
| [2025-09-03T19:53:09Z] ], | |
| [2025-09-03T19:53:09Z] ) | |
| [2025-09-03T19:53:09Z] def test_basic_component_filter( | |
| [2025-09-03T19:53:09Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:09Z] connection_selector: dict[str, Any], | |
| [2025-09-03T19:53:09Z] num_assets: int, | |
| [2025-09-03T19:53:09Z] ) -> None: | |
| [2025-09-03T19:53:09Z] with ( | |
| [2025-09-03T19:53:09Z] environ( | |
| [2025-09-03T19:53:09Z] { | |
| [2025-09-03T19:53:09Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:09Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:09Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:09Z] } | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:09Z] defs_yaml_contents=deep_merge_dicts( | |
| [2025-09-03T19:53:09Z] BASIC_AIRBYTE_COMPONENT_BODY, | |
| [2025-09-03T19:53:09Z] {"attributes": {"connection_selector": connection_selector}}, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ) as ( | |
| [2025-09-03T19:53:09Z] component, | |
| [2025-09-03T19:53:09Z] defs, | |
| [2025-09-03T19:53:09Z] ), | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_component.py:124: | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:09Z] return next(self.gen) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:09Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:09Z] return next(self.gen) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:09Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:09Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:09Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:09Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:09Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:09Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:09Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:09Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:09Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:09Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:09Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:09Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:09Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:09Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:09Z] self.gen.throw(value) | |
| [2025-09-03T19:53:09Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] self = ComponentTree(defs_module=<module 'sandbox_module_FWjpEI3C.defs' (namespace) from ['/tmp/tmp_crt3h1x/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:09Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp_crt3h1x/src/sandbox_module_FWjpEI3C/defs/sandbox_module_oVOyk3tS'), instance_key=0) | |
| [2025-09-03T19:53:09Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c571acd60> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] @contextmanager | |
| [2025-09-03T19:53:09Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:09Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:09Z] ): | |
| [2025-09-03T19:53:09Z] try: | |
| [2025-09-03T19:53:09Z] yield | |
| [2025-09-03T19:53:09Z] except Exception as e: | |
| [2025-09-03T19:53:09Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:09Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:09Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:09Z] ) from e | |
| [2025-09-03T19:53:09Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_oVOyk3tS[0]: | |
| [2025-09-03T19:53:09Z] E └── sandbox_module_oVOyk3tS | |
| [2025-09-03T19:53:09Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:09Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:09Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:09Z] Creating defs at /tmp/tmp_crt3h1x/src/sandbox_module_FWjpEI3C/defs/sandbox_module_oVOyk3tS. | |
| [2025-09-03T19:53:09Z] _____________ test_basic_component_filter[single_connection_by_id] _____________ | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:09Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:09Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c5719d800> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_VG2ZT77V.defs' (namespace) from ['/tmp/tmpy5jyjcc4/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpy5jyjcc4/src/sandbox_module_VG2ZT77V/defs/sandbox_module_AYtmgDW9'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c571ada80> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572d74a0> | |
| [2025-09-03T19:53:10Z] connection_selector = {'by_id': ['9924bcd0-99be-453d-ba47-c2c9766f7da5']} | |
| [2025-09-03T19:53:10Z] num_assets = 2 | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "connection_selector, num_assets", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] ({"by_name": ["Postgres To Snowflake"]}, 2), | |
| [2025-09-03T19:53:10Z] ({"by_id": [TEST_CONNECTION_ID]}, 2), | |
| [2025-09-03T19:53:10Z] ({"by_id": []}, 0), | |
| [2025-09-03T19:53:10Z] ({"by_name": ["Postgres To Snowflake", "junk"]}, 2), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "single_connection", | |
| [2025-09-03T19:53:10Z] "single_connection_by_id", | |
| [2025-09-03T19:53:10Z] "no_connections", | |
| [2025-09-03T19:53:10Z] "junk_connection", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_basic_component_filter( | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] connection_selector: dict[str, Any], | |
| [2025-09-03T19:53:10Z] num_assets: int, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=deep_merge_dicts( | |
| [2025-09-03T19:53:10Z] BASIC_AIRBYTE_COMPONENT_BODY, | |
| [2025-09-03T19:53:10Z] {"attributes": {"connection_selector": connection_selector}}, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:124: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_VG2ZT77V.defs' (namespace) from ['/tmp/tmpy5jyjcc4/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpy5jyjcc4/src/sandbox_module_VG2ZT77V/defs/sandbox_module_AYtmgDW9'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c571ada80> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_AYtmgDW9[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_AYtmgDW9 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpy5jyjcc4/src/sandbox_module_VG2ZT77V/defs/sandbox_module_AYtmgDW9. | |
| [2025-09-03T19:53:10Z] _________________ test_basic_component_filter[no_connections] __________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56df0770> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_M6cFTN9F.defs' (namespace) from ['/tmp/tmpp81mm630/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpp81mm630/src/sandbox_module_M6cFTN9F/defs/sandbox_module_YKcmLkBD'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56de4180> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572d9be0> | |
| [2025-09-03T19:53:10Z] connection_selector = {'by_id': []}, num_assets = 0 | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "connection_selector, num_assets", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] ({"by_name": ["Postgres To Snowflake"]}, 2), | |
| [2025-09-03T19:53:10Z] ({"by_id": [TEST_CONNECTION_ID]}, 2), | |
| [2025-09-03T19:53:10Z] ({"by_id": []}, 0), | |
| [2025-09-03T19:53:10Z] ({"by_name": ["Postgres To Snowflake", "junk"]}, 2), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "single_connection", | |
| [2025-09-03T19:53:10Z] "single_connection_by_id", | |
| [2025-09-03T19:53:10Z] "no_connections", | |
| [2025-09-03T19:53:10Z] "junk_connection", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_basic_component_filter( | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] connection_selector: dict[str, Any], | |
| [2025-09-03T19:53:10Z] num_assets: int, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=deep_merge_dicts( | |
| [2025-09-03T19:53:10Z] BASIC_AIRBYTE_COMPONENT_BODY, | |
| [2025-09-03T19:53:10Z] {"attributes": {"connection_selector": connection_selector}}, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:124: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_M6cFTN9F.defs' (namespace) from ['/tmp/tmpp81mm630/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpp81mm630/src/sandbox_module_M6cFTN9F/defs/sandbox_module_YKcmLkBD'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56de4180> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_YKcmLkBD[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_YKcmLkBD | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpp81mm630/src/sandbox_module_M6cFTN9F/defs/sandbox_module_YKcmLkBD. | |
| [2025-09-03T19:53:10Z] _________________ test_basic_component_filter[junk_connection] _________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56df7420> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_hgZCsJii.defs' (namespace) from ['/tmp/tmp6wwz5hr3/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp6wwz5hr3/src/sandbox_module_hgZCsJii/defs/sandbox_module_R0RTyt24'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56de4e00> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c592d6a80> | |
| [2025-09-03T19:53:10Z] connection_selector = {'by_name': ['Postgres To Snowflake', 'junk']} | |
| [2025-09-03T19:53:10Z] num_assets = 2 | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "connection_selector, num_assets", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] ({"by_name": ["Postgres To Snowflake"]}, 2), | |
| [2025-09-03T19:53:10Z] ({"by_id": [TEST_CONNECTION_ID]}, 2), | |
| [2025-09-03T19:53:10Z] ({"by_id": []}, 0), | |
| [2025-09-03T19:53:10Z] ({"by_name": ["Postgres To Snowflake", "junk"]}, 2), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "single_connection", | |
| [2025-09-03T19:53:10Z] "single_connection_by_id", | |
| [2025-09-03T19:53:10Z] "no_connections", | |
| [2025-09-03T19:53:10Z] "junk_connection", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_basic_component_filter( | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] connection_selector: dict[str, Any], | |
| [2025-09-03T19:53:10Z] num_assets: int, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=deep_merge_dicts( | |
| [2025-09-03T19:53:10Z] BASIC_AIRBYTE_COMPONENT_BODY, | |
| [2025-09-03T19:53:10Z] {"attributes": {"connection_selector": connection_selector}}, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:124: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_hgZCsJii.defs' (namespace) from ['/tmp/tmp6wwz5hr3/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp6wwz5hr3/src/sandbox_module_hgZCsJii/defs/sandbox_module_R0RTyt24'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56de4e00> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_R0RTyt24[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_R0RTyt24 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmp6wwz5hr3/src/sandbox_module_hgZCsJii/defs/sandbox_module_R0RTyt24. | |
| [2025-09-03T19:53:10Z] ________________ test_custom_filter_fn_python[all_connections] _________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572e2360> | |
| [2025-09-03T19:53:10Z] filter_fn = <function <lambda> at 0x7f8c574d5940>, num_assets = 2 | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "filter_fn, num_assets", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] (lambda _: True, 2), | |
| [2025-09-03T19:53:10Z] (lambda connection: connection.id == TEST_CONNECTION_ID, 2), | |
| [2025-09-03T19:53:10Z] (lambda _: False, 0), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "all_connections", | |
| [2025-09-03T19:53:10Z] "filter_by_id", | |
| [2025-09-03T19:53:10Z] "no_connections", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_custom_filter_fn_python( | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] filter_fn: Callable[[AirbyteConnection], bool], | |
| [2025-09-03T19:53:10Z] num_assets: int, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] defs = AirbyteWorkspaceComponent( | |
| [2025-09-03T19:53:10Z] > workspace=AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] connection_selector=filter_fn, | |
| [2025-09-03T19:53:10Z] translation=None, | |
| [2025-09-03T19:53:10Z] ).build_defs(ComponentTree.for_test().load_context) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:156: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572ead20> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e2...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e3770>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_workspace_id' | |
| [2025-09-03T19:53:10Z] field_info = ('workspace_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e3560>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:10Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:10Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:10Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:10Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:10Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:10Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:10Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:10Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:10Z] field = None | |
| [2025-09-03T19:53:10Z] field_key = config_key | |
| [2025-09-03T19:53:10Z] if field_info: | |
| [2025-09-03T19:53:10Z] field_key, field = field_info | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if field and field.discriminator: | |
| [2025-09-03T19:53:10Z] nested_dict = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:10Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:10Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:10Z] discriminator_key, | |
| [2025-09-03T19:53:10Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:10Z] check.invariant( | |
| [2025-09-03T19:53:10Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:10Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:10Z] **nested_values, | |
| [2025-09-03T19:53:10Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:10Z] elif ( | |
| [2025-09-03T19:53:10Z] field | |
| [2025-09-03T19:53:10Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:10Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:10Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:10Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:10Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] value | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] else: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:10Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:10Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:10Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:10Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:10Z] E rest_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] E configuration_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:10Z] __________________ test_custom_filter_fn_python[filter_by_id] __________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572e9280> | |
| [2025-09-03T19:53:10Z] filter_fn = <function <lambda> at 0x7f8c574d59e0>, num_assets = 2 | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "filter_fn, num_assets", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] (lambda _: True, 2), | |
| [2025-09-03T19:53:10Z] (lambda connection: connection.id == TEST_CONNECTION_ID, 2), | |
| [2025-09-03T19:53:10Z] (lambda _: False, 0), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "all_connections", | |
| [2025-09-03T19:53:10Z] "filter_by_id", | |
| [2025-09-03T19:53:10Z] "no_connections", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_custom_filter_fn_python( | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] filter_fn: Callable[[AirbyteConnection], bool], | |
| [2025-09-03T19:53:10Z] num_assets: int, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] defs = AirbyteWorkspaceComponent( | |
| [2025-09-03T19:53:10Z] > workspace=AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] connection_selector=filter_fn, | |
| [2025-09-03T19:53:10Z] translation=None, | |
| [2025-09-03T19:53:10Z] ).build_defs(ComponentTree.for_test().load_context) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:156: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572ea450> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572eb...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e8bf0>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_workspace_id' | |
| [2025-09-03T19:53:10Z] field_info = ('workspace_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e9400>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:10Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:10Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:10Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:10Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:10Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:10Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:10Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:10Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:10Z] field = None | |
| [2025-09-03T19:53:10Z] field_key = config_key | |
| [2025-09-03T19:53:10Z] if field_info: | |
| [2025-09-03T19:53:10Z] field_key, field = field_info | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if field and field.discriminator: | |
| [2025-09-03T19:53:10Z] nested_dict = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:10Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:10Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:10Z] discriminator_key, | |
| [2025-09-03T19:53:10Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:10Z] check.invariant( | |
| [2025-09-03T19:53:10Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:10Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:10Z] **nested_values, | |
| [2025-09-03T19:53:10Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:10Z] elif ( | |
| [2025-09-03T19:53:10Z] field | |
| [2025-09-03T19:53:10Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:10Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:10Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:10Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:10Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] value | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] else: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:10Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:10Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:10Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:10Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:10Z] E rest_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] E configuration_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:10Z] _________________ test_custom_filter_fn_python[no_connections] _________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572e9460> | |
| [2025-09-03T19:53:10Z] filter_fn = <function <lambda> at 0x7f8c574d5a80>, num_assets = 0 | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "filter_fn, num_assets", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] (lambda _: True, 2), | |
| [2025-09-03T19:53:10Z] (lambda connection: connection.id == TEST_CONNECTION_ID, 2), | |
| [2025-09-03T19:53:10Z] (lambda _: False, 0), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "all_connections", | |
| [2025-09-03T19:53:10Z] "filter_by_id", | |
| [2025-09-03T19:53:10Z] "no_connections", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_custom_filter_fn_python( | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] filter_fn: Callable[[AirbyteConnection], bool], | |
| [2025-09-03T19:53:10Z] num_assets: int, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] defs = AirbyteWorkspaceComponent( | |
| [2025-09-03T19:53:10Z] > workspace=AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] connection_selector=filter_fn, | |
| [2025-09-03T19:53:10Z] translation=None, | |
| [2025-09-03T19:53:10Z] ).build_defs(ComponentTree.for_test().load_context) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:156: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e8a40> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e9...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e9a00>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_workspace_id' | |
| [2025-09-03T19:53:10Z] field_info = ('workspace_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572e9dc0>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:10Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:10Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:10Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:10Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:10Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:10Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:10Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:10Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:10Z] field = None | |
| [2025-09-03T19:53:10Z] field_key = config_key | |
| [2025-09-03T19:53:10Z] if field_info: | |
| [2025-09-03T19:53:10Z] field_key, field = field_info | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if field and field.discriminator: | |
| [2025-09-03T19:53:10Z] nested_dict = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:10Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:10Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:10Z] discriminator_key, | |
| [2025-09-03T19:53:10Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:10Z] check.invariant( | |
| [2025-09-03T19:53:10Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:10Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:10Z] **nested_values, | |
| [2025-09-03T19:53:10Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:10Z] elif ( | |
| [2025-09-03T19:53:10Z] field | |
| [2025-09-03T19:53:10Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:10Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:10Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:10Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:10Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] value | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] else: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:10Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:10Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:10Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:10Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:10Z] E rest_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] E configuration_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:10Z] _____________ TestAirbyteTranslation.test_translation[group_name] ______________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c57000e50> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_Z0BTHNK4.defs' (namespace) from ['/tmp/tmp2hgvmc9v/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp2hgvmc9v/src/sandbox_module_Z0BTHNK4/defs/sandbox_module_KRbA7Qfe'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c571127a0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57866270> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572ed130> | |
| [2025-09-03T19:53:10Z] attributes = {'group_name': 'group'} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777d940>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_Z0BTHNK4.defs' (namespace) from ['/tmp/tmp2hgvmc9v/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp2hgvmc9v/src/sandbox_module_Z0BTHNK4/defs/sandbox_module_KRbA7Qfe'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c571127a0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_KRbA7Qfe[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_KRbA7Qfe | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmp2hgvmc9v/src/sandbox_module_Z0BTHNK4/defs/sandbox_module_KRbA7Qfe. | |
| [2025-09-03T19:53:10Z] _______________ TestAirbyteTranslation.test_translation[owners] ________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c570a97b0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_BhdRv93j.defs' (namespace) from ['/tmp/tmps4ys1wy7/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmps4ys1wy7/src/sandbox_module_BhdRv93j/defs/sandbox_module_xyfyQemY'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c57058ea0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57866360> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572f21b0> | |
| [2025-09-03T19:53:10Z] attributes = {'owners': ['team:analytics']} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777d9e0>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_BhdRv93j.defs' (namespace) from ['/tmp/tmps4ys1wy7/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmps4ys1wy7/src/sandbox_module_BhdRv93j/defs/sandbox_module_xyfyQemY'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c57058ea0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_xyfyQemY[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_xyfyQemY | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmps4ys1wy7/src/sandbox_module_BhdRv93j/defs/sandbox_module_xyfyQemY. | |
| [2025-09-03T19:53:10Z] ________________ TestAirbyteTranslation.test_translation[tags] _________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56fe7bf0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_FMgQtdMM.defs' (namespace) from ['/tmp/tmph_2ovvws/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmph_2ovvws/src/sandbox_module_FMgQtdMM/defs/sandbox_module_Ao51EFTP'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c57059bc0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57867c20> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572f3470> | |
| [2025-09-03T19:53:10Z] attributes = {'tags': {'foo': 'bar'}} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777de40>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_FMgQtdMM.defs' (namespace) from ['/tmp/tmph_2ovvws/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmph_2ovvws/src/sandbox_module_FMgQtdMM/defs/sandbox_module_Ao51EFTP'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c57059bc0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_Ao51EFTP[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_Ao51EFTP | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmph_2ovvws/src/sandbox_module_FMgQtdMM/defs/sandbox_module_Ao51EFTP. | |
| [2025-09-03T19:53:10Z] ________________ TestAirbyteTranslation.test_translation[kinds] ________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c57014a90> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_DnSW6YhP.defs' (namespace) from ['/tmp/tmpbf79ph7p/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpbf79ph7p/src/sandbox_module_DnSW6YhP/defs/sandbox_module_BxLRH4k8'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c5705c2c0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57867d10> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c571ffe00> | |
| [2025-09-03T19:53:10Z] attributes = {'kinds': ['snowflake', 'dbt']} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777dee0>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_DnSW6YhP.defs' (namespace) from ['/tmp/tmpbf79ph7p/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpbf79ph7p/src/sandbox_module_DnSW6YhP/defs/sandbox_module_BxLRH4k8'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c5705c2c0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_BxLRH4k8[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_BxLRH4k8 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpbf79ph7p/src/sandbox_module_DnSW6YhP/defs/sandbox_module_BxLRH4k8. | |
| [2025-09-03T19:53:10Z] ___________ TestAirbyteTranslation.test_translation[tags-and-kinds] ____________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c570184f0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_Yk30BoJJ.defs' (namespace) from ['/tmp/tmphlhr9rnj/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmphlhr9rnj/src/sandbox_module_Yk30BoJJ/defs/sandbox_module_LLRTyw8g'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c5705ca40> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57867e00> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c571ffb60> | |
| [2025-09-03T19:53:10Z] attributes = {'kinds': ['snowflake', 'dbt'], 'tags': {'foo': 'bar'}} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777df80>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_Yk30BoJJ.defs' (namespace) from ['/tmp/tmphlhr9rnj/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmphlhr9rnj/src/sandbox_module_Yk30BoJJ/defs/sandbox_module_LLRTyw8g'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c5705ca40> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_LLRTyw8g[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_LLRTyw8g | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmphlhr9rnj/src/sandbox_module_Yk30BoJJ/defs/sandbox_module_LLRTyw8g. | |
| [2025-09-03T19:53:10Z] ____________ TestAirbyteTranslation.test_translation[code-version] _____________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c57051c10> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_PMhbdYUi.defs' (namespace) from ['/tmp/tmpukdmj7fx/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpukdmj7fx/src/sandbox_module_PMhbdYUi/defs/sandbox_module_sPsHBCiH'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c5705e020> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57867ec0> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c572066f0> | |
| [2025-09-03T19:53:10Z] attributes = {'code_version': '1'} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e020>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_PMhbdYUi.defs' (namespace) from ['/tmp/tmpukdmj7fx/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpukdmj7fx/src/sandbox_module_PMhbdYUi/defs/sandbox_module_sPsHBCiH'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c5705e020> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_sPsHBCiH[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_sPsHBCiH | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpukdmj7fx/src/sandbox_module_PMhbdYUi/defs/sandbox_module_sPsHBCiH. | |
| [2025-09-03T19:53:10Z] _____________ TestAirbyteTranslation.test_translation[description] _____________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56ccdad0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_hJJPv3jC.defs' (namespace) from ['/tmp/tmp0_lq0oci/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp0_lq0oci/src/sandbox_module_hJJPv3jC/defs/sandbox_module_yprgBQX3'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56da8c20> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c579be720> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c5720c470> | |
| [2025-09-03T19:53:10Z] attributes = {'description': 'some description'} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e0c0>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_hJJPv3jC.defs' (namespace) from ['/tmp/tmp0_lq0oci/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp0_lq0oci/src/sandbox_module_hJJPv3jC/defs/sandbox_module_yprgBQX3'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56da8c20> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_yprgBQX3[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_yprgBQX3 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmp0_lq0oci/src/sandbox_module_hJJPv3jC/defs/sandbox_module_yprgBQX3. | |
| [2025-09-03T19:53:10Z] ______________ TestAirbyteTranslation.test_translation[metadata] _______________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56d1a070> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_TPvuC1Mt.defs' (namespace) from ['/tmp/tmphlma_qie/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmphlma_qie/src/sandbox_module_TPvuC1Mt/defs/sandbox_module_WiUlbsU5'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56da9760> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57867f80> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57211c40> | |
| [2025-09-03T19:53:10Z] attributes = {'metadata': {'foo': 'bar'}} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e160>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_TPvuC1Mt.defs' (namespace) from ['/tmp/tmphlma_qie/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmphlma_qie/src/sandbox_module_TPvuC1Mt/defs/sandbox_module_WiUlbsU5'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56da9760> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_WiUlbsU5[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_WiUlbsU5 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmphlma_qie/src/sandbox_module_TPvuC1Mt/defs/sandbox_module_WiUlbsU5. | |
| [2025-09-03T19:53:10Z] ________________ TestAirbyteTranslation.test_translation[deps] _________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56d3a7a0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_mX3W7R63.defs' (namespace) from ['/tmp/tmp7nrspwkz/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp7nrspwkz/src/sandbox_module_mX3W7R63/defs/sandbox_module_Wn2Fm647'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56d58220> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57867fb0> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c5721bec0> | |
| [2025-09-03T19:53:10Z] attributes = {'deps': ['nonexistent']} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e200>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_mX3W7R63.defs' (namespace) from ['/tmp/tmp7nrspwkz/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmp7nrspwkz/src/sandbox_module_mX3W7R63/defs/sandbox_module_Wn2Fm647'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56d58220> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_Wn2Fm647[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_Wn2Fm647 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmp7nrspwkz/src/sandbox_module_mX3W7R63/defs/sandbox_module_Wn2Fm647. | |
| [2025-09-03T19:53:10Z] ________ TestAirbyteTranslation.test_translation[automation_condition] _________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56d275b0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_AXHg6EKl.defs' (namespace) from ['/tmp/tmpl3xd1tji/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpl3xd1tji/src/sandbox_module_AXHg6EKl/defs/sandbox_module_SW3s3SQL'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56d58ea0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57874080> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57220230> | |
| [2025-09-03T19:53:10Z] attributes = {'automation_condition': '{{ automation_condition.eager() }}'} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e2a0>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_AXHg6EKl.defs' (namespace) from ['/tmp/tmpl3xd1tji/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpl3xd1tji/src/sandbox_module_AXHg6EKl/defs/sandbox_module_SW3s3SQL'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56d58ea0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_SW3s3SQL[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_SW3s3SQL | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpl3xd1tji/src/sandbox_module_AXHg6EKl/defs/sandbox_module_SW3s3SQL. | |
| [2025-09-03T19:53:10Z] _________________ TestAirbyteTranslation.test_translation[key] _________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56d2f970> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_QuhwkkHp.defs' (namespace) from ['/tmp/tmprdcobu7n/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmprdcobu7n/src/sandbox_module_QuhwkkHp/defs/sandbox_module_gYaopeWh'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56d594e0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57874140> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57226c30> | |
| [2025-09-03T19:53:10Z] attributes = {'key': "{{ spec.key.to_user_string() + '_suffix' }}"} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e340> | |
| [2025-09-03T19:53:10Z] key_modifier = <function <lambda> at 0x7f8c5777e3e0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_QuhwkkHp.defs' (namespace) from ['/tmp/tmprdcobu7n/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmprdcobu7n/src/sandbox_module_QuhwkkHp/defs/sandbox_module_gYaopeWh'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56d594e0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_gYaopeWh[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_gYaopeWh | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmprdcobu7n/src/sandbox_module_QuhwkkHp/defs/sandbox_module_gYaopeWh. | |
| [2025-09-03T19:53:10Z] _____________ TestAirbyteTranslation.test_translation[key_prefix] ______________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56f23bf0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_OdPBcT5f.defs' (namespace) from ['/tmp/tmpdg3g9rkd/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpdg3g9rkd/src/sandbox_module_OdPBcT5f/defs/sandbox_module_CauMsQee'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56f4cae0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c57874200> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c5722acc0> | |
| [2025-09-03T19:53:10Z] attributes = {'key_prefix': 'cool_prefix'} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e480> | |
| [2025-09-03T19:53:10Z] key_modifier = <function <lambda> at 0x7f8c5777e520> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_OdPBcT5f.defs' (namespace) from ['/tmp/tmpdg3g9rkd/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpdg3g9rkd/src/sandbox_module_OdPBcT5f/defs/sandbox_module_CauMsQee'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56f4cae0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_CauMsQee[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_CauMsQee | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpdg3g9rkd/src/sandbox_module_OdPBcT5f/defs/sandbox_module_CauMsQee. | |
| [2025-09-03T19:53:10Z] ___________ TestAirbyteTranslation.test_translation[partitions_defs] ___________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:224: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/main.py:1763: in create_model | |
| [2025-09-03T19:53:10Z] return meta( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:237: in __new__ | |
| [2025-09-03T19:53:10Z] complete_model_class( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_model_construction.py:597: in complete_model_class | |
| [2025-09-03T19:53:10Z] schema = gen_schema.generate_schema(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1004: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self._model_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:837: in _model_schema | |
| [2025-09-03T19:53:10Z] {k: self._generate_md_field_schema(k, v, decorators) for k, v in fields.items()}, | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1206: in _generate_md_field_schema | |
| [2025-09-03T19:53:10Z] common_field = self._common_field_schema(name, field_info, decorators) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1372: in _common_field_schema | |
| [2025-09-03T19:53:10Z] schema = self._apply_annotations( | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2297: in _apply_annotations | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2373: in new_handler | |
| [2025-09-03T19:53:10Z] schema = get_inner_schema(source) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_schema_generation_shared.py:83: in __call__ | |
| [2025-09-03T19:53:10Z] schema = self._handler(source_type) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:2279: in inner_handler | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1123: in match_type | |
| [2025-09-03T19:53:10Z] return self._match_generic_type(obj, origin) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1146: in _match_generic_type | |
| [2025-09-03T19:53:10Z] return self._union_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1434: in _union_schema | |
| [2025-09-03T19:53:10Z] choices.append(self.generate_schema(arg)) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:711: in generate_schema | |
| [2025-09-03T19:53:10Z] schema = self._generate_schema_inner(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1009: in _generate_schema_inner | |
| [2025-09-03T19:53:10Z] return self.match_type(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:1127: in match_type | |
| [2025-09-03T19:53:10Z] return self._unknown_type_schema(obj) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <pydantic._internal._generate_schema.GenerateSchema object at 0x7f8c56f37fb0> | |
| [2025-09-03T19:53:10Z] obj = [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def _unknown_type_schema(self, obj: Any) -> CoreSchema: | |
| [2025-09-03T19:53:10Z] > raise PydanticSchemaGenerationError( | |
| [2025-09-03T19:53:10Z] f'Unable to generate pydantic-core schema for {obj!r}. ' | |
| [2025-09-03T19:53:10Z] 'Set `arbitrary_types_allowed=True` in the model_config to ignore this error' | |
| [2025-09-03T19:53:10Z] ' or implement `__get_pydantic_core_schema__` on your type to fully support it.' | |
| [2025-09-03T19:53:10Z] '\n\nIf you got this error by calling handler(<some type>) within' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` then you likely need to call' | |
| [2025-09-03T19:53:10Z] ' `handler.generate_schema(<some type>)` since we do not call' | |
| [2025-09-03T19:53:10Z] ' `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion.' | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] E pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for [<class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceModel'>, <class 'dagster_airbyte.components.workspace_component.component.AirbyteCloudWorkspaceModel'>]. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E If you got this error by calling handler(<some type>) within `__get_pydantic_core_schema__` then you likely need to call `handler.generate_schema(<some type>)` since we do not call `__get_pydantic_core_schema__` on `<some type>` otherwise to avoid infinite recursion. | |
| [2025-09-03T19:53:10Z] E | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/u/schema-for-unknown-type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] .tox/py312-unit/lib/python3.12/site-packages/pydantic/_internal/_generate_schema.py:639: PydanticSchemaGenerationError | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_SWmJGKhW.defs' (namespace) from ['/tmp/tmpj32kr4ef/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpj32kr4ef/src/sandbox_module_SWmJGKhW/defs/sandbox_module_a9nM2gC2'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56f4d6c0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] > yield | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:168: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:205: in _load_component | |
| [2025-09-03T19:53:10Z] model_cls = self.component_cls.get_model_cls() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/component/component.py:251: in get_model_cls | |
| [2025-09-03T19:53:10Z] return cls.model() | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:118: in model | |
| [2025-09-03T19:53:10Z] return derive_model_type(cls) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] target_type = <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def derive_model_type( | |
| [2025-09-03T19:53:10Z] target_type: type[Resolvable], | |
| [2025-09-03T19:53:10Z] ) -> type[BaseModel]: | |
| [2025-09-03T19:53:10Z] if target_type not in _DERIVED_MODEL_REGISTRY: | |
| [2025-09-03T19:53:10Z] model_name = f"{target_type.__name__}Model" | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields: dict[ | |
| [2025-09-03T19:53:10Z] str, Any | |
| [2025-09-03T19:53:10Z] ] = {} # use Any to appease type checker when **-ing in to create_model | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for name, annotation_info in _get_annotations(target_type).items(): | |
| [2025-09-03T19:53:10Z] field_resolver = _get_resolver(annotation_info.type, name) | |
| [2025-09-03T19:53:10Z] field_name = field_resolver.model_field_name or name | |
| [2025-09-03T19:53:10Z] field_type = field_resolver.model_field_type or annotation_info.type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] field_infos = [] | |
| [2025-09-03T19:53:10Z] if annotation_info.field_info: | |
| [2025-09-03T19:53:10Z] field_infos.append(annotation_info.field_info) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if annotation_info.has_default: | |
| [2025-09-03T19:53:10Z] # if the annotation has a serializable default | |
| [2025-09-03T19:53:10Z] # value, propagate it to the inner schema, otherwise | |
| [2025-09-03T19:53:10Z] # use a marker value that will cause the kwarg | |
| [2025-09-03T19:53:10Z] # to get omitted when we resolve fields in order | |
| [2025-09-03T19:53:10Z] # to trigger the default on the target type | |
| [2025-09-03T19:53:10Z] default_value = ( | |
| [2025-09-03T19:53:10Z] annotation_info.default | |
| [2025-09-03T19:53:10Z] if type(annotation_info.default) in {int, float, str, bool, type(None)} | |
| [2025-09-03T19:53:10Z] else _Unset | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] default=default_value, | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] elif field_resolver.description or field_resolver.examples: | |
| [2025-09-03T19:53:10Z] field_infos.append( | |
| [2025-09-03T19:53:10Z] Field( | |
| [2025-09-03T19:53:10Z] description=field_resolver.description, | |
| [2025-09-03T19:53:10Z] examples=field_resolver.examples, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # make all fields injectable | |
| [2025-09-03T19:53:10Z] if field_type != str: | |
| [2025-09-03T19:53:10Z] field_type = Union[field_type, str] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] model_fields[field_name] = ( | |
| [2025-09-03T19:53:10Z] field_type, | |
| [2025-09-03T19:53:10Z] FieldInfo.merge_field_infos(*field_infos), | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] _DERIVED_MODEL_REGISTRY[target_type] = create_model( | |
| [2025-09-03T19:53:10Z] model_name, | |
| [2025-09-03T19:53:10Z] __base__=Model, | |
| [2025-09-03T19:53:10Z] **model_fields, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] except PydanticSchemaGenerationError as e: | |
| [2025-09-03T19:53:10Z] > raise ResolutionException(f"Unable to derive Model for {target_type}") from e | |
| [2025-09-03T19:53:10Z] E dagster.components.resolved.errors.ResolutionException: Unable to derive Model for <class 'dagster_airbyte.components.workspace_component.component.AirbyteWorkspaceComponent'> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/resolved/base.py:230: ResolutionException | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] The above exception was the direct cause of the following exception: | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = <dagster_airbyte_tests.beta.test_component.TestAirbyteTranslation object at 0x7f8c578742c0> | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks = <responses.RequestsMock object at 0x7f8c57233860> | |
| [2025-09-03T19:53:10Z] attributes = {'partitions_def': {'partition_keys': ['foo', 'bar'], 'type': 'static'}} | |
| [2025-09-03T19:53:10Z] assertion = <function <lambda> at 0x7f8c5777e5c0>, key_modifier = None | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_translation( | |
| [2025-09-03T19:53:10Z] self, | |
| [2025-09-03T19:53:10Z] fetch_workspace_data_api_mocks, | |
| [2025-09-03T19:53:10Z] attributes: Mapping[str, Any], | |
| [2025-09-03T19:53:10Z] assertion: Callable[[AssetSpec], bool], | |
| [2025-09-03T19:53:10Z] key_modifier: Optional[Callable[[AssetKey], AssetKey]], | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] body = copy.deepcopy(BASIC_AIRBYTE_COMPONENT_BODY) | |
| [2025-09-03T19:53:10Z] body["attributes"]["translation"] = attributes | |
| [2025-09-03T19:53:10Z] with ( | |
| [2025-09-03T19:53:10Z] environ( | |
| [2025-09-03T19:53:10Z] { | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_ID": TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_CLIENT_SECRET": TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] "AIRBYTE_WORKSPACE_ID": TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] > setup_airbyte_component( | |
| [2025-09-03T19:53:10Z] defs_yaml_contents=body, | |
| [2025-09-03T19:53:10Z] ) as ( | |
| [2025-09-03T19:53:10Z] component, | |
| [2025-09-03T19:53:10Z] defs, | |
| [2025-09-03T19:53:10Z] ), | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:185: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_component.py:52: in setup_airbyte_component | |
| [2025-09-03T19:53:10Z] with sandbox.load_component_and_build_defs(defs_path=defs_path) as ( | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:137: in __enter__ | |
| [2025-09-03T19:53:10Z] return next(self.gen) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/testing/utils.py:185: in load_component_and_build_defs | |
| [2025-09-03T19:53:10Z] component = tree.load_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:401: in load_component_at_path | |
| [2025-09-03T19:53:10Z] component = self.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:314: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] component=component_decl._load_component(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/decl.py:228: in _load_component | |
| [2025-09-03T19:53:10Z] self.context.load_structural_component_at_path(decl.path) for decl in self.decls | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/context.py:206: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] return self.component_tree.load_structural_component_at_path(defs_path) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:428: in load_structural_component_at_path | |
| [2025-09-03T19:53:10Z] component = self._component_and_context_at_posix_path( | |
| [2025-09-03T19:53:10Z] ../dagster-shared/dagster_shared/utils/cached_method.py:135: in _cached_method_wrapper | |
| [2025-09-03T19:53:10Z] result = method(self, *args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:303: in _component_and_context_at_posix_path | |
| [2025-09-03T19:53:10Z] with self.augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] /usr/local/lib/python3.12/contextlib.py:158: in __exit__ | |
| [2025-09-03T19:53:10Z] self.gen.throw(value) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = ComponentTree(defs_module=<module 'sandbox_module_SWmJGKhW.defs' (namespace) from ['/tmp/tmpj32kr4ef/src/sandbox_modul...ent_tree_dependencies=<dagster.components.core.component_tree.ComponentTreeDependencyTracker object at 0x7f8c5941b110>) | |
| [2025-09-03T19:53:10Z] path = ComponentPath(file_path=PosixPath('/tmp/tmpj32kr4ef/src/sandbox_module_SWmJGKhW/defs/sandbox_module_a9nM2gC2'), instance_key=0) | |
| [2025-09-03T19:53:10Z] msg_for_path = <function ComponentTree._component_and_context_at_posix_path.<locals>.<lambda> at 0x7f8c56f4d6c0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @contextmanager | |
| [2025-09-03T19:53:10Z] def augment_component_tree_exception( | |
| [2025-09-03T19:53:10Z] self, path: ComponentPath, msg_for_path: Callable[[str], str] | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] try: | |
| [2025-09-03T19:53:10Z] yield | |
| [2025-09-03T19:53:10Z] except Exception as e: | |
| [2025-09-03T19:53:10Z] if not isinstance(e, ComponentTreeException): | |
| [2025-09-03T19:53:10Z] > raise ComponentTreeException( | |
| [2025-09-03T19:53:10Z] f"{msg_for_path(path.get_relative_key(self.defs_module_path))}:\n{self.to_string_representation(include_load_and_build_status=True, match_path=path)}" | |
| [2025-09-03T19:53:10Z] ) from e | |
| [2025-09-03T19:53:10Z] E dagster.components.core.component_tree.ComponentTreeException: Error while loading component sandbox_module_a9nM2gC2[0]: | |
| [2025-09-03T19:53:10Z] E └── sandbox_module_a9nM2gC2 | |
| [2025-09-03T19:53:10Z] E └── defs.yaml (AirbyteWorkspaceComponent) (error) | |
| [2025-09-03T19:53:10Z] E ^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/components/core/component_tree.py:171: ComponentTreeException | |
| [2025-09-03T19:53:10Z] ----------------------------- Captured stdout call ----------------------------- | |
| [2025-09-03T19:53:10Z] Creating defs at /tmp/tmpj32kr4ef/src/sandbox_module_SWmJGKhW/defs/sandbox_module_a9nM2gC2. | |
| [2025-09-03T19:53:10Z] __________________________ test_refresh_access_token ___________________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c57237650> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_refresh_access_token(base_api_mocks: responses.RequestsMock) -> None: | |
| [2025-09-03T19:53:10Z] """Tests the `AirbyteCloudClient._make_request` method and how the API access token is refreshed. | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] Args: | |
| [2025-09-03T19:53:10Z] base_api_mocks (responses.RequestsMock): The mock responses for the base API requests, | |
| [2025-09-03T19:53:10Z] i.e. generating the access token. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_resources.py:125: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572340e0> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57236...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572349b0>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:10Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57237200>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:10Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:10Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:10Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:10Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:10Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:10Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:10Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:10Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:10Z] field = None | |
| [2025-09-03T19:53:10Z] field_key = config_key | |
| [2025-09-03T19:53:10Z] if field_info: | |
| [2025-09-03T19:53:10Z] field_key, field = field_info | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if field and field.discriminator: | |
| [2025-09-03T19:53:10Z] nested_dict = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:10Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:10Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:10Z] discriminator_key, | |
| [2025-09-03T19:53:10Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:10Z] check.invariant( | |
| [2025-09-03T19:53:10Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:10Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:10Z] **nested_values, | |
| [2025-09-03T19:53:10Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:10Z] elif ( | |
| [2025-09-03T19:53:10Z] field | |
| [2025-09-03T19:53:10Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:10Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:10Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:10Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:10Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] value | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] else: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:10Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:10Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:10Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:10Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:10Z] E rest_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] E configuration_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:10Z] _________________________ test_basic_resource_request __________________________ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] all_api_mocks = <responses.RequestsMock object at 0x7f8c57207ef0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def test_basic_resource_request( | |
| [2025-09-03T19:53:10Z] all_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_resources.py:179: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57234fb0> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57235...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57235040>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:10Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57234230>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:10Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:10Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:10Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:10Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:10Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:10Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:10Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:10Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:10Z] field = None | |
| [2025-09-03T19:53:10Z] field_key = config_key | |
| [2025-09-03T19:53:10Z] if field_info: | |
| [2025-09-03T19:53:10Z] field_key, field = field_info | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if field and field.discriminator: | |
| [2025-09-03T19:53:10Z] nested_dict = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:10Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:10Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:10Z] discriminator_key, | |
| [2025-09-03T19:53:10Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:10Z] check.invariant( | |
| [2025-09-03T19:53:10Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:10Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:10Z] **nested_values, | |
| [2025-09-03T19:53:10Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:10Z] elif ( | |
| [2025-09-03T19:53:10Z] field | |
| [2025-09-03T19:53:10Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:10Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:10Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:10Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:10Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] value | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] else: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:10Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:10Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:10Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:10Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:10Z] E rest_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] E configuration_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:10Z] ______ test_airbyte_sync_and_poll_client_job_status[job_status_succeeded] ______ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] status = <AirbyteJobStatusType.SUCCEEDED: 'succeeded'>, error_expected = False | |
| [2025-09-03T19:53:10Z] exception_message = None | |
| [2025-09-03T19:53:10Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c572390d0> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "status, error_expected, exception_message", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.SUCCEEDED, False, None), | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.CANCELLED, True, "Job was cancelled"), | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.ERROR, True, "Job failed"), | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.FAILED, True, "Job failed"), | |
| [2025-09-03T19:53:10Z] (TEST_UNRECOGNIZED_AIRBYTE_JOB_STATUS_TYPE, True, "unexpected state"), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "job_status_succeeded", | |
| [2025-09-03T19:53:10Z] "job_status_cancelled", | |
| [2025-09-03T19:53:10Z] "job_status_error", | |
| [2025-09-03T19:53:10Z] "job_status_failed", | |
| [2025-09-03T19:53:10Z] "job_status_unrecognized", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_airbyte_sync_and_poll_client_job_status( | |
| [2025-09-03T19:53:10Z] status: str, | |
| [2025-09-03T19:53:10Z] error_expected: bool, | |
| [2025-09-03T19:53:10Z] exception_message: str, | |
| [2025-09-03T19:53:10Z] base_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_resources.py:231: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5723b4a0> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5723b...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572389b0>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:10Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57238c80>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:10Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:10Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:10Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:10Z] """ | |
| [2025-09-03T19:53:10Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:10Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:10Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:10Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:10Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:10Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:10Z] field = None | |
| [2025-09-03T19:53:10Z] field_key = config_key | |
| [2025-09-03T19:53:10Z] if field_info: | |
| [2025-09-03T19:53:10Z] field_key, field = field_info | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] if field and field.discriminator: | |
| [2025-09-03T19:53:10Z] nested_dict = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:10Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:10Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:10Z] discriminator_key, | |
| [2025-09-03T19:53:10Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:10Z] check.invariant( | |
| [2025-09-03T19:53:10Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:10Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:10Z] **nested_values, | |
| [2025-09-03T19:53:10Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:10Z] } | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:10Z] elif ( | |
| [2025-09-03T19:53:10Z] field | |
| [2025-09-03T19:53:10Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:10Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:10Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:10Z] ): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:10Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:10Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:10Z] value | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] else: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:10Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:10Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:10Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:10Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:10Z] E rest_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] E configuration_api_base_url | |
| [2025-09-03T19:53:10Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:10Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:10Z] ______ test_airbyte_sync_and_poll_client_job_status[job_status_cancelled] ______ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] status = <AirbyteJobStatusType.CANCELLED: 'cancelled'>, error_expected = True | |
| [2025-09-03T19:53:10Z] exception_message = 'Job was cancelled' | |
| [2025-09-03T19:53:10Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c5723af00> | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:10Z] "status, error_expected, exception_message", | |
| [2025-09-03T19:53:10Z] [ | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.SUCCEEDED, False, None), | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.CANCELLED, True, "Job was cancelled"), | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.ERROR, True, "Job failed"), | |
| [2025-09-03T19:53:10Z] (AirbyteJobStatusType.FAILED, True, "Job failed"), | |
| [2025-09-03T19:53:10Z] (TEST_UNRECOGNIZED_AIRBYTE_JOB_STATUS_TYPE, True, "unexpected state"), | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ids=[ | |
| [2025-09-03T19:53:10Z] "job_status_succeeded", | |
| [2025-09-03T19:53:10Z] "job_status_cancelled", | |
| [2025-09-03T19:53:10Z] "job_status_error", | |
| [2025-09-03T19:53:10Z] "job_status_failed", | |
| [2025-09-03T19:53:10Z] "job_status_unrecognized", | |
| [2025-09-03T19:53:10Z] ], | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] def test_airbyte_sync_and_poll_client_job_status( | |
| [2025-09-03T19:53:10Z] status: str, | |
| [2025-09-03T19:53:10Z] error_expected: bool, | |
| [2025-09-03T19:53:10Z] exception_message: str, | |
| [2025-09-03T19:53:10Z] base_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:10Z] ) -> None: | |
| [2025-09-03T19:53:10Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:10Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:10Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:10Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:10Z] ) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] dagster_airbyte_tests/beta/test_resources.py:231: | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:10Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:10Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:10Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:10Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:10Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:10Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:10Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:10Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:10Z] field_key = 'password' | |
| [2025-09-03T19:53:10Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57239970> | |
| [2025-09-03T19:53:10Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57239...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57238980>), ...} | |
| [2025-09-03T19:53:10Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:10Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c5723a840>) | |
| [2025-09-03T19:53:10Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] ________ test_airbyte_sync_and_poll_client_job_status[job_status_error] ________ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] status = <AirbyteJobStatusType.ERROR: 'error'>, error_expected = True | |
| [2025-09-03T19:53:11Z] exception_message = 'Job failed' | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c57246f30> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "status, error_expected, exception_message", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.SUCCEEDED, False, None), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.CANCELLED, True, "Job was cancelled"), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.ERROR, True, "Job failed"), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.FAILED, True, "Job failed"), | |
| [2025-09-03T19:53:11Z] (TEST_UNRECOGNIZED_AIRBYTE_JOB_STATUS_TYPE, True, "unexpected state"), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "job_status_succeeded", | |
| [2025-09-03T19:53:11Z] "job_status_cancelled", | |
| [2025-09-03T19:53:11Z] "job_status_error", | |
| [2025-09-03T19:53:11Z] "job_status_failed", | |
| [2025-09-03T19:53:11Z] "job_status_unrecognized", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_job_status( | |
| [2025-09-03T19:53:11Z] status: str, | |
| [2025-09-03T19:53:11Z] error_expected: bool, | |
| [2025-09-03T19:53:11Z] exception_message: str, | |
| [2025-09-03T19:53:11Z] base_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:11Z] ) -> None: | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:231: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57245040> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57245...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c572463f0>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57247b30>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] _______ test_airbyte_sync_and_poll_client_job_status[job_status_failed] ________ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] status = <AirbyteJobStatusType.FAILED: 'failed'>, error_expected = True | |
| [2025-09-03T19:53:11Z] exception_message = 'Job failed' | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c57247ec0> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "status, error_expected, exception_message", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.SUCCEEDED, False, None), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.CANCELLED, True, "Job was cancelled"), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.ERROR, True, "Job failed"), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.FAILED, True, "Job failed"), | |
| [2025-09-03T19:53:11Z] (TEST_UNRECOGNIZED_AIRBYTE_JOB_STATUS_TYPE, True, "unexpected state"), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "job_status_succeeded", | |
| [2025-09-03T19:53:11Z] "job_status_cancelled", | |
| [2025-09-03T19:53:11Z] "job_status_error", | |
| [2025-09-03T19:53:11Z] "job_status_failed", | |
| [2025-09-03T19:53:11Z] "job_status_unrecognized", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_job_status( | |
| [2025-09-03T19:53:11Z] status: str, | |
| [2025-09-03T19:53:11Z] error_expected: bool, | |
| [2025-09-03T19:53:11Z] exception_message: str, | |
| [2025-09-03T19:53:11Z] base_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:11Z] ) -> None: | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:231: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57246ea0> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57246...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57246750>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57244ce0>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] ____ test_airbyte_sync_and_poll_client_job_status[job_status_unrecognized] _____ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] status = 'unrecognized', error_expected = True | |
| [2025-09-03T19:53:11Z] exception_message = 'unexpected state' | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c57245340> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "status, error_expected, exception_message", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.SUCCEEDED, False, None), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.CANCELLED, True, "Job was cancelled"), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.ERROR, True, "Job failed"), | |
| [2025-09-03T19:53:11Z] (AirbyteJobStatusType.FAILED, True, "Job failed"), | |
| [2025-09-03T19:53:11Z] (TEST_UNRECOGNIZED_AIRBYTE_JOB_STATUS_TYPE, True, "unexpected state"), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "job_status_succeeded", | |
| [2025-09-03T19:53:11Z] "job_status_cancelled", | |
| [2025-09-03T19:53:11Z] "job_status_error", | |
| [2025-09-03T19:53:11Z] "job_status_failed", | |
| [2025-09-03T19:53:11Z] "job_status_unrecognized", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_job_status( | |
| [2025-09-03T19:53:11Z] status: str, | |
| [2025-09-03T19:53:11Z] error_expected: bool, | |
| [2025-09-03T19:53:11Z] exception_message: str, | |
| [2025-09-03T19:53:11Z] base_api_mocks: responses.RequestsMock, | |
| [2025-09-03T19:53:11Z] ) -> None: | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:231: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57247440> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57247...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57247a70>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c57247aa0>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] ______ test_airbyte_sync_and_poll_client_poll_process[sync_short_success] ______ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] n_polls = 0, error_expected = False | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c571e39e0> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "n_polls, error_expected", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (0, False), | |
| [2025-09-03T19:53:11Z] (0, True), | |
| [2025-09-03T19:53:11Z] (4, False), | |
| [2025-09-03T19:53:11Z] (4, True), | |
| [2025-09-03T19:53:11Z] (30, False), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "sync_short_success", | |
| [2025-09-03T19:53:11Z] "sync_short_failure", | |
| [2025-09-03T19:53:11Z] "sync_medium_success", | |
| [2025-09-03T19:53:11Z] "sync_medium_failure", | |
| [2025-09-03T19:53:11Z] "sync_long_success", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_poll_process( | |
| [2025-09-03T19:53:11Z] n_polls: int, error_expected: bool, base_api_mocks: responses.RequestsMock | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:295: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c571e1280> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c571e3...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c571e3020>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c571e3a70>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] ______ test_airbyte_sync_and_poll_client_poll_process[sync_short_failure] ______ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] n_polls = 0, error_expected = True | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c566602f0> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "n_polls, error_expected", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (0, False), | |
| [2025-09-03T19:53:11Z] (0, True), | |
| [2025-09-03T19:53:11Z] (4, False), | |
| [2025-09-03T19:53:11Z] (4, True), | |
| [2025-09-03T19:53:11Z] (30, False), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "sync_short_success", | |
| [2025-09-03T19:53:11Z] "sync_short_failure", | |
| [2025-09-03T19:53:11Z] "sync_medium_success", | |
| [2025-09-03T19:53:11Z] "sync_medium_failure", | |
| [2025-09-03T19:53:11Z] "sync_long_success", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_poll_process( | |
| [2025-09-03T19:53:11Z] n_polls: int, error_expected: bool, base_api_mocks: responses.RequestsMock | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:295: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56660890> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56660...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56660aa0>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56660ad0>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] _____ test_airbyte_sync_and_poll_client_poll_process[sync_medium_success] ______ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] n_polls = 4, error_expected = False | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c56663e60> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "n_polls, error_expected", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (0, False), | |
| [2025-09-03T19:53:11Z] (0, True), | |
| [2025-09-03T19:53:11Z] (4, False), | |
| [2025-09-03T19:53:11Z] (4, True), | |
| [2025-09-03T19:53:11Z] (30, False), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "sync_short_success", | |
| [2025-09-03T19:53:11Z] "sync_short_failure", | |
| [2025-09-03T19:53:11Z] "sync_medium_success", | |
| [2025-09-03T19:53:11Z] "sync_medium_failure", | |
| [2025-09-03T19:53:11Z] "sync_long_success", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_poll_process( | |
| [2025-09-03T19:53:11Z] n_polls: int, error_expected: bool, base_api_mocks: responses.RequestsMock | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:295: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56662030> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56662...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56662240>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56662270>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items() | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] for config_key, value in config_dict.items(): | |
| [2025-09-03T19:53:11Z] field_info = field_info_by_config_key.get(config_key) | |
| [2025-09-03T19:53:11Z] field = None | |
| [2025-09-03T19:53:11Z] field_key = config_key | |
| [2025-09-03T19:53:11Z] if field_info: | |
| [2025-09-03T19:53:11Z] field_key, field = field_info | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] if field and field.discriminator: | |
| [2025-09-03T19:53:11Z] nested_dict = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] discriminator_key = check.not_none(field.discriminator) | |
| [2025-09-03T19:53:11Z] if isinstance(value, Config): | |
| [2025-09-03T19:53:11Z] nested_dict = _discriminated_union_config_dict_to_selector_config_dict( | |
| [2025-09-03T19:53:11Z] discriminator_key, | |
| [2025-09-03T19:53:11Z] value._get_non_default_public_field_values(), # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] nested_items = list(check.is_dict(nested_dict).items()) | |
| [2025-09-03T19:53:11Z] check.invariant( | |
| [2025-09-03T19:53:11Z] len(nested_items) == 1, | |
| [2025-09-03T19:53:11Z] "Discriminated union must have exactly one key", | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] discriminated_value, nested_values = nested_items[0] | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = { | |
| [2025-09-03T19:53:11Z] **nested_values, | |
| [2025-09-03T19:53:11Z] discriminator_key: discriminated_value, | |
| [2025-09-03T19:53:11Z] } | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] # If the passed value matches the name of an expected Enum value, convert it to the value | |
| [2025-09-03T19:53:11Z] elif ( | |
| [2025-09-03T19:53:11Z] field | |
| [2025-09-03T19:53:11Z] and safe_is_subclass(field.annotation, Enum) | |
| [2025-09-03T19:53:11Z] and value in field.annotation.__members__ | |
| [2025-09-03T19:53:11Z] and value not in [member.value for member in field.annotation] # type: ignore | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = field.annotation.__members__[value].value | |
| [2025-09-03T19:53:11Z] elif field and safe_is_subclass(field.annotation, Config) and isinstance(value, dict): | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[field_key] = ( | |
| [2025-09-03T19:53:11Z] field.annotation._get_non_default_public_field_values_cls( # noqa: SLF001 | |
| [2025-09-03T19:53:11Z] value | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] else: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = value | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(self.__class__).items(): | |
| [2025-09-03T19:53:11Z] config_key = field.alias if field.alias else field_key | |
| [2025-09-03T19:53:11Z] if field.is_required() and config_key not in modified_data_by_config_key: | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key[config_key] = ( | |
| [2025-09-03T19:53:11Z] field.default if field.default != PydanticUndefined else None | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] > super().__init__(**modified_data_by_config_key) | |
| [2025-09-03T19:53:11Z] E pydantic_core._pydantic_core.ValidationError: 2 validation errors for AirbyteWorkspace | |
| [2025-09-03T19:53:11Z] E rest_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] E configuration_api_base_url | |
| [2025-09-03T19:53:11Z] E Input should be a valid string [type=string_type, input_value=None, input_type=NoneType] | |
| [2025-09-03T19:53:11Z] E For further information visit https://errors.pydantic.dev/2.11/v/string_type | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/config.py:253: ValidationError | |
| [2025-09-03T19:53:11Z] _____ test_airbyte_sync_and_poll_client_poll_process[sync_medium_failure] ______ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] n_polls = 4, error_expected = True | |
| [2025-09-03T19:53:11Z] base_api_mocks = <responses.RequestsMock object at 0x7f8c566617f0> | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] @pytest.mark.parametrize( | |
| [2025-09-03T19:53:11Z] "n_polls, error_expected", | |
| [2025-09-03T19:53:11Z] [ | |
| [2025-09-03T19:53:11Z] (0, False), | |
| [2025-09-03T19:53:11Z] (0, True), | |
| [2025-09-03T19:53:11Z] (4, False), | |
| [2025-09-03T19:53:11Z] (4, True), | |
| [2025-09-03T19:53:11Z] (30, False), | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ids=[ | |
| [2025-09-03T19:53:11Z] "sync_short_success", | |
| [2025-09-03T19:53:11Z] "sync_short_failure", | |
| [2025-09-03T19:53:11Z] "sync_medium_success", | |
| [2025-09-03T19:53:11Z] "sync_medium_failure", | |
| [2025-09-03T19:53:11Z] "sync_long_success", | |
| [2025-09-03T19:53:11Z] ], | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] def test_airbyte_sync_and_poll_client_poll_process( | |
| [2025-09-03T19:53:11Z] n_polls: int, error_expected: bool, base_api_mocks: responses.RequestsMock | |
| [2025-09-03T19:53:11Z] ): | |
| [2025-09-03T19:53:11Z] > resource = AirbyteWorkspace( | |
| [2025-09-03T19:53:11Z] workspace_id=TEST_WORKSPACE_ID, | |
| [2025-09-03T19:53:11Z] client_id=TEST_CLIENT_ID, | |
| [2025-09-03T19:53:11Z] client_secret=TEST_CLIENT_SECRET, | |
| [2025-09-03T19:53:11Z] ) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] dagster_airbyte_tests/beta/test_resources.py:295: | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_core/decorator_utils.py:195: in wrapped_with_pre_call_fn | |
| [2025-09-03T19:53:11Z] return fn(*args, **kwargs) | |
| [2025-09-03T19:53:11Z] ^^^^^^^^^^^^^^^^^^^ | |
| [2025-09-03T19:53:11Z] ../../dagster/dagster/_config/pythonic_config/resource.py:226: in __init__ | |
| [2025-09-03T19:53:11Z] super().__init__(**data_without_resources, **resource_pointers) | |
| [2025-09-03T19:53:11Z] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] self = AirbyteWorkspace() | |
| [2025-09-03T19:53:11Z] config_dict = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'workspace_id': 'some_workspace_id'} | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {'client_id': 'some_client_id', 'client_secret': 'some_client_secret', 'configuration_api_base_url': None, 'rest_api_base_url': None, ...} | |
| [2025-09-03T19:53:11Z] field_key = 'password' | |
| [2025-09-03T19:53:11Z] field = <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56663a40> | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = {'client_id': ('client_id', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56663...rd': ('password', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56663d10>), ...} | |
| [2025-09-03T19:53:11Z] config_key = 'password', value = 'some_client_secret' | |
| [2025-09-03T19:53:11Z] field_info = ('client_secret', <dagster_shared.dagster_model.pydantic_compat_layer.ModelFieldCompat object at 0x7f8c56663d40>) | |
| [2025-09-03T19:53:11Z] | |
| [2025-09-03T19:53:11Z] def __init__(self, **config_dict) -> None: | |
| [2025-09-03T19:53:11Z] """This constructor is overridden to handle any remapping of raw config dicts to | |
| [2025-09-03T19:53:11Z] the appropriate config classes. For example, discriminated unions are represented | |
| [2025-09-03T19:53:11Z] in Dagster config as dicts with a single key, which is the discriminator value. | |
| [2025-09-03T19:53:11Z] """ | |
| [2025-09-03T19:53:11Z] # In order to respect aliases on pydantic fields, we need to keep track of | |
| [2025-09-03T19:53:11Z] # both the the field_key which is they key for the field on the pydantic model | |
| [2025-09-03T19:53:11Z] # and the config_key which is the post alias resolution name which is | |
| [2025-09-03T19:53:11Z] # the key for that field in the incoming config_dict | |
| [2025-09-03T19:53:11Z] modified_data_by_config_key = {} | |
| [2025-09-03T19:53:11Z] field_info_by_config_key = { | |
| [2025-09-03T19:53:11Z] field.alias if field.alias else field_key: (field_key, field) | |
| [2025-09-03T19:53:11Z] for field_key, field in model_fields(s |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment