airbyte-cdk 6.36.1__tar.gz → 6.36.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.36.1 → airbyte_cdk-6.36.3}/PKG-INFO +1 -1
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/models.py +16 -14
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/helpers.py +120 -22
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +16 -3
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/types.py +9 -1
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/token_provider.py +1 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +21 -3
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +1 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +83 -17
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +2 -2
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +49 -30
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/README.md +5 -5
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +60 -17
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/http_requester.py +7 -1
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +10 -3
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/http_logger.py +3 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +1 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/pyproject.toml +1 -1
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/LICENSE.txt +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/README.md +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -21,20 +21,6 @@ class HttpRequest:
|
|
21
21
|
body: Optional[str] = None
|
22
22
|
|
23
23
|
|
24
|
-
@dataclass
|
25
|
-
class StreamReadPages:
|
26
|
-
records: List[object]
|
27
|
-
request: Optional[HttpRequest] = None
|
28
|
-
response: Optional[HttpResponse] = None
|
29
|
-
|
30
|
-
|
31
|
-
@dataclass
|
32
|
-
class StreamReadSlices:
|
33
|
-
pages: List[StreamReadPages]
|
34
|
-
slice_descriptor: Optional[Dict[str, Any]]
|
35
|
-
state: Optional[List[Dict[str, Any]]] = None
|
36
|
-
|
37
|
-
|
38
24
|
@dataclass
|
39
25
|
class LogMessage:
|
40
26
|
message: str
|
@@ -46,11 +32,27 @@ class LogMessage:
|
|
46
32
|
@dataclass
|
47
33
|
class AuxiliaryRequest:
|
48
34
|
title: str
|
35
|
+
type: str
|
49
36
|
description: str
|
50
37
|
request: HttpRequest
|
51
38
|
response: HttpResponse
|
52
39
|
|
53
40
|
|
41
|
+
@dataclass
|
42
|
+
class StreamReadPages:
|
43
|
+
records: List[object]
|
44
|
+
request: Optional[HttpRequest] = None
|
45
|
+
response: Optional[HttpResponse] = None
|
46
|
+
|
47
|
+
|
48
|
+
@dataclass
|
49
|
+
class StreamReadSlices:
|
50
|
+
pages: List[StreamReadPages]
|
51
|
+
slice_descriptor: Optional[Dict[str, Any]]
|
52
|
+
state: Optional[List[Dict[str, Any]]] = None
|
53
|
+
auxiliary_requests: Optional[List[AuxiliaryRequest]] = None
|
54
|
+
|
55
|
+
|
54
56
|
@dataclass
|
55
57
|
class StreamRead(object):
|
56
58
|
logs: List[LogMessage]
|
{airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/helpers.py
RENAMED
@@ -28,7 +28,7 @@ from airbyte_cdk.utils.schema_inferrer import (
|
|
28
28
|
SchemaInferrer,
|
29
29
|
)
|
30
30
|
|
31
|
-
from .types import LOG_MESSAGES_OUTPUT_TYPE
|
31
|
+
from .types import ASYNC_AUXILIARY_REQUEST_TYPES, LOG_MESSAGES_OUTPUT_TYPE
|
32
32
|
|
33
33
|
# -------
|
34
34
|
# Parsers
|
@@ -226,7 +226,8 @@ def should_close_page(
|
|
226
226
|
at_least_one_page_in_group
|
227
227
|
and is_log_message(message)
|
228
228
|
and (
|
229
|
-
is_page_http_request(json_message)
|
229
|
+
is_page_http_request(json_message)
|
230
|
+
or message.log.message.startswith(SliceLogger.SLICE_LOG_PREFIX) # type: ignore[union-attr] # AirbyteMessage with MessageType.LOG has log.message
|
230
231
|
)
|
231
232
|
)
|
232
233
|
|
@@ -330,6 +331,10 @@ def is_auxiliary_http_request(message: Optional[Dict[str, Any]]) -> bool:
|
|
330
331
|
return is_http_log(message) and message.get("http", {}).get("is_auxiliary", False)
|
331
332
|
|
332
333
|
|
334
|
+
def is_async_auxiliary_request(message: AuxiliaryRequest) -> bool:
|
335
|
+
return message.type in ASYNC_AUXILIARY_REQUEST_TYPES
|
336
|
+
|
337
|
+
|
333
338
|
def is_log_message(message: AirbyteMessage) -> bool:
|
334
339
|
"""
|
335
340
|
Determines whether the provided message is of type LOG.
|
@@ -413,6 +418,7 @@ def handle_current_slice(
|
|
413
418
|
current_slice_pages: List[StreamReadPages],
|
414
419
|
current_slice_descriptor: Optional[Dict[str, Any]] = None,
|
415
420
|
latest_state_message: Optional[Dict[str, Any]] = None,
|
421
|
+
auxiliary_requests: Optional[List[AuxiliaryRequest]] = None,
|
416
422
|
) -> StreamReadSlices:
|
417
423
|
"""
|
418
424
|
Handles the current slice by packaging its pages, descriptor, and state into a StreamReadSlices instance.
|
@@ -421,6 +427,7 @@ def handle_current_slice(
|
|
421
427
|
current_slice_pages (List[StreamReadPages]): The pages to be included in the slice.
|
422
428
|
current_slice_descriptor (Optional[Dict[str, Any]]): Descriptor for the current slice, optional.
|
423
429
|
latest_state_message (Optional[Dict[str, Any]]): The latest state message, optional.
|
430
|
+
auxiliary_requests (Optional[List[AuxiliaryRequest]]): The auxiliary requests to include, optional.
|
424
431
|
|
425
432
|
Returns:
|
426
433
|
StreamReadSlices: An object containing the current slice's pages, descriptor, and state.
|
@@ -429,6 +436,7 @@ def handle_current_slice(
|
|
429
436
|
pages=current_slice_pages,
|
430
437
|
slice_descriptor=current_slice_descriptor,
|
431
438
|
state=[latest_state_message] if latest_state_message else [],
|
439
|
+
auxiliary_requests=auxiliary_requests if auxiliary_requests else [],
|
432
440
|
)
|
433
441
|
|
434
442
|
|
@@ -486,29 +494,24 @@ def handle_auxiliary_request(json_message: Dict[str, JsonType]) -> AuxiliaryRequ
|
|
486
494
|
Raises:
|
487
495
|
ValueError: If any of the "airbyte_cdk", "stream", or "http" fields is not a dictionary.
|
488
496
|
"""
|
489
|
-
airbyte_cdk = json_message.get("airbyte_cdk", {})
|
490
|
-
|
491
|
-
if not isinstance(airbyte_cdk, dict):
|
492
|
-
raise ValueError(
|
493
|
-
f"Expected airbyte_cdk to be a dict, got {airbyte_cdk} of type {type(airbyte_cdk)}"
|
494
|
-
)
|
495
|
-
|
496
|
-
stream = airbyte_cdk.get("stream", {})
|
497
497
|
|
498
|
-
|
499
|
-
|
498
|
+
airbyte_cdk = get_airbyte_cdk_from_message(json_message)
|
499
|
+
stream = get_stream_from_airbyte_cdk(airbyte_cdk)
|
500
|
+
title_prefix = get_auxiliary_request_title_prefix(stream)
|
501
|
+
http = get_http_property_from_message(json_message)
|
502
|
+
request_type = get_auxiliary_request_type(stream, http)
|
500
503
|
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
raise ValueError(f"Expected http to be a dict, got {http} of type {type(http)}")
|
504
|
+
title = title_prefix + str(http.get("title", None))
|
505
|
+
description = str(http.get("description", None))
|
506
|
+
request = create_request_from_log_message(json_message)
|
507
|
+
response = create_response_from_log_message(json_message)
|
506
508
|
|
507
509
|
return AuxiliaryRequest(
|
508
|
-
title=
|
509
|
-
|
510
|
-
|
511
|
-
|
510
|
+
title=title,
|
511
|
+
type=request_type,
|
512
|
+
description=description,
|
513
|
+
request=request,
|
514
|
+
response=response,
|
512
515
|
)
|
513
516
|
|
514
517
|
|
@@ -558,7 +561,8 @@ def handle_log_message(
|
|
558
561
|
at_least_one_page_in_group,
|
559
562
|
current_page_request,
|
560
563
|
current_page_response,
|
561
|
-
auxiliary_request
|
564
|
+
auxiliary_request,
|
565
|
+
log_message,
|
562
566
|
)
|
563
567
|
|
564
568
|
|
@@ -589,3 +593,97 @@ def handle_record_message(
|
|
589
593
|
datetime_format_inferrer.accumulate(message.record) # type: ignore
|
590
594
|
|
591
595
|
return records_count
|
596
|
+
|
597
|
+
|
598
|
+
# -------
|
599
|
+
# Reusable Getters
|
600
|
+
# -------
|
601
|
+
|
602
|
+
|
603
|
+
def get_airbyte_cdk_from_message(json_message: Dict[str, JsonType]) -> dict: # type: ignore
|
604
|
+
"""
|
605
|
+
Retrieves the "airbyte_cdk" dictionary from the provided JSON message.
|
606
|
+
|
607
|
+
This function validates that the extracted "airbyte_cdk" is of type dict,
|
608
|
+
raising a ValueError if the validation fails.
|
609
|
+
|
610
|
+
Parameters:
|
611
|
+
json_message (Dict[str, JsonType]): A dictionary representing the JSON message.
|
612
|
+
|
613
|
+
Returns:
|
614
|
+
dict: The "airbyte_cdk" dictionary extracted from the JSON message.
|
615
|
+
|
616
|
+
Raises:
|
617
|
+
ValueError: If the "airbyte_cdk" field is not a dictionary.
|
618
|
+
"""
|
619
|
+
airbyte_cdk = json_message.get("airbyte_cdk", {})
|
620
|
+
|
621
|
+
if not isinstance(airbyte_cdk, dict):
|
622
|
+
raise ValueError(
|
623
|
+
f"Expected airbyte_cdk to be a dict, got {airbyte_cdk} of type {type(airbyte_cdk)}"
|
624
|
+
)
|
625
|
+
|
626
|
+
return airbyte_cdk
|
627
|
+
|
628
|
+
|
629
|
+
def get_stream_from_airbyte_cdk(airbyte_cdk: dict) -> dict: # type: ignore
|
630
|
+
"""
|
631
|
+
Retrieves the "stream" dictionary from the provided "airbyte_cdk" dictionary.
|
632
|
+
|
633
|
+
This function ensures that the extracted "stream" is of type dict,
|
634
|
+
raising a ValueError if the validation fails.
|
635
|
+
|
636
|
+
Parameters:
|
637
|
+
airbyte_cdk (dict): The dictionary representing the Airbyte CDK data.
|
638
|
+
|
639
|
+
Returns:
|
640
|
+
dict: The "stream" dictionary extracted from the Airbyte CDK data.
|
641
|
+
|
642
|
+
Raises:
|
643
|
+
ValueError: If the "stream" field is not a dictionary.
|
644
|
+
"""
|
645
|
+
|
646
|
+
stream = airbyte_cdk.get("stream", {})
|
647
|
+
|
648
|
+
if not isinstance(stream, dict):
|
649
|
+
raise ValueError(f"Expected stream to be a dict, got {stream} of type {type(stream)}")
|
650
|
+
|
651
|
+
return stream
|
652
|
+
|
653
|
+
|
654
|
+
def get_auxiliary_request_title_prefix(stream: dict) -> str: # type: ignore
|
655
|
+
"""
|
656
|
+
Generates a title prefix based on the stream type.
|
657
|
+
"""
|
658
|
+
return "Parent stream: " if stream.get("is_substream", False) else ""
|
659
|
+
|
660
|
+
|
661
|
+
def get_http_property_from_message(json_message: Dict[str, JsonType]) -> dict: # type: ignore
|
662
|
+
"""
|
663
|
+
Retrieves the "http" dictionary from the provided JSON message.
|
664
|
+
|
665
|
+
This function validates that the extracted "http" is of type dict,
|
666
|
+
raising a ValueError if the validation fails.
|
667
|
+
|
668
|
+
Parameters:
|
669
|
+
json_message (Dict[str, JsonType]): A dictionary representing the JSON message.
|
670
|
+
|
671
|
+
Returns:
|
672
|
+
dict: The "http" dictionary extracted from the JSON message.
|
673
|
+
|
674
|
+
Raises:
|
675
|
+
ValueError: If the "http" field is not a dictionary.
|
676
|
+
"""
|
677
|
+
http = json_message.get("http", {})
|
678
|
+
|
679
|
+
if not isinstance(http, dict):
|
680
|
+
raise ValueError(f"Expected http to be a dict, got {http} of type {type(http)}")
|
681
|
+
|
682
|
+
return http
|
683
|
+
|
684
|
+
|
685
|
+
def get_auxiliary_request_type(stream: dict, http: dict) -> str: # type: ignore
|
686
|
+
"""
|
687
|
+
Determines the type of the auxiliary request based on the stream and HTTP properties.
|
688
|
+
"""
|
689
|
+
return "PARENT_STREAM" if stream.get("is_substream", False) else str(http.get("type", None))
|
@@ -6,6 +6,7 @@
|
|
6
6
|
from typing import Any, Dict, Iterator, List, Mapping, Optional
|
7
7
|
|
8
8
|
from airbyte_cdk.connector_builder.models import (
|
9
|
+
AuxiliaryRequest,
|
9
10
|
HttpRequest,
|
10
11
|
HttpResponse,
|
11
12
|
StreamReadPages,
|
@@ -24,6 +25,7 @@ from .helpers import (
|
|
24
25
|
handle_current_slice,
|
25
26
|
handle_log_message,
|
26
27
|
handle_record_message,
|
28
|
+
is_async_auxiliary_request,
|
27
29
|
is_config_update_message,
|
28
30
|
is_log_message,
|
29
31
|
is_record_message,
|
@@ -89,6 +91,7 @@ def get_message_groups(
|
|
89
91
|
current_page_request: Optional[HttpRequest] = None
|
90
92
|
current_page_response: Optional[HttpResponse] = None
|
91
93
|
latest_state_message: Optional[Dict[str, Any]] = None
|
94
|
+
slice_auxiliary_requests: List[AuxiliaryRequest] = []
|
92
95
|
|
93
96
|
while records_count < limit and (message := next(messages, None)):
|
94
97
|
json_message = airbyte_message_to_json(message)
|
@@ -106,6 +109,7 @@ def get_message_groups(
|
|
106
109
|
current_slice_pages,
|
107
110
|
current_slice_descriptor,
|
108
111
|
latest_state_message,
|
112
|
+
slice_auxiliary_requests,
|
109
113
|
)
|
110
114
|
current_slice_descriptor = parse_slice_description(message.log.message) # type: ignore
|
111
115
|
current_slice_pages = []
|
@@ -118,7 +122,8 @@ def get_message_groups(
|
|
118
122
|
at_least_one_page_in_group,
|
119
123
|
current_page_request,
|
120
124
|
current_page_response,
|
121
|
-
|
125
|
+
auxiliary_request,
|
126
|
+
log_message,
|
122
127
|
) = handle_log_message(
|
123
128
|
message,
|
124
129
|
json_message,
|
@@ -126,8 +131,15 @@ def get_message_groups(
|
|
126
131
|
current_page_request,
|
127
132
|
current_page_response,
|
128
133
|
)
|
129
|
-
|
130
|
-
|
134
|
+
|
135
|
+
if auxiliary_request:
|
136
|
+
if is_async_auxiliary_request(auxiliary_request):
|
137
|
+
slice_auxiliary_requests.append(auxiliary_request)
|
138
|
+
else:
|
139
|
+
yield auxiliary_request
|
140
|
+
|
141
|
+
if log_message:
|
142
|
+
yield log_message
|
131
143
|
elif is_trace_with_error(message):
|
132
144
|
if message.trace is not None:
|
133
145
|
yield message.trace
|
@@ -157,4 +169,5 @@ def get_message_groups(
|
|
157
169
|
current_slice_pages,
|
158
170
|
current_slice_descriptor,
|
159
171
|
latest_state_message,
|
172
|
+
slice_auxiliary_requests,
|
160
173
|
)
|
{airbyte_cdk-6.36.1 → airbyte_cdk-6.36.3}/airbyte_cdk/connector_builder/test_reader/types.py
RENAMED
@@ -71,5 +71,13 @@ LOG_MESSAGES_OUTPUT_TYPE = tuple[
|
|
71
71
|
bool,
|
72
72
|
HttpRequest | None,
|
73
73
|
HttpResponse | None,
|
74
|
-
AuxiliaryRequest |
|
74
|
+
AuxiliaryRequest | None,
|
75
|
+
AirbyteLogMessage | None,
|
76
|
+
]
|
77
|
+
|
78
|
+
ASYNC_AUXILIARY_REQUEST_TYPES = [
|
79
|
+
"ASYNC_CREATE",
|
80
|
+
"ASYNC_POLL",
|
81
|
+
"ASYNC_ABORT",
|
82
|
+
"ASYNC_DELETE",
|
75
83
|
]
|
@@ -1779,6 +1779,9 @@ definitions:
|
|
1779
1779
|
- stream_interval
|
1780
1780
|
- stream_partition
|
1781
1781
|
- stream_slice
|
1782
|
+
- creation_response
|
1783
|
+
- polling_response
|
1784
|
+
- download_target
|
1782
1785
|
examples:
|
1783
1786
|
- "/products"
|
1784
1787
|
- "/quotes/{{ stream_partition['id'] }}/quote_line_groups"
|
@@ -3223,7 +3226,7 @@ definitions:
|
|
3223
3226
|
- polling_requester
|
3224
3227
|
- download_requester
|
3225
3228
|
- status_extractor
|
3226
|
-
-
|
3229
|
+
- download_target_extractor
|
3227
3230
|
properties:
|
3228
3231
|
type:
|
3229
3232
|
type: string
|
@@ -3240,7 +3243,7 @@ definitions:
|
|
3240
3243
|
anyOf:
|
3241
3244
|
- "$ref": "#/definitions/CustomRecordExtractor"
|
3242
3245
|
- "$ref": "#/definitions/DpathExtractor"
|
3243
|
-
|
3246
|
+
download_target_extractor:
|
3244
3247
|
description: Responsible for fetching the final result `urls` provided by the completed / finished / ready async job.
|
3245
3248
|
anyOf:
|
3246
3249
|
- "$ref": "#/definitions/CustomRecordExtractor"
|
@@ -3261,7 +3264,7 @@ definitions:
|
|
3261
3264
|
anyOf:
|
3262
3265
|
- "$ref": "#/definitions/CustomRequester"
|
3263
3266
|
- "$ref": "#/definitions/HttpRequester"
|
3264
|
-
|
3267
|
+
download_target_requester:
|
3265
3268
|
description: Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.
|
3266
3269
|
anyOf:
|
3267
3270
|
- "$ref": "#/definitions/CustomRequester"
|
@@ -3667,6 +3670,21 @@ interpolation:
|
|
3667
3670
|
self: https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=
|
3668
3671
|
next: https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=0236d6d2
|
3669
3672
|
count: 82
|
3673
|
+
- title: creation_response
|
3674
|
+
description: The response received from the creation_requester in the AsyncRetriever component.
|
3675
|
+
type: object
|
3676
|
+
examples:
|
3677
|
+
- id: "1234"
|
3678
|
+
- title: polling_response
|
3679
|
+
description: The response received from the polling_requester in the AsyncRetriever component.
|
3680
|
+
type: object
|
3681
|
+
examples:
|
3682
|
+
- id: "1234"
|
3683
|
+
- title: download_target
|
3684
|
+
description: The `URL` received from the polling_requester in the AsyncRetriever with jobStatus as `COMPLETED`.
|
3685
|
+
type: string
|
3686
|
+
examples:
|
3687
|
+
- "https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=0236d6d2&filename=xxx_yyy_zzz.csv"
|
3670
3688
|
- title: stream_interval
|
3671
3689
|
description: The current stream interval being processed. The keys are defined by the incremental sync component. Default keys are `start_time` and `end_time`.
|
3672
3690
|
type: object
|
@@ -136,6 +136,7 @@ class ResponseToFileExtractor(RecordExtractor):
|
|
136
136
|
"""
|
137
137
|
|
138
138
|
try:
|
139
|
+
# TODO: Add support for other file types, like `json`, with `pd.read_json()`
|
139
140
|
with open(path, "r", encoding=file_encoding) as data:
|
140
141
|
chunks = pd.read_csv(
|
141
142
|
data, chunksize=chunk_size, iterator=True, dialect="unix", dtype=object
|
@@ -95,6 +95,10 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
95
95
|
# the oldest partitions can be efficiently removed, maintaining the most recent partitions.
|
96
96
|
self._cursor_per_partition: OrderedDict[str, ConcurrentCursor] = OrderedDict()
|
97
97
|
self._semaphore_per_partition: OrderedDict[str, threading.Semaphore] = OrderedDict()
|
98
|
+
|
99
|
+
# Parent-state tracking: store each partition’s parent state in creation order
|
100
|
+
self._partition_parent_state_map: OrderedDict[str, Mapping[str, Any]] = OrderedDict()
|
101
|
+
|
98
102
|
self._finished_partitions: set[str] = set()
|
99
103
|
self._lock = threading.Lock()
|
100
104
|
self._timer = Timer()
|
@@ -155,11 +159,62 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
155
159
|
and self._semaphore_per_partition[partition_key]._value == 0
|
156
160
|
):
|
157
161
|
self._update_global_cursor(cursor.state[self.cursor_field.cursor_field_key])
|
158
|
-
|
162
|
+
|
163
|
+
self._check_and_update_parent_state()
|
164
|
+
|
165
|
+
self._emit_state_message()
|
166
|
+
|
167
|
+
def _check_and_update_parent_state(self) -> None:
|
168
|
+
"""
|
169
|
+
Pop the leftmost partition state from _partition_parent_state_map only if
|
170
|
+
*all partitions* up to (and including) that partition key in _semaphore_per_partition
|
171
|
+
are fully finished (i.e. in _finished_partitions and semaphore._value == 0).
|
172
|
+
Additionally, delete finished semaphores with a value of 0 to free up memory,
|
173
|
+
as they are only needed to track errors and completion status.
|
174
|
+
"""
|
175
|
+
last_closed_state = None
|
176
|
+
|
177
|
+
while self._partition_parent_state_map:
|
178
|
+
# Look at the earliest partition key in creation order
|
179
|
+
earliest_key = next(iter(self._partition_parent_state_map))
|
180
|
+
|
181
|
+
# Verify ALL partitions from the left up to earliest_key are finished
|
182
|
+
all_left_finished = True
|
183
|
+
for p_key, sem in list(
|
184
|
+
self._semaphore_per_partition.items()
|
185
|
+
): # Use list to allow modification during iteration
|
186
|
+
# If any earlier partition is still not finished, we must stop
|
187
|
+
if p_key not in self._finished_partitions or sem._value != 0:
|
188
|
+
all_left_finished = False
|
189
|
+
break
|
190
|
+
# Once we've reached earliest_key in the semaphore order, we can stop checking
|
191
|
+
if p_key == earliest_key:
|
192
|
+
break
|
193
|
+
|
194
|
+
# If the partitions up to earliest_key are not all finished, break the while-loop
|
195
|
+
if not all_left_finished:
|
196
|
+
break
|
197
|
+
|
198
|
+
# Pop the leftmost entry from parent-state map
|
199
|
+
_, closed_parent_state = self._partition_parent_state_map.popitem(last=False)
|
200
|
+
last_closed_state = closed_parent_state
|
201
|
+
|
202
|
+
# Clean up finished semaphores with value 0 up to and including earliest_key
|
203
|
+
for p_key in list(self._semaphore_per_partition.keys()):
|
204
|
+
sem = self._semaphore_per_partition[p_key]
|
205
|
+
if p_key in self._finished_partitions and sem._value == 0:
|
206
|
+
del self._semaphore_per_partition[p_key]
|
207
|
+
logger.debug(f"Deleted finished semaphore for partition {p_key} with value 0")
|
208
|
+
if p_key == earliest_key:
|
209
|
+
break
|
210
|
+
|
211
|
+
# Update _parent_state if we popped at least one partition
|
212
|
+
if last_closed_state is not None:
|
213
|
+
self._parent_state = last_closed_state
|
159
214
|
|
160
215
|
def ensure_at_least_one_state_emitted(self) -> None:
|
161
216
|
"""
|
162
|
-
The platform
|
217
|
+
The platform expects at least one state message on successful syncs. Hence, whatever happens, we expect this method to be
|
163
218
|
called.
|
164
219
|
"""
|
165
220
|
if not any(
|
@@ -201,13 +256,19 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
201
256
|
|
202
257
|
slices = self._partition_router.stream_slices()
|
203
258
|
self._timer.start()
|
204
|
-
for partition in
|
205
|
-
|
259
|
+
for partition, last, parent_state in iterate_with_last_flag_and_state(
|
260
|
+
slices, self._partition_router.get_stream_state
|
261
|
+
):
|
262
|
+
yield from self._generate_slices_from_partition(partition, parent_state)
|
206
263
|
|
207
|
-
def _generate_slices_from_partition(
|
264
|
+
def _generate_slices_from_partition(
|
265
|
+
self, partition: StreamSlice, parent_state: Mapping[str, Any]
|
266
|
+
) -> Iterable[StreamSlice]:
|
208
267
|
# Ensure the maximum number of partitions is not exceeded
|
209
268
|
self._ensure_partition_limit()
|
210
269
|
|
270
|
+
partition_key = self._to_partition_key(partition.partition)
|
271
|
+
|
211
272
|
cursor = self._cursor_per_partition.get(self._to_partition_key(partition.partition))
|
212
273
|
if not cursor:
|
213
274
|
cursor = self._create_cursor(
|
@@ -216,18 +277,26 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
216
277
|
)
|
217
278
|
with self._lock:
|
218
279
|
self._number_of_partitions += 1
|
219
|
-
self._cursor_per_partition[
|
220
|
-
|
221
|
-
|
222
|
-
|
280
|
+
self._cursor_per_partition[partition_key] = cursor
|
281
|
+
self._semaphore_per_partition[partition_key] = threading.Semaphore(0)
|
282
|
+
|
283
|
+
with self._lock:
|
284
|
+
if (
|
285
|
+
len(self._partition_parent_state_map) == 0
|
286
|
+
or self._partition_parent_state_map[
|
287
|
+
next(reversed(self._partition_parent_state_map))
|
288
|
+
]
|
289
|
+
!= parent_state
|
290
|
+
):
|
291
|
+
self._partition_parent_state_map[partition_key] = deepcopy(parent_state)
|
223
292
|
|
224
293
|
for cursor_slice, is_last_slice, _ in iterate_with_last_flag_and_state(
|
225
294
|
cursor.stream_slices(),
|
226
295
|
lambda: None,
|
227
296
|
):
|
228
|
-
self._semaphore_per_partition[
|
297
|
+
self._semaphore_per_partition[partition_key].release()
|
229
298
|
if is_last_slice:
|
230
|
-
self._finished_partitions.add(
|
299
|
+
self._finished_partitions.add(partition_key)
|
231
300
|
yield StreamSlice(
|
232
301
|
partition=partition, cursor_slice=cursor_slice, extra_fields=partition.extra_fields
|
233
302
|
)
|
@@ -257,9 +326,9 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
257
326
|
while len(self._cursor_per_partition) > self.DEFAULT_MAX_PARTITIONS_NUMBER - 1:
|
258
327
|
# Try removing finished partitions first
|
259
328
|
for partition_key in list(self._cursor_per_partition.keys()):
|
260
|
-
if (
|
261
|
-
partition_key in self.
|
262
|
-
|
329
|
+
if partition_key in self._finished_partitions and (
|
330
|
+
partition_key not in self._semaphore_per_partition
|
331
|
+
or self._semaphore_per_partition[partition_key]._value == 0
|
263
332
|
):
|
264
333
|
oldest_partition = self._cursor_per_partition.pop(
|
265
334
|
partition_key
|
@@ -338,9 +407,6 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
338
407
|
self._cursor_per_partition[self._to_partition_key(state["partition"])] = (
|
339
408
|
self._create_cursor(state["cursor"])
|
340
409
|
)
|
341
|
-
self._semaphore_per_partition[self._to_partition_key(state["partition"])] = (
|
342
|
-
threading.Semaphore(0)
|
343
|
-
)
|
344
410
|
|
345
411
|
# set default state for missing partitions if it is per partition with fallback to global
|
346
412
|
if self._GLOBAL_STATE_KEY in stream_state:
|
@@ -2263,7 +2263,7 @@ class AsyncRetriever(BaseModel):
|
|
2263
2263
|
status_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
|
2264
2264
|
..., description="Responsible for fetching the actual status of the async job."
|
2265
2265
|
)
|
2266
|
-
|
2266
|
+
download_target_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
|
2267
2267
|
...,
|
2268
2268
|
description="Responsible for fetching the final result `urls` provided by the completed / finished / ready async job.",
|
2269
2269
|
)
|
@@ -2278,7 +2278,7 @@ class AsyncRetriever(BaseModel):
|
|
2278
2278
|
...,
|
2279
2279
|
description="Requester component that describes how to prepare HTTP requests to send to the source API to fetch the status of the running async job.",
|
2280
2280
|
)
|
2281
|
-
|
2281
|
+
download_target_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
|
2282
2282
|
None,
|
2283
2283
|
description="Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.",
|
2284
2284
|
)
|