airbyte-cdk 6.41.6__tar.gz → 6.41.8__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.41.6 → airbyte_cdk-6.41.8}/PKG-INFO +1 -1
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +42 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +2 -1
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +41 -2
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +40 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +4 -0
- airbyte_cdk-6.41.8/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +150 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +4 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/pyproject.toml +1 -1
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/LICENSE.txt +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/README.md +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -3260,12 +3260,14 @@ definitions:
|
|
3260
3260
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3261
3261
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3262
3262
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3263
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3263
3264
|
- type: array
|
3264
3265
|
items:
|
3265
3266
|
anyOf:
|
3266
3267
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3267
3268
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3268
3269
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3270
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3269
3271
|
decoder:
|
3270
3272
|
title: Decoder
|
3271
3273
|
description: Component decoding the response so records can be extracted.
|
@@ -3431,12 +3433,14 @@ definitions:
|
|
3431
3433
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3432
3434
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3433
3435
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3436
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3434
3437
|
- type: array
|
3435
3438
|
items:
|
3436
3439
|
anyOf:
|
3437
3440
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3438
3441
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3439
3442
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3443
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3440
3444
|
decoder:
|
3441
3445
|
title: Decoder
|
3442
3446
|
description: Component decoding the response so records can be extracted.
|
@@ -3553,6 +3557,44 @@ definitions:
|
|
3553
3557
|
$parameters:
|
3554
3558
|
type: object
|
3555
3559
|
additionalProperties: true
|
3560
|
+
GroupingPartitionRouter:
|
3561
|
+
title: Grouping Partition Router
|
3562
|
+
description: >
|
3563
|
+
A decorator on top of a partition router that groups partitions into batches of a specified size.
|
3564
|
+
This is useful for APIs that support filtering by multiple partition keys in a single request.
|
3565
|
+
Note that per-partition incremental syncs may not work as expected because the grouping
|
3566
|
+
of partitions might change between syncs, potentially leading to inconsistent state tracking.
|
3567
|
+
type: object
|
3568
|
+
required:
|
3569
|
+
- type
|
3570
|
+
- group_size
|
3571
|
+
- underlying_partition_router
|
3572
|
+
properties:
|
3573
|
+
type:
|
3574
|
+
type: string
|
3575
|
+
enum: [GroupingPartitionRouter]
|
3576
|
+
group_size:
|
3577
|
+
title: Group Size
|
3578
|
+
description: The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.
|
3579
|
+
type: integer
|
3580
|
+
examples:
|
3581
|
+
- 10
|
3582
|
+
- 50
|
3583
|
+
underlying_partition_router:
|
3584
|
+
title: Underlying Partition Router
|
3585
|
+
description: The partition router whose output will be grouped. This can be any valid partition router component.
|
3586
|
+
anyOf:
|
3587
|
+
- "$ref": "#/definitions/CustomPartitionRouter"
|
3588
|
+
- "$ref": "#/definitions/ListPartitionRouter"
|
3589
|
+
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3590
|
+
deduplicate:
|
3591
|
+
title: Deduplicate Partitions
|
3592
|
+
description: If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.
|
3593
|
+
type: boolean
|
3594
|
+
default: true
|
3595
|
+
$parameters:
|
3596
|
+
type: object
|
3597
|
+
additionalProperties: true
|
3556
3598
|
WaitUntilTimeFromHeader:
|
3557
3599
|
title: Wait Until Time Defined In Response Header
|
3558
3600
|
description: Extract time at which we can retry the request from response header and wait for the difference between now and that time.
|
@@ -79,6 +79,7 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
79
79
|
connector_state_manager: ConnectorStateManager,
|
80
80
|
connector_state_converter: AbstractStreamStateConverter,
|
81
81
|
cursor_field: CursorField,
|
82
|
+
use_global_cursor: bool = False,
|
82
83
|
) -> None:
|
83
84
|
self._global_cursor: Optional[StreamState] = {}
|
84
85
|
self._stream_name = stream_name
|
@@ -106,7 +107,7 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
106
107
|
self._lookback_window: int = 0
|
107
108
|
self._parent_state: Optional[StreamState] = None
|
108
109
|
self._number_of_partitions: int = 0
|
109
|
-
self._use_global_cursor: bool =
|
110
|
+
self._use_global_cursor: bool = use_global_cursor
|
110
111
|
self._partition_serializer = PerPartitionKeySerializer()
|
111
112
|
# Track the last time a state message was emitted
|
112
113
|
self._last_emission_time: float = 0.0
|
@@ -2303,7 +2303,15 @@ class SimpleRetriever(BaseModel):
|
|
2303
2303
|
CustomPartitionRouter,
|
2304
2304
|
ListPartitionRouter,
|
2305
2305
|
SubstreamPartitionRouter,
|
2306
|
-
|
2306
|
+
GroupingPartitionRouter,
|
2307
|
+
List[
|
2308
|
+
Union[
|
2309
|
+
CustomPartitionRouter,
|
2310
|
+
ListPartitionRouter,
|
2311
|
+
SubstreamPartitionRouter,
|
2312
|
+
GroupingPartitionRouter,
|
2313
|
+
]
|
2314
|
+
],
|
2307
2315
|
]
|
2308
2316
|
] = Field(
|
2309
2317
|
[],
|
@@ -2385,7 +2393,15 @@ class AsyncRetriever(BaseModel):
|
|
2385
2393
|
CustomPartitionRouter,
|
2386
2394
|
ListPartitionRouter,
|
2387
2395
|
SubstreamPartitionRouter,
|
2388
|
-
|
2396
|
+
GroupingPartitionRouter,
|
2397
|
+
List[
|
2398
|
+
Union[
|
2399
|
+
CustomPartitionRouter,
|
2400
|
+
ListPartitionRouter,
|
2401
|
+
SubstreamPartitionRouter,
|
2402
|
+
GroupingPartitionRouter,
|
2403
|
+
]
|
2404
|
+
],
|
2389
2405
|
]
|
2390
2406
|
] = Field(
|
2391
2407
|
[],
|
@@ -2437,6 +2453,29 @@ class SubstreamPartitionRouter(BaseModel):
|
|
2437
2453
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
2438
2454
|
|
2439
2455
|
|
2456
|
+
class GroupingPartitionRouter(BaseModel):
|
2457
|
+
type: Literal["GroupingPartitionRouter"]
|
2458
|
+
group_size: int = Field(
|
2459
|
+
...,
|
2460
|
+
description="The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.",
|
2461
|
+
examples=[10, 50],
|
2462
|
+
title="Group Size",
|
2463
|
+
)
|
2464
|
+
underlying_partition_router: Union[
|
2465
|
+
CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter
|
2466
|
+
] = Field(
|
2467
|
+
...,
|
2468
|
+
description="The partition router whose output will be grouped. This can be any valid partition router component.",
|
2469
|
+
title="Underlying Partition Router",
|
2470
|
+
)
|
2471
|
+
deduplicate: Optional[bool] = Field(
|
2472
|
+
True,
|
2473
|
+
description="If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.",
|
2474
|
+
title="Deduplicate Partitions",
|
2475
|
+
)
|
2476
|
+
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
2477
|
+
|
2478
|
+
|
2440
2479
|
class HttpComponentsResolver(BaseModel):
|
2441
2480
|
type: Literal["HttpComponentsResolver"]
|
2442
2481
|
retriever: Union[AsyncRetriever, CustomRetriever, SimpleRetriever] = Field(
|
@@ -227,6 +227,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
227
227
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
228
228
|
FlattenFields as FlattenFieldsModel,
|
229
229
|
)
|
230
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
231
|
+
GroupingPartitionRouter as GroupingPartitionRouterModel,
|
232
|
+
)
|
230
233
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
231
234
|
GzipDecoder as GzipDecoderModel,
|
232
235
|
)
|
@@ -385,6 +388,7 @@ from airbyte_cdk.sources.declarative.parsers.custom_code_compiler import (
|
|
385
388
|
)
|
386
389
|
from airbyte_cdk.sources.declarative.partition_routers import (
|
387
390
|
CartesianProductStreamSlicer,
|
391
|
+
GroupingPartitionRouter,
|
388
392
|
ListPartitionRouter,
|
389
393
|
PartitionRouter,
|
390
394
|
SinglePartitionRouter,
|
@@ -638,6 +642,7 @@ class ModelToComponentFactory:
|
|
638
642
|
UnlimitedCallRatePolicyModel: self.create_unlimited_call_rate_policy,
|
639
643
|
RateModel: self.create_rate,
|
640
644
|
HttpRequestRegexMatcherModel: self.create_http_request_matcher,
|
645
|
+
GroupingPartitionRouterModel: self.create_grouping_partition_router,
|
641
646
|
}
|
642
647
|
|
643
648
|
# Needed for the case where we need to perform a second parse on the fields of a custom component
|
@@ -1355,6 +1360,9 @@ class ModelToComponentFactory:
|
|
1355
1360
|
)
|
1356
1361
|
stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
|
1357
1362
|
|
1363
|
+
# Per-partition state doesn't make sense for GroupingPartitionRouter, so force the global state
|
1364
|
+
use_global_cursor = isinstance(partition_router, GroupingPartitionRouter)
|
1365
|
+
|
1358
1366
|
# Return the concurrent cursor and state converter
|
1359
1367
|
return ConcurrentPerPartitionCursor(
|
1360
1368
|
cursor_factory=cursor_factory,
|
@@ -1366,6 +1374,7 @@ class ModelToComponentFactory:
|
|
1366
1374
|
connector_state_manager=state_manager,
|
1367
1375
|
connector_state_converter=connector_state_converter,
|
1368
1376
|
cursor_field=cursor_field,
|
1377
|
+
use_global_cursor=use_global_cursor,
|
1369
1378
|
)
|
1370
1379
|
|
1371
1380
|
@staticmethod
|
@@ -3370,3 +3379,34 @@ class ModelToComponentFactory:
|
|
3370
3379
|
self._api_budget = self.create_component(
|
3371
3380
|
model_type=HTTPAPIBudgetModel, component_definition=component_definition, config=config
|
3372
3381
|
)
|
3382
|
+
|
3383
|
+
def create_grouping_partition_router(
|
3384
|
+
self, model: GroupingPartitionRouterModel, config: Config, **kwargs: Any
|
3385
|
+
) -> GroupingPartitionRouter:
|
3386
|
+
underlying_router = self._create_component_from_model(
|
3387
|
+
model=model.underlying_partition_router, config=config
|
3388
|
+
)
|
3389
|
+
if model.group_size < 1:
|
3390
|
+
raise ValueError(f"Group size must be greater than 0, got {model.group_size}")
|
3391
|
+
|
3392
|
+
# Request options in underlying partition routers are not supported for GroupingPartitionRouter
|
3393
|
+
# because they are specific to individual partitions and cannot be aggregated or handled
|
3394
|
+
# when grouping, potentially leading to incorrect API calls. Any request customization
|
3395
|
+
# should be managed at the stream level through the requester's configuration.
|
3396
|
+
if isinstance(underlying_router, SubstreamPartitionRouter):
|
3397
|
+
if any(
|
3398
|
+
parent_config.request_option
|
3399
|
+
for parent_config in underlying_router.parent_stream_configs
|
3400
|
+
):
|
3401
|
+
raise ValueError("Request options are not supported for GroupingPartitionRouter.")
|
3402
|
+
|
3403
|
+
if isinstance(underlying_router, ListPartitionRouter):
|
3404
|
+
if underlying_router.request_option:
|
3405
|
+
raise ValueError("Request options are not supported for GroupingPartitionRouter.")
|
3406
|
+
|
3407
|
+
return GroupingPartitionRouter(
|
3408
|
+
group_size=model.group_size,
|
3409
|
+
underlying_partition_router=underlying_router,
|
3410
|
+
deduplicate=model.deduplicate if model.deduplicate is not None else True,
|
3411
|
+
config=config,
|
3412
|
+
)
|
@@ -8,6 +8,9 @@ from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_route
|
|
8
8
|
from airbyte_cdk.sources.declarative.partition_routers.cartesian_product_stream_slicer import (
|
9
9
|
CartesianProductStreamSlicer,
|
10
10
|
)
|
11
|
+
from airbyte_cdk.sources.declarative.partition_routers.grouping_partition_router import (
|
12
|
+
GroupingPartitionRouter,
|
13
|
+
)
|
11
14
|
from airbyte_cdk.sources.declarative.partition_routers.list_partition_router import (
|
12
15
|
ListPartitionRouter,
|
13
16
|
)
|
@@ -22,6 +25,7 @@ from airbyte_cdk.sources.declarative.partition_routers.substream_partition_route
|
|
22
25
|
__all__ = [
|
23
26
|
"AsyncJobPartitionRouter",
|
24
27
|
"CartesianProductStreamSlicer",
|
28
|
+
"GroupingPartitionRouter",
|
25
29
|
"ListPartitionRouter",
|
26
30
|
"SinglePartitionRouter",
|
27
31
|
"SubstreamPartitionRouter",
|
airbyte_cdk-6.41.8/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
from dataclasses import dataclass
|
6
|
+
from typing import Any, Iterable, Mapping, Optional
|
7
|
+
|
8
|
+
from airbyte_cdk.sources.declarative.partition_routers.partition_router import PartitionRouter
|
9
|
+
from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
|
10
|
+
|
11
|
+
|
12
|
+
@dataclass
|
13
|
+
class GroupingPartitionRouter(PartitionRouter):
|
14
|
+
"""
|
15
|
+
A partition router that groups partitions from an underlying partition router into batches of a specified size.
|
16
|
+
This is useful for APIs that support filtering by multiple partition keys in a single request.
|
17
|
+
|
18
|
+
Attributes:
|
19
|
+
group_size (int): The number of partitions to include in each group.
|
20
|
+
underlying_partition_router (PartitionRouter): The partition router whose output will be grouped.
|
21
|
+
deduplicate (bool): If True, ensures unique partitions within each group by removing duplicates based on the partition key.
|
22
|
+
config (Config): The connector configuration.
|
23
|
+
parameters (Mapping[str, Any]): Additional parameters for interpolation and configuration.
|
24
|
+
"""
|
25
|
+
|
26
|
+
group_size: int
|
27
|
+
underlying_partition_router: PartitionRouter
|
28
|
+
config: Config
|
29
|
+
deduplicate: bool = True
|
30
|
+
|
31
|
+
def __post_init__(self) -> None:
|
32
|
+
self._state: Optional[Mapping[str, StreamState]] = {}
|
33
|
+
|
34
|
+
def stream_slices(self) -> Iterable[StreamSlice]:
|
35
|
+
"""
|
36
|
+
Lazily groups partitions from the underlying partition router into batches of size `group_size`.
|
37
|
+
|
38
|
+
This method processes partitions one at a time from the underlying router, maintaining a batch buffer.
|
39
|
+
When the buffer reaches `group_size` or the underlying router is exhausted, it yields a grouped slice.
|
40
|
+
If deduplication is enabled, it tracks seen partition keys to ensure uniqueness within the current batch.
|
41
|
+
|
42
|
+
Yields:
|
43
|
+
Iterable[StreamSlice]: An iterable of StreamSlice objects, where each slice contains a batch of partition values.
|
44
|
+
"""
|
45
|
+
batch = []
|
46
|
+
seen_keys = set()
|
47
|
+
|
48
|
+
# Iterate over partitions lazily from the underlying router
|
49
|
+
for partition in self.underlying_partition_router.stream_slices():
|
50
|
+
# Extract the partition key (assuming single key-value pair, e.g., {"board_ids": value})
|
51
|
+
partition_keys = list(partition.partition.keys())
|
52
|
+
# skip parent_slice as it is part of SubstreamPartitionRouter partition
|
53
|
+
if "parent_slice" in partition_keys:
|
54
|
+
partition_keys.remove("parent_slice")
|
55
|
+
if len(partition_keys) != 1:
|
56
|
+
raise ValueError(
|
57
|
+
f"GroupingPartitionRouter expects a single partition key-value pair. Got {partition.partition}"
|
58
|
+
)
|
59
|
+
key = partition.partition[partition_keys[0]]
|
60
|
+
|
61
|
+
# Skip duplicates if deduplication is enabled
|
62
|
+
if self.deduplicate and key in seen_keys:
|
63
|
+
continue
|
64
|
+
|
65
|
+
# Add partition to the batch
|
66
|
+
batch.append(partition)
|
67
|
+
if self.deduplicate:
|
68
|
+
seen_keys.add(key)
|
69
|
+
|
70
|
+
# Yield the batch when it reaches the group_size
|
71
|
+
if len(batch) == self.group_size:
|
72
|
+
self._state = self.underlying_partition_router.get_stream_state()
|
73
|
+
yield self._create_grouped_slice(batch)
|
74
|
+
batch = [] # Reset the batch
|
75
|
+
|
76
|
+
self._state = self.underlying_partition_router.get_stream_state()
|
77
|
+
# Yield any remaining partitions if the batch isn't empty
|
78
|
+
if batch:
|
79
|
+
yield self._create_grouped_slice(batch)
|
80
|
+
|
81
|
+
def _create_grouped_slice(self, batch: list[StreamSlice]) -> StreamSlice:
|
82
|
+
"""
|
83
|
+
Creates a grouped StreamSlice from a batch of partitions, aggregating extra fields into a dictionary with list values.
|
84
|
+
|
85
|
+
Args:
|
86
|
+
batch (list[StreamSlice]): A list of StreamSlice objects to group.
|
87
|
+
|
88
|
+
Returns:
|
89
|
+
StreamSlice: A single StreamSlice with combined partition and extra field values.
|
90
|
+
"""
|
91
|
+
# Combine partition values into a single dict with lists
|
92
|
+
grouped_partition = {
|
93
|
+
key: [p.partition.get(key) for p in batch] for key in batch[0].partition.keys()
|
94
|
+
}
|
95
|
+
|
96
|
+
# Aggregate extra fields into a dict with list values
|
97
|
+
extra_fields_dict = (
|
98
|
+
{
|
99
|
+
key: [p.extra_fields.get(key) for p in batch]
|
100
|
+
for key in set().union(*(p.extra_fields.keys() for p in batch if p.extra_fields))
|
101
|
+
}
|
102
|
+
if any(p.extra_fields for p in batch)
|
103
|
+
else {}
|
104
|
+
)
|
105
|
+
return StreamSlice(
|
106
|
+
partition=grouped_partition,
|
107
|
+
cursor_slice={}, # Cursor is managed by the underlying router or incremental sync
|
108
|
+
extra_fields=extra_fields_dict,
|
109
|
+
)
|
110
|
+
|
111
|
+
def get_request_params(
|
112
|
+
self,
|
113
|
+
stream_state: Optional[StreamState] = None,
|
114
|
+
stream_slice: Optional[StreamSlice] = None,
|
115
|
+
next_page_token: Optional[Mapping[str, Any]] = None,
|
116
|
+
) -> Mapping[str, Any]:
|
117
|
+
return {}
|
118
|
+
|
119
|
+
def get_request_headers(
|
120
|
+
self,
|
121
|
+
stream_state: Optional[StreamState] = None,
|
122
|
+
stream_slice: Optional[StreamSlice] = None,
|
123
|
+
next_page_token: Optional[Mapping[str, Any]] = None,
|
124
|
+
) -> Mapping[str, Any]:
|
125
|
+
return {}
|
126
|
+
|
127
|
+
def get_request_body_data(
|
128
|
+
self,
|
129
|
+
stream_state: Optional[StreamState] = None,
|
130
|
+
stream_slice: Optional[StreamSlice] = None,
|
131
|
+
next_page_token: Optional[Mapping[str, Any]] = None,
|
132
|
+
) -> Mapping[str, Any]:
|
133
|
+
return {}
|
134
|
+
|
135
|
+
def get_request_body_json(
|
136
|
+
self,
|
137
|
+
stream_state: Optional[StreamState] = None,
|
138
|
+
stream_slice: Optional[StreamSlice] = None,
|
139
|
+
next_page_token: Optional[Mapping[str, Any]] = None,
|
140
|
+
) -> Mapping[str, Any]:
|
141
|
+
return {}
|
142
|
+
|
143
|
+
def set_initial_state(self, stream_state: StreamState) -> None:
|
144
|
+
"""Delegate state initialization to the underlying partition router."""
|
145
|
+
self.underlying_partition_router.set_initial_state(stream_state)
|
146
|
+
self._state = self.underlying_partition_router.get_stream_state()
|
147
|
+
|
148
|
+
def get_stream_state(self) -> Optional[Mapping[str, StreamState]]:
|
149
|
+
"""Delegate state retrieval to the underlying partition router."""
|
150
|
+
return self._state
|
@@ -71,6 +71,10 @@ class AbstractStreamStateConverter(ABC):
|
|
71
71
|
for stream_slice in state.get("slices", []):
|
72
72
|
stream_slice[self.START_KEY] = self._from_state_message(stream_slice[self.START_KEY])
|
73
73
|
stream_slice[self.END_KEY] = self._from_state_message(stream_slice[self.END_KEY])
|
74
|
+
if self.MOST_RECENT_RECORD_KEY in stream_slice:
|
75
|
+
stream_slice[self.MOST_RECENT_RECORD_KEY] = self._from_state_message(
|
76
|
+
stream_slice[self.MOST_RECENT_RECORD_KEY]
|
77
|
+
)
|
74
78
|
return state
|
75
79
|
|
76
80
|
def serialize(
|
@@ -23,7 +23,7 @@ classifiers = [
|
|
23
23
|
keywords = ["airbyte", "connector-development-kit", "cdk"]
|
24
24
|
|
25
25
|
# Python CDK uses dynamic versioning: https://github.com/mtkennerly/poetry-dynamic-versioning
|
26
|
-
version = "6.41.
|
26
|
+
version = "6.41.8" # Version will be calculated dynamically.
|
27
27
|
|
28
28
|
[tool.poetry-dynamic-versioning]
|
29
29
|
enable = false
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/__init__.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/_run.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/spec.json
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/connector_builder_handler.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/__init__.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/helpers.py
RENAMED
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/reader.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/types.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/README.md
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/__init__.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/config.py
RENAMED
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/embedder.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/indexer.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/test_utils.py
RENAMED
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/writer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/airbyte_protocol_serializers.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/file_transfer_record_message.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_source.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job_tracker.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/repository.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/status.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/timer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/token_provider.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/__init__.py
RENAMED
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/check_stream.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_source.py
RENAMED
File without changes
|
{airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_stream.py
RENAMED
File without changes
|