airbyte-cdk 6.57.2__tar.gz → 6.57.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/PKG-INFO +1 -1
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/_connector.py +7 -5
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/shared/catalog_providers.py +14 -4
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/shared/sql_processor.py +12 -3
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/entrypoint_wrapper.py +51 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/_job_runner.py +4 -25
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/connector_base.py +11 -2
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/docker_base.py +40 -57
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/util.py +18 -18
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/docker.py +82 -38
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/pyproject.toml +1 -1
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/LICENSE.txt +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/_image.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/_manifest.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/_secrets.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/_version.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/airbyte_cdk/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/source_declarative_manifest/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/manifest_migration.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migration_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migrations/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migrations/registry.yaml +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/manifest_migrations/migrations_registry.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/models/connector_metadata.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/composite_schema_loader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/add_fields.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/config_transformation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/remap_field.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/validators/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/validators/dpath_validator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/validators/predicate_validator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/validators/validate_adheres_to_schema.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/validators/validation_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/validators/validator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/files_directory.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/models/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/models/outcome.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/models/scenario.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/declarative_sources.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/connector_paths.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.57.2 → airbyte_cdk-6.57.3}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -67,7 +67,7 @@ except ImportError:
|
|
67
67
|
|
68
68
|
TEST_FILE_TEMPLATE = '''
|
69
69
|
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
70
|
-
"""FAST Airbyte Standard Tests for the {connector_name}
|
70
|
+
"""FAST Airbyte Standard Tests for the {connector_name} connector."""
|
71
71
|
|
72
72
|
#from airbyte_cdk.test.standard_tests import {base_class_name}
|
73
73
|
from airbyte_cdk.test.standard_tests.util import create_connector_test_suite
|
@@ -81,11 +81,13 @@ TestSuite = create_connector_test_suite(
|
|
81
81
|
connector_directory=Path(),
|
82
82
|
)
|
83
83
|
|
84
|
+
# Uncomment the following lines to create a custom test suite class:
|
85
|
+
#
|
84
86
|
# class TestSuite({base_class_name}):
|
85
|
-
# """Test suite for the {connector_name}
|
86
|
-
|
87
|
-
# This class inherits from
|
88
|
-
|
87
|
+
# """Test suite for the `{connector_name}` connector.
|
88
|
+
#
|
89
|
+
# This class inherits from `{base_class_name}` and implements all of the tests in the suite.
|
90
|
+
#
|
89
91
|
# As long as the class name starts with "Test", pytest will automatically discover and run the
|
90
92
|
# tests in this class.
|
91
93
|
# """
|
@@ -119,11 +119,21 @@ class CatalogProvider:
|
|
119
119
|
def get_primary_keys(
|
120
120
|
self,
|
121
121
|
stream_name: str,
|
122
|
-
) -> list[str]:
|
123
|
-
"""Return the primary
|
124
|
-
|
122
|
+
) -> list[str] | None:
|
123
|
+
"""Return the primary key column names for the given stream.
|
124
|
+
|
125
|
+
We return `source_defined_primary_key` if set, or `primary_key` otherwise. If both are set,
|
126
|
+
we assume they should not should differ, since Airbyte data integrity constraints do not
|
127
|
+
permit overruling a source's pre-defined primary keys. If neither is set, we return `None`.
|
128
|
+
|
129
|
+
Returns:
|
130
|
+
A list of column names that constitute the primary key, or None if no primary key is defined.
|
131
|
+
"""
|
132
|
+
configured_stream = self.get_configured_stream_info(stream_name)
|
133
|
+
pks = configured_stream.stream.source_defined_primary_key or configured_stream.primary_key
|
134
|
+
|
125
135
|
if not pks:
|
126
|
-
return
|
136
|
+
return None
|
127
137
|
|
128
138
|
normalized_pks: list[list[str]] = [
|
129
139
|
[LowerCaseNormalizer.normalize(c) for c in pk] for pk in pks
|
@@ -666,9 +666,13 @@ class SqlProcessorBase(abc.ABC):
|
|
666
666
|
"""
|
667
667
|
nl = "\n"
|
668
668
|
columns = {self._quote_identifier(c) for c in self._get_sql_column_definitions(stream_name)}
|
669
|
-
|
670
|
-
|
671
|
-
|
669
|
+
primary_keys = self.catalog_provider.get_primary_keys(stream_name)
|
670
|
+
if not primary_keys:
|
671
|
+
raise exc.AirbyteInternalError(
|
672
|
+
message="Cannot merge tables without primary keys. Primary keys are required for merge operations.",
|
673
|
+
context={"stream_name": stream_name},
|
674
|
+
)
|
675
|
+
pk_columns = {self._quote_identifier(c) for c in primary_keys}
|
672
676
|
non_pk_columns = columns - pk_columns
|
673
677
|
join_clause = f"{nl} AND ".join(f"tmp.{pk_col} = final.{pk_col}" for pk_col in pk_columns)
|
674
678
|
set_clause = f"{nl} , ".join(f"{col} = tmp.{col}" for col in non_pk_columns)
|
@@ -725,6 +729,11 @@ class SqlProcessorBase(abc.ABC):
|
|
725
729
|
final_table = self._get_table_by_name(final_table_name)
|
726
730
|
temp_table = self._get_table_by_name(temp_table_name)
|
727
731
|
pk_columns = self.catalog_provider.get_primary_keys(stream_name)
|
732
|
+
if not pk_columns:
|
733
|
+
raise exc.AirbyteInternalError(
|
734
|
+
message="Cannot merge tables without primary keys. Primary keys are required for merge operations.",
|
735
|
+
context={"stream_name": stream_name},
|
736
|
+
)
|
728
737
|
|
729
738
|
columns_to_update: set[str] = self._get_sql_column_definitions(
|
730
739
|
stream_name=stream_name
|
@@ -21,6 +21,7 @@ import tempfile
|
|
21
21
|
import traceback
|
22
22
|
from collections import deque
|
23
23
|
from collections.abc import Generator, Mapping
|
24
|
+
from dataclasses import dataclass
|
24
25
|
from io import StringIO
|
25
26
|
from pathlib import Path
|
26
27
|
from typing import Any, List, Literal, Optional, Union, final, overload
|
@@ -50,6 +51,21 @@ from airbyte_cdk.sources import Source
|
|
50
51
|
from airbyte_cdk.test.models.scenario import ExpectedOutcome
|
51
52
|
|
52
53
|
|
54
|
+
@dataclass
|
55
|
+
class AirbyteEntrypointException(Exception):
|
56
|
+
"""Exception raised for errors in the AirbyteEntrypoint execution.
|
57
|
+
|
58
|
+
Used to provide details of an Airbyte connector execution failure in the output
|
59
|
+
captured in an `EntrypointOutput` object. Use `EntrypointOutput.as_exception()` to
|
60
|
+
convert it to an exception.
|
61
|
+
|
62
|
+
Example Usage:
|
63
|
+
output = EntrypointOutput(...)
|
64
|
+
if output.errors:
|
65
|
+
raise output.as_exception()
|
66
|
+
"""
|
67
|
+
|
68
|
+
|
53
69
|
class EntrypointOutput:
|
54
70
|
"""A class to encapsulate the output of an Airbyte connector's execution.
|
55
71
|
|
@@ -67,6 +83,7 @@ class EntrypointOutput:
|
|
67
83
|
messages: list[str] | None = None,
|
68
84
|
uncaught_exception: Optional[BaseException] = None,
|
69
85
|
*,
|
86
|
+
command: list[str] | None = None,
|
70
87
|
message_file: Path | None = None,
|
71
88
|
) -> None:
|
72
89
|
if messages is None and message_file is None:
|
@@ -74,6 +91,7 @@ class EntrypointOutput:
|
|
74
91
|
if messages is not None and message_file is not None:
|
75
92
|
raise ValueError("Only one of messages or message_file can be provided")
|
76
93
|
|
94
|
+
self._command = command
|
77
95
|
self._messages: list[AirbyteMessage] | None = None
|
78
96
|
self._message_file: Path | None = message_file
|
79
97
|
if messages:
|
@@ -182,6 +200,39 @@ class EntrypointOutput:
|
|
182
200
|
def errors(self) -> List[AirbyteMessage]:
|
183
201
|
return self._get_trace_message_by_trace_type(TraceType.ERROR)
|
184
202
|
|
203
|
+
def get_formatted_error_message(self) -> str:
|
204
|
+
"""Returns a human-readable error message with the contents.
|
205
|
+
|
206
|
+
If there are no errors, returns an empty string.
|
207
|
+
"""
|
208
|
+
errors = self.errors
|
209
|
+
if not errors:
|
210
|
+
# If there are no errors, return an empty string.
|
211
|
+
return ""
|
212
|
+
|
213
|
+
result = "Failed to run airbyte command"
|
214
|
+
result += ": " + " ".join(self._command) if self._command else "."
|
215
|
+
result += "\n" + "\n".join(
|
216
|
+
[str(error.trace.error).replace("\\n", "\n") for error in errors if error.trace],
|
217
|
+
)
|
218
|
+
return result
|
219
|
+
|
220
|
+
def as_exception(self) -> AirbyteEntrypointException:
|
221
|
+
"""Convert the output to an exception."""
|
222
|
+
return AirbyteEntrypointException(self.get_formatted_error_message())
|
223
|
+
|
224
|
+
def raise_if_errors(
|
225
|
+
self,
|
226
|
+
) -> None:
|
227
|
+
"""Raise an exception if there are errors in the output.
|
228
|
+
|
229
|
+
Otherwise, do nothing.
|
230
|
+
"""
|
231
|
+
if not self.errors:
|
232
|
+
return None
|
233
|
+
|
234
|
+
raise self.as_exception()
|
235
|
+
|
185
236
|
@property
|
186
237
|
def catalog(self) -> AirbyteMessage:
|
187
238
|
catalog = self.get_message_by_types([Type.CATALOG])
|
@@ -21,26 +21,6 @@ from airbyte_cdk.test.models import (
|
|
21
21
|
)
|
22
22
|
|
23
23
|
|
24
|
-
def _errors_to_str(
|
25
|
-
entrypoint_output: entrypoint_wrapper.EntrypointOutput,
|
26
|
-
) -> str:
|
27
|
-
"""Convert errors from entrypoint output to a string."""
|
28
|
-
if not entrypoint_output.errors:
|
29
|
-
# If there are no errors, return an empty string.
|
30
|
-
return ""
|
31
|
-
|
32
|
-
return "\n" + "\n".join(
|
33
|
-
[
|
34
|
-
str(error.trace.error).replace(
|
35
|
-
"\\n",
|
36
|
-
"\n",
|
37
|
-
)
|
38
|
-
for error in entrypoint_output.errors
|
39
|
-
if error.trace
|
40
|
-
],
|
41
|
-
)
|
42
|
-
|
43
|
-
|
44
24
|
@runtime_checkable
|
45
25
|
class IConnector(Protocol):
|
46
26
|
"""A connector that can be run in a test scenario.
|
@@ -125,9 +105,7 @@ def run_test_job(
|
|
125
105
|
expected_outcome=test_scenario.expected_outcome,
|
126
106
|
)
|
127
107
|
if result.errors and test_scenario.expected_outcome.expect_success():
|
128
|
-
raise
|
129
|
-
f"Expected no errors but got {len(result.errors)}: \n" + _errors_to_str(result)
|
130
|
-
)
|
108
|
+
raise result.as_exception()
|
131
109
|
|
132
110
|
if verb == "check":
|
133
111
|
# Check is expected to fail gracefully without an exception.
|
@@ -137,7 +115,7 @@ def run_test_job(
|
|
137
115
|
"Expected exactly one CONNECTION_STATUS message. Got "
|
138
116
|
f"{len(result.connection_status_messages)}:\n"
|
139
117
|
+ "\n".join([str(msg) for msg in result.connection_status_messages])
|
140
|
-
+
|
118
|
+
+ result.get_formatted_error_message()
|
141
119
|
)
|
142
120
|
if test_scenario.expected_outcome.expect_exception():
|
143
121
|
conn_status = result.connection_status_messages[0].connectionStatus
|
@@ -161,7 +139,8 @@ def run_test_job(
|
|
161
139
|
|
162
140
|
if test_scenario.expected_outcome.expect_success():
|
163
141
|
assert not result.errors, (
|
164
|
-
f"
|
142
|
+
f"Test job failed with {len(result.errors)} error(s): \n"
|
143
|
+
+ result.get_formatted_error_message()
|
165
144
|
)
|
166
145
|
|
167
146
|
return result
|
@@ -45,7 +45,7 @@ class ConnectorTestSuiteBase(DockerConnectorTestSuite):
|
|
45
45
|
specific connector class to be tested.
|
46
46
|
"""
|
47
47
|
connector_root = cls.get_connector_root_dir()
|
48
|
-
connector_name =
|
48
|
+
connector_name = cls.connector_name
|
49
49
|
|
50
50
|
expected_module_name = connector_name.replace("-", "_").lower()
|
51
51
|
expected_class_name = connector_name.replace("-", "_").title().replace("_", "")
|
@@ -59,7 +59,16 @@ class ConnectorTestSuiteBase(DockerConnectorTestSuite):
|
|
59
59
|
try:
|
60
60
|
module = importlib.import_module(expected_module_name)
|
61
61
|
except ModuleNotFoundError as e:
|
62
|
-
raise ImportError(
|
62
|
+
raise ImportError(
|
63
|
+
f"Could not import module '{expected_module_name}'. "
|
64
|
+
"Please ensure you are running from within the connector's virtual environment, "
|
65
|
+
"for instance by running `poetry run airbyte-cdk connector test` from the "
|
66
|
+
"connector directory. If the issue persists, check that the connector "
|
67
|
+
f"module matches the expected module name '{expected_module_name}' and that the "
|
68
|
+
f"connector class matches the expected class name '{expected_class_name}'. "
|
69
|
+
"Alternatively, you can run `airbyte-cdk image test` to run a subset of tests "
|
70
|
+
"against the connector's image."
|
71
|
+
) from e
|
63
72
|
finally:
|
64
73
|
# Change back to the original working directory
|
65
74
|
os.chdir(cwd_snapshot)
|
@@ -11,7 +11,7 @@ import warnings
|
|
11
11
|
from dataclasses import asdict
|
12
12
|
from pathlib import Path
|
13
13
|
from subprocess import CompletedProcess, SubprocessError
|
14
|
-
from typing import Literal
|
14
|
+
from typing import Literal, cast
|
15
15
|
|
16
16
|
import orjson
|
17
17
|
import pytest
|
@@ -25,19 +25,18 @@ from airbyte_cdk.models import (
|
|
25
25
|
DestinationSyncMode,
|
26
26
|
SyncMode,
|
27
27
|
)
|
28
|
-
from airbyte_cdk.models.airbyte_protocol_serializers import (
|
29
|
-
AirbyteCatalogSerializer,
|
30
|
-
AirbyteStreamSerializer,
|
31
|
-
)
|
32
28
|
from airbyte_cdk.models.connector_metadata import MetadataFile
|
33
29
|
from airbyte_cdk.test.entrypoint_wrapper import EntrypointOutput
|
34
30
|
from airbyte_cdk.test.models import ConnectorTestScenario
|
35
|
-
from airbyte_cdk.test.utils.reading import catalog
|
36
31
|
from airbyte_cdk.utils.connector_paths import (
|
37
32
|
ACCEPTANCE_TEST_CONFIG,
|
38
33
|
find_connector_root,
|
39
34
|
)
|
40
|
-
from airbyte_cdk.utils.docker import
|
35
|
+
from airbyte_cdk.utils.docker import (
|
36
|
+
build_connector_image,
|
37
|
+
run_docker_airbyte_command,
|
38
|
+
run_docker_command,
|
39
|
+
)
|
41
40
|
|
42
41
|
|
43
42
|
class DockerConnectorTestSuite:
|
@@ -55,6 +54,17 @@ class DockerConnectorTestSuite:
|
|
55
54
|
"""Get the root directory of the connector."""
|
56
55
|
return find_connector_root([cls.get_test_class_dir(), Path.cwd()])
|
57
56
|
|
57
|
+
@classproperty
|
58
|
+
def connector_name(self) -> str:
|
59
|
+
"""Get the name of the connector."""
|
60
|
+
connector_root = self.get_connector_root_dir()
|
61
|
+
return connector_root.absolute().name
|
62
|
+
|
63
|
+
@classmethod
|
64
|
+
def is_destination_connector(cls) -> bool:
|
65
|
+
"""Check if the connector is a destination."""
|
66
|
+
return cast(str, cls.connector_name).startswith("destination-")
|
67
|
+
|
58
68
|
@classproperty
|
59
69
|
def acceptance_test_config_path(cls) -> Path:
|
60
70
|
"""Get the path to the acceptance test config file."""
|
@@ -145,23 +155,16 @@ class DockerConnectorTestSuite:
|
|
145
155
|
no_verify=False,
|
146
156
|
)
|
147
157
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
capture_stderr=True,
|
159
|
-
capture_stdout=True,
|
160
|
-
)
|
161
|
-
except SubprocessError as ex:
|
162
|
-
raise AssertionError(
|
163
|
-
f"Failed to run `spec` command in docker image {connector_image!r}. Error: {ex!s}"
|
164
|
-
) from None
|
158
|
+
_ = run_docker_airbyte_command(
|
159
|
+
[
|
160
|
+
"docker",
|
161
|
+
"run",
|
162
|
+
"--rm",
|
163
|
+
connector_image,
|
164
|
+
"spec",
|
165
|
+
],
|
166
|
+
raise_if_errors=True,
|
167
|
+
)
|
165
168
|
|
166
169
|
@pytest.mark.skipif(
|
167
170
|
shutil.which("docker") is None,
|
@@ -203,7 +206,7 @@ class DockerConnectorTestSuite:
|
|
203
206
|
with scenario.with_temp_config_file(
|
204
207
|
connector_root=connector_root,
|
205
208
|
) as temp_config_file:
|
206
|
-
_ =
|
209
|
+
_ = run_docker_airbyte_command(
|
207
210
|
[
|
208
211
|
"docker",
|
209
212
|
"run",
|
@@ -215,9 +218,7 @@ class DockerConnectorTestSuite:
|
|
215
218
|
"--config",
|
216
219
|
container_config_path,
|
217
220
|
],
|
218
|
-
|
219
|
-
capture_stderr=True,
|
220
|
-
capture_stdout=True,
|
221
|
+
raise_if_errors=True,
|
221
222
|
)
|
222
223
|
|
223
224
|
@pytest.mark.skipif(
|
@@ -242,6 +243,9 @@ class DockerConnectorTestSuite:
|
|
242
243
|
the local docker image cache using `docker image prune -a` command.
|
243
244
|
- If the --connector-image arg is provided, it will be used instead of building the image.
|
244
245
|
"""
|
246
|
+
if self.is_destination_connector():
|
247
|
+
pytest.skip("Skipping read test for destination connector.")
|
248
|
+
|
245
249
|
if scenario.expected_outcome.expect_exception():
|
246
250
|
pytest.skip("Skipping (expected to fail).")
|
247
251
|
|
@@ -295,7 +299,7 @@ class DockerConnectorTestSuite:
|
|
295
299
|
) as temp_dir_str,
|
296
300
|
):
|
297
301
|
temp_dir = Path(temp_dir_str)
|
298
|
-
discover_result =
|
302
|
+
discover_result = run_docker_airbyte_command(
|
299
303
|
[
|
300
304
|
"docker",
|
301
305
|
"run",
|
@@ -307,20 +311,12 @@ class DockerConnectorTestSuite:
|
|
307
311
|
"--config",
|
308
312
|
container_config_path,
|
309
313
|
],
|
310
|
-
|
311
|
-
capture_stderr=True,
|
312
|
-
capture_stdout=True,
|
314
|
+
raise_if_errors=True,
|
313
315
|
)
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
discovered_catalog: AirbyteCatalog = parsed_output.catalog.catalog
|
319
|
-
except Exception as ex:
|
320
|
-
raise AssertionError(
|
321
|
-
f"Failed to load discovered catalog from {discover_result.stdout}. "
|
322
|
-
f"Error: {ex!s}"
|
323
|
-
) from None
|
316
|
+
|
317
|
+
catalog_message = discover_result.catalog # Get catalog message
|
318
|
+
assert catalog_message.catalog is not None, "Catalog message missing catalog."
|
319
|
+
discovered_catalog: AirbyteCatalog = catalog_message.catalog
|
324
320
|
if not discovered_catalog.streams:
|
325
321
|
raise ValueError(
|
326
322
|
f"Discovered catalog for connector '{connector_name}' is empty. "
|
@@ -355,7 +351,7 @@ class DockerConnectorTestSuite:
|
|
355
351
|
configured_catalog_path.write_text(
|
356
352
|
orjson.dumps(asdict(configured_catalog)).decode("utf-8")
|
357
353
|
)
|
358
|
-
read_result:
|
354
|
+
read_result: EntrypointOutput = run_docker_airbyte_command(
|
359
355
|
[
|
360
356
|
"docker",
|
361
357
|
"run",
|
@@ -371,18 +367,5 @@ class DockerConnectorTestSuite:
|
|
371
367
|
"--catalog",
|
372
368
|
container_catalog_path,
|
373
369
|
],
|
374
|
-
|
375
|
-
capture_stderr=True,
|
376
|
-
capture_stdout=True,
|
370
|
+
raise_if_errors=True,
|
377
371
|
)
|
378
|
-
if read_result.returncode != 0:
|
379
|
-
raise AssertionError(
|
380
|
-
f"Failed to run `read` command in docker image {connector_image!r}. "
|
381
|
-
"\n-----------------"
|
382
|
-
f"EXIT CODE: {read_result.returncode}\n"
|
383
|
-
"STDERR:\n"
|
384
|
-
f"{read_result.stderr}\n"
|
385
|
-
f"STDOUT:\n"
|
386
|
-
f"{read_result.stdout}\n"
|
387
|
-
"\n-----------------"
|
388
|
-
) from None
|
@@ -10,6 +10,7 @@ from airbyte_cdk.test.standard_tests.connector_base import ConnectorTestSuiteBas
|
|
10
10
|
from airbyte_cdk.test.standard_tests.declarative_sources import (
|
11
11
|
DeclarativeSourceTestSuite,
|
12
12
|
)
|
13
|
+
from airbyte_cdk.test.standard_tests.destination_base import DestinationTestSuiteBase
|
13
14
|
from airbyte_cdk.test.standard_tests.docker_base import DockerConnectorTestSuite
|
14
15
|
from airbyte_cdk.test.standard_tests.source_base import SourceTestSuiteBase
|
15
16
|
from airbyte_cdk.utils.connector_paths import (
|
@@ -17,15 +18,6 @@ from airbyte_cdk.utils.connector_paths import (
|
|
17
18
|
find_connector_root_from_name,
|
18
19
|
)
|
19
20
|
|
20
|
-
TEST_CLASS_MAPPING: dict[
|
21
|
-
Literal["python", "manifest-only", "java"],
|
22
|
-
type[DockerConnectorTestSuite],
|
23
|
-
] = {
|
24
|
-
"python": SourceTestSuiteBase,
|
25
|
-
"manifest-only": DeclarativeSourceTestSuite,
|
26
|
-
"java": DockerConnectorTestSuite,
|
27
|
-
}
|
28
|
-
|
29
21
|
|
30
22
|
def create_connector_test_suite(
|
31
23
|
*,
|
@@ -46,7 +38,7 @@ def create_connector_test_suite(
|
|
46
38
|
# By here, we know that connector_directory is not None
|
47
39
|
# but connector_name is None. Set the connector_name.
|
48
40
|
assert connector_directory is not None, "connector_directory should not be None here."
|
49
|
-
connector_name = connector_directory.name
|
41
|
+
connector_name = connector_directory.absolute().name
|
50
42
|
|
51
43
|
metadata_yaml_path = connector_directory / METADATA_YAML
|
52
44
|
if not metadata_yaml_path.exists():
|
@@ -55,17 +47,25 @@ def create_connector_test_suite(
|
|
55
47
|
)
|
56
48
|
metadata_dict: dict[str, Any] = yaml.safe_load(metadata_yaml_path.read_text())
|
57
49
|
metadata_tags = metadata_dict["data"].get("tags", [])
|
58
|
-
for
|
59
|
-
|
60
|
-
language = language_option
|
61
|
-
test_suite_class = TEST_CLASS_MAPPING[language]
|
62
|
-
break
|
63
|
-
else:
|
50
|
+
language_tags: list[str] = [tag for tag in metadata_tags if tag.startswith("language:")]
|
51
|
+
if not language_tags:
|
64
52
|
raise ValueError(
|
65
|
-
f"
|
66
|
-
|
53
|
+
f"Metadata YAML file '{metadata_yaml_path}' does not contain a 'language' tag. "
|
54
|
+
"Please ensure the metadata file is correctly configured."
|
67
55
|
f"Found tags: {', '.join(metadata_tags)}"
|
68
56
|
)
|
57
|
+
language = language_tags[0].split(":")[1]
|
58
|
+
|
59
|
+
if language == "java":
|
60
|
+
test_suite_class = DockerConnectorTestSuite
|
61
|
+
elif language == "manifest-only":
|
62
|
+
test_suite_class = DeclarativeSourceTestSuite
|
63
|
+
elif language == "python" and connector_name.startswith("source-"):
|
64
|
+
test_suite_class = SourceTestSuiteBase
|
65
|
+
elif language == "python" and connector_name.startswith("destination-"):
|
66
|
+
test_suite_class = DestinationTestSuiteBase
|
67
|
+
else:
|
68
|
+
raise ValueError(f"Unsupported language for connector '{connector_name}': {language}")
|
69
69
|
|
70
70
|
subclass_overrides: dict[str, Any] = {
|
71
71
|
"get_connector_root_dir": classmethod(lambda cls: connector_directory),
|