Skip to content

Instantly share code, notes, and snippets.

@cmpadden
Created September 3, 2025 20:10
Show Gist options
  • Select an option

  • Save cmpadden/357af2210fc3a4cfa5acca082dceba65 to your computer and use it in GitHub Desktop.

Select an option

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.
[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