airbyte-cdk 6.36.2__tar.gz → 6.37.0.dev1__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.2 → airbyte_cdk-6.37.0.dev1}/PKG-INFO +1 -1
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/models.py +14 -16
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/test_reader/helpers.py +22 -120
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +3 -16
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/test_reader/types.py +1 -9
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -1
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -15
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +43 -5
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +2 -13
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -1
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +17 -83
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +42 -3
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +63 -52
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +4 -0
- airbyte_cdk-6.37.0.dev1/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +136 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +4 -42
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +3 -10
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/http_logger.py +0 -3
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -1
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/pyproject.toml +1 -1
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/LICENSE.txt +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/README.md +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -21,6 +21,20 @@ 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
|
+
|
24
38
|
@dataclass
|
25
39
|
class LogMessage:
|
26
40
|
message: str
|
@@ -32,27 +46,11 @@ class LogMessage:
|
|
32
46
|
@dataclass
|
33
47
|
class AuxiliaryRequest:
|
34
48
|
title: str
|
35
|
-
type: str
|
36
49
|
description: str
|
37
50
|
request: HttpRequest
|
38
51
|
response: HttpResponse
|
39
52
|
|
40
53
|
|
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
|
-
|
56
54
|
@dataclass
|
57
55
|
class StreamRead(object):
|
58
56
|
logs: List[LogMessage]
|
{airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/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
|
31
|
+
from .types import LOG_MESSAGES_OUTPUT_TYPE
|
32
32
|
|
33
33
|
# -------
|
34
34
|
# Parsers
|
@@ -226,8 +226,7 @@ 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)
|
230
|
-
or message.log.message.startswith(SliceLogger.SLICE_LOG_PREFIX) # type: ignore[union-attr] # AirbyteMessage with MessageType.LOG has log.message
|
229
|
+
is_page_http_request(json_message) or message.log.message.startswith("slice:") # type: ignore[union-attr] # AirbyteMessage with MessageType.LOG has log.message
|
231
230
|
)
|
232
231
|
)
|
233
232
|
|
@@ -331,10 +330,6 @@ def is_auxiliary_http_request(message: Optional[Dict[str, Any]]) -> bool:
|
|
331
330
|
return is_http_log(message) and message.get("http", {}).get("is_auxiliary", False)
|
332
331
|
|
333
332
|
|
334
|
-
def is_async_auxiliary_request(message: AuxiliaryRequest) -> bool:
|
335
|
-
return message.type in ASYNC_AUXILIARY_REQUEST_TYPES
|
336
|
-
|
337
|
-
|
338
333
|
def is_log_message(message: AirbyteMessage) -> bool:
|
339
334
|
"""
|
340
335
|
Determines whether the provided message is of type LOG.
|
@@ -418,7 +413,6 @@ def handle_current_slice(
|
|
418
413
|
current_slice_pages: List[StreamReadPages],
|
419
414
|
current_slice_descriptor: Optional[Dict[str, Any]] = None,
|
420
415
|
latest_state_message: Optional[Dict[str, Any]] = None,
|
421
|
-
auxiliary_requests: Optional[List[AuxiliaryRequest]] = None,
|
422
416
|
) -> StreamReadSlices:
|
423
417
|
"""
|
424
418
|
Handles the current slice by packaging its pages, descriptor, and state into a StreamReadSlices instance.
|
@@ -427,7 +421,6 @@ def handle_current_slice(
|
|
427
421
|
current_slice_pages (List[StreamReadPages]): The pages to be included in the slice.
|
428
422
|
current_slice_descriptor (Optional[Dict[str, Any]]): Descriptor for the current slice, optional.
|
429
423
|
latest_state_message (Optional[Dict[str, Any]]): The latest state message, optional.
|
430
|
-
auxiliary_requests (Optional[List[AuxiliaryRequest]]): The auxiliary requests to include, optional.
|
431
424
|
|
432
425
|
Returns:
|
433
426
|
StreamReadSlices: An object containing the current slice's pages, descriptor, and state.
|
@@ -436,7 +429,6 @@ def handle_current_slice(
|
|
436
429
|
pages=current_slice_pages,
|
437
430
|
slice_descriptor=current_slice_descriptor,
|
438
431
|
state=[latest_state_message] if latest_state_message else [],
|
439
|
-
auxiliary_requests=auxiliary_requests if auxiliary_requests else [],
|
440
432
|
)
|
441
433
|
|
442
434
|
|
@@ -494,24 +486,29 @@ def handle_auxiliary_request(json_message: Dict[str, JsonType]) -> AuxiliaryRequ
|
|
494
486
|
Raises:
|
495
487
|
ValueError: If any of the "airbyte_cdk", "stream", or "http" fields is not a dictionary.
|
496
488
|
"""
|
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
|
-
|
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)
|
498
|
+
if not isinstance(stream, dict):
|
499
|
+
raise ValueError(f"Expected stream to be a dict, got {stream} of type {type(stream)}")
|
503
500
|
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
501
|
+
title_prefix = "Parent stream: " if stream.get("is_substream", False) else ""
|
502
|
+
http = json_message.get("http", {})
|
503
|
+
|
504
|
+
if not isinstance(http, dict):
|
505
|
+
raise ValueError(f"Expected http to be a dict, got {http} of type {type(http)}")
|
508
506
|
|
509
507
|
return AuxiliaryRequest(
|
510
|
-
title=title,
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
response=response,
|
508
|
+
title=title_prefix + str(http.get("title", None)),
|
509
|
+
description=str(http.get("description", None)),
|
510
|
+
request=create_request_from_log_message(json_message),
|
511
|
+
response=create_response_from_log_message(json_message),
|
515
512
|
)
|
516
513
|
|
517
514
|
|
@@ -561,8 +558,7 @@ def handle_log_message(
|
|
561
558
|
at_least_one_page_in_group,
|
562
559
|
current_page_request,
|
563
560
|
current_page_response,
|
564
|
-
auxiliary_request,
|
565
|
-
log_message,
|
561
|
+
auxiliary_request or log_message,
|
566
562
|
)
|
567
563
|
|
568
564
|
|
@@ -593,97 +589,3 @@ def handle_record_message(
|
|
593
589
|
datetime_format_inferrer.accumulate(message.record) # type: ignore
|
594
590
|
|
595
591
|
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,7 +6,6 @@
|
|
6
6
|
from typing import Any, Dict, Iterator, List, Mapping, Optional
|
7
7
|
|
8
8
|
from airbyte_cdk.connector_builder.models import (
|
9
|
-
AuxiliaryRequest,
|
10
9
|
HttpRequest,
|
11
10
|
HttpResponse,
|
12
11
|
StreamReadPages,
|
@@ -25,7 +24,6 @@ from .helpers import (
|
|
25
24
|
handle_current_slice,
|
26
25
|
handle_log_message,
|
27
26
|
handle_record_message,
|
28
|
-
is_async_auxiliary_request,
|
29
27
|
is_config_update_message,
|
30
28
|
is_log_message,
|
31
29
|
is_record_message,
|
@@ -91,7 +89,6 @@ def get_message_groups(
|
|
91
89
|
current_page_request: Optional[HttpRequest] = None
|
92
90
|
current_page_response: Optional[HttpResponse] = None
|
93
91
|
latest_state_message: Optional[Dict[str, Any]] = None
|
94
|
-
slice_auxiliary_requests: List[AuxiliaryRequest] = []
|
95
92
|
|
96
93
|
while records_count < limit and (message := next(messages, None)):
|
97
94
|
json_message = airbyte_message_to_json(message)
|
@@ -109,7 +106,6 @@ def get_message_groups(
|
|
109
106
|
current_slice_pages,
|
110
107
|
current_slice_descriptor,
|
111
108
|
latest_state_message,
|
112
|
-
slice_auxiliary_requests,
|
113
109
|
)
|
114
110
|
current_slice_descriptor = parse_slice_description(message.log.message) # type: ignore
|
115
111
|
current_slice_pages = []
|
@@ -122,8 +118,7 @@ def get_message_groups(
|
|
122
118
|
at_least_one_page_in_group,
|
123
119
|
current_page_request,
|
124
120
|
current_page_response,
|
125
|
-
|
126
|
-
log_message,
|
121
|
+
log_or_auxiliary_request,
|
127
122
|
) = handle_log_message(
|
128
123
|
message,
|
129
124
|
json_message,
|
@@ -131,15 +126,8 @@ def get_message_groups(
|
|
131
126
|
current_page_request,
|
132
127
|
current_page_response,
|
133
128
|
)
|
134
|
-
|
135
|
-
|
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
|
129
|
+
if log_or_auxiliary_request:
|
130
|
+
yield log_or_auxiliary_request
|
143
131
|
elif is_trace_with_error(message):
|
144
132
|
if message.trace is not None:
|
145
133
|
yield message.trace
|
@@ -169,5 +157,4 @@ def get_message_groups(
|
|
169
157
|
current_slice_pages,
|
170
158
|
current_slice_descriptor,
|
171
159
|
latest_state_message,
|
172
|
-
slice_auxiliary_requests,
|
173
160
|
)
|
{airbyte_cdk-6.36.2 → airbyte_cdk-6.37.0.dev1}/airbyte_cdk/connector_builder/test_reader/types.py
RENAMED
@@ -71,13 +71,5 @@ LOG_MESSAGES_OUTPUT_TYPE = tuple[
|
|
71
71
|
bool,
|
72
72
|
HttpRequest | None,
|
73
73
|
HttpResponse | None,
|
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",
|
74
|
+
AuxiliaryRequest | AirbyteLogMessage | None,
|
83
75
|
]
|
@@ -44,7 +44,6 @@ from airbyte_cdk.sources.declarative.types import ConnectionDefinition
|
|
44
44
|
from airbyte_cdk.sources.source import TState
|
45
45
|
from airbyte_cdk.sources.streams import Stream
|
46
46
|
from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream
|
47
|
-
from airbyte_cdk.sources.streams.concurrent.abstract_stream_facade import AbstractStreamFacade
|
48
47
|
from airbyte_cdk.sources.streams.concurrent.availability_strategy import (
|
49
48
|
AlwaysAvailableAvailabilityStrategy,
|
50
49
|
)
|
@@ -119,12 +118,6 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
119
118
|
message_repository=self.message_repository,
|
120
119
|
)
|
121
120
|
|
122
|
-
# TODO: Remove this. This property is necessary to safely migrate Stripe during the transition state.
|
123
|
-
@property
|
124
|
-
def is_partially_declarative(self) -> bool:
|
125
|
-
"""This flag used to avoid unexpected AbstractStreamFacade processing as concurrent streams."""
|
126
|
-
return False
|
127
|
-
|
128
121
|
def read(
|
129
122
|
self,
|
130
123
|
logger: logging.Logger,
|
@@ -376,14 +369,6 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
376
369
|
)
|
377
370
|
else:
|
378
371
|
synchronous_streams.append(declarative_stream)
|
379
|
-
# TODO: Remove this. This check is necessary to safely migrate Stripe during the transition state.
|
380
|
-
# Condition below needs to ensure that concurrent support is not lost for sources that already support
|
381
|
-
# it before migration, but now are only partially migrated to declarative implementation (e.g., Stripe).
|
382
|
-
elif (
|
383
|
-
isinstance(declarative_stream, AbstractStreamFacade)
|
384
|
-
and self.is_partially_declarative
|
385
|
-
):
|
386
|
-
concurrent_streams.append(declarative_stream.get_underlying_stream())
|
387
372
|
else:
|
388
373
|
synchronous_streams.append(declarative_stream)
|
389
374
|
|
@@ -1490,11 +1490,7 @@ definitions:
|
|
1490
1490
|
limit:
|
1491
1491
|
title: Limit
|
1492
1492
|
description: The maximum number of calls allowed within the interval.
|
1493
|
-
|
1494
|
-
- type: integer
|
1495
|
-
- type: string
|
1496
|
-
interpolation_context:
|
1497
|
-
- config
|
1493
|
+
type: integer
|
1498
1494
|
interval:
|
1499
1495
|
title: Interval
|
1500
1496
|
description: The time interval for the rate limit.
|
@@ -3134,12 +3130,14 @@ definitions:
|
|
3134
3130
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3135
3131
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3136
3132
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3133
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3137
3134
|
- type: array
|
3138
3135
|
items:
|
3139
3136
|
anyOf:
|
3140
3137
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3141
3138
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3142
3139
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3140
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3143
3141
|
decoder:
|
3144
3142
|
title: Decoder
|
3145
3143
|
description: Component decoding the response so records can be extracted.
|
@@ -3294,12 +3292,14 @@ definitions:
|
|
3294
3292
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3295
3293
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3296
3294
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3295
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3297
3296
|
- type: array
|
3298
3297
|
items:
|
3299
3298
|
anyOf:
|
3300
3299
|
- "$ref": "#/definitions/CustomPartitionRouter"
|
3301
3300
|
- "$ref": "#/definitions/ListPartitionRouter"
|
3302
3301
|
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3302
|
+
- "$ref": "#/definitions/GroupingPartitionRouter"
|
3303
3303
|
decoder:
|
3304
3304
|
title: Decoder
|
3305
3305
|
description: Component decoding the response so records can be extracted.
|
@@ -3416,6 +3416,44 @@ definitions:
|
|
3416
3416
|
$parameters:
|
3417
3417
|
type: object
|
3418
3418
|
additionalProperties: true
|
3419
|
+
GroupingPartitionRouter:
|
3420
|
+
title: Grouping Partition Router
|
3421
|
+
description: >
|
3422
|
+
A decorator on top of a partition router that groups partitions into batches of a specified size.
|
3423
|
+
This is useful for APIs that support filtering by multiple partition keys in a single request.
|
3424
|
+
Note that per-partition incremental syncs may not work as expected because the grouping
|
3425
|
+
of partitions might change between syncs, potentially leading to inconsistent state tracking.
|
3426
|
+
type: object
|
3427
|
+
required:
|
3428
|
+
- type
|
3429
|
+
- group_size
|
3430
|
+
- underlying_partition_router
|
3431
|
+
properties:
|
3432
|
+
type:
|
3433
|
+
type: string
|
3434
|
+
enum: [GroupingPartitionRouter]
|
3435
|
+
group_size:
|
3436
|
+
title: Group Size
|
3437
|
+
description: The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.
|
3438
|
+
type: integer
|
3439
|
+
examples:
|
3440
|
+
- 10
|
3441
|
+
- 50
|
3442
|
+
underlying_partition_router:
|
3443
|
+
title: Underlying Partition Router
|
3444
|
+
description: The partition router whose output will be grouped. This can be any valid partition router component.
|
3445
|
+
anyOf:
|
3446
|
+
- "$ref": "#/definitions/CustomPartitionRouter"
|
3447
|
+
- "$ref": "#/definitions/ListPartitionRouter"
|
3448
|
+
- "$ref": "#/definitions/SubstreamPartitionRouter"
|
3449
|
+
deduplicate:
|
3450
|
+
title: Deduplicate Partitions
|
3451
|
+
description: If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.
|
3452
|
+
type: boolean
|
3453
|
+
default: true
|
3454
|
+
$parameters:
|
3455
|
+
type: object
|
3456
|
+
additionalProperties: true
|
3419
3457
|
WaitUntilTimeFromHeader:
|
3420
3458
|
title: Wait Until Time Defined In Response Header
|
3421
3459
|
description: Extract time at which we can retry the request from response header and wait for the difference between now and that time.
|
@@ -107,16 +107,6 @@ class CsvParser(Parser):
|
|
107
107
|
encoding: Optional[str] = "utf-8"
|
108
108
|
delimiter: Optional[str] = ","
|
109
109
|
|
110
|
-
def _get_delimiter(self) -> Optional[str]:
|
111
|
-
"""
|
112
|
-
Get delimiter from the configuration. Check for the escape character and decode it.
|
113
|
-
"""
|
114
|
-
if self.delimiter is not None:
|
115
|
-
if self.delimiter.startswith("\\"):
|
116
|
-
self.delimiter = self.delimiter.encode("utf-8").decode("unicode_escape")
|
117
|
-
|
118
|
-
return self.delimiter
|
119
|
-
|
120
110
|
def parse(
|
121
111
|
self,
|
122
112
|
data: BufferedIOBase,
|
@@ -125,9 +115,8 @@ class CsvParser(Parser):
|
|
125
115
|
Parse CSV data from decompressed bytes.
|
126
116
|
"""
|
127
117
|
text_data = TextIOWrapper(data, encoding=self.encoding) # type: ignore
|
128
|
-
reader = csv.DictReader(text_data, delimiter=self.
|
129
|
-
|
130
|
-
yield row
|
118
|
+
reader = csv.DictReader(text_data, delimiter=self.delimiter or ",")
|
119
|
+
yield from reader
|
131
120
|
|
132
121
|
|
133
122
|
@dataclass
|
@@ -136,7 +136,6 @@ class ResponseToFileExtractor(RecordExtractor):
|
|
136
136
|
"""
|
137
137
|
|
138
138
|
try:
|
139
|
-
# TODO: Add support for other file types, like `json`, with `pd.read_json()`
|
140
139
|
with open(path, "r", encoding=file_encoding) as data:
|
141
140
|
chunks = pd.read_csv(
|
142
141
|
data, chunksize=chunk_size, iterator=True, dialect="unix", dtype=object
|
@@ -95,10 +95,6 @@ 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
|
-
|
102
98
|
self._finished_partitions: set[str] = set()
|
103
99
|
self._lock = threading.Lock()
|
104
100
|
self._timer = Timer()
|
@@ -159,62 +155,11 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
159
155
|
and self._semaphore_per_partition[partition_key]._value == 0
|
160
156
|
):
|
161
157
|
self._update_global_cursor(cursor.state[self.cursor_field.cursor_field_key])
|
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
|
158
|
+
self._emit_state_message()
|
214
159
|
|
215
160
|
def ensure_at_least_one_state_emitted(self) -> None:
|
216
161
|
"""
|
217
|
-
The platform
|
162
|
+
The platform expect to have at least one state message on successful syncs. Hence, whatever happens, we expect this method to be
|
218
163
|
called.
|
219
164
|
"""
|
220
165
|
if not any(
|
@@ -256,19 +201,13 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
256
201
|
|
257
202
|
slices = self._partition_router.stream_slices()
|
258
203
|
self._timer.start()
|
259
|
-
for partition
|
260
|
-
|
261
|
-
):
|
262
|
-
yield from self._generate_slices_from_partition(partition, parent_state)
|
204
|
+
for partition in slices:
|
205
|
+
yield from self._generate_slices_from_partition(partition)
|
263
206
|
|
264
|
-
def _generate_slices_from_partition(
|
265
|
-
self, partition: StreamSlice, parent_state: Mapping[str, Any]
|
266
|
-
) -> Iterable[StreamSlice]:
|
207
|
+
def _generate_slices_from_partition(self, partition: StreamSlice) -> Iterable[StreamSlice]:
|
267
208
|
# Ensure the maximum number of partitions is not exceeded
|
268
209
|
self._ensure_partition_limit()
|
269
210
|
|
270
|
-
partition_key = self._to_partition_key(partition.partition)
|
271
|
-
|
272
211
|
cursor = self._cursor_per_partition.get(self._to_partition_key(partition.partition))
|
273
212
|
if not cursor:
|
274
213
|
cursor = self._create_cursor(
|
@@ -277,26 +216,18 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
277
216
|
)
|
278
217
|
with self._lock:
|
279
218
|
self._number_of_partitions += 1
|
280
|
-
self._cursor_per_partition[
|
281
|
-
|
282
|
-
|
283
|
-
|
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)
|
219
|
+
self._cursor_per_partition[self._to_partition_key(partition.partition)] = cursor
|
220
|
+
self._semaphore_per_partition[self._to_partition_key(partition.partition)] = (
|
221
|
+
threading.Semaphore(0)
|
222
|
+
)
|
292
223
|
|
293
224
|
for cursor_slice, is_last_slice, _ in iterate_with_last_flag_and_state(
|
294
225
|
cursor.stream_slices(),
|
295
226
|
lambda: None,
|
296
227
|
):
|
297
|
-
self._semaphore_per_partition[
|
228
|
+
self._semaphore_per_partition[self._to_partition_key(partition.partition)].release()
|
298
229
|
if is_last_slice:
|
299
|
-
self._finished_partitions.add(
|
230
|
+
self._finished_partitions.add(self._to_partition_key(partition.partition))
|
300
231
|
yield StreamSlice(
|
301
232
|
partition=partition, cursor_slice=cursor_slice, extra_fields=partition.extra_fields
|
302
233
|
)
|
@@ -326,9 +257,9 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
326
257
|
while len(self._cursor_per_partition) > self.DEFAULT_MAX_PARTITIONS_NUMBER - 1:
|
327
258
|
# Try removing finished partitions first
|
328
259
|
for partition_key in list(self._cursor_per_partition.keys()):
|
329
|
-
if
|
330
|
-
partition_key
|
331
|
-
|
260
|
+
if (
|
261
|
+
partition_key in self._finished_partitions
|
262
|
+
and self._semaphore_per_partition[partition_key]._value == 0
|
332
263
|
):
|
333
264
|
oldest_partition = self._cursor_per_partition.pop(
|
334
265
|
partition_key
|
@@ -407,6 +338,9 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
407
338
|
self._cursor_per_partition[self._to_partition_key(state["partition"])] = (
|
408
339
|
self._create_cursor(state["cursor"])
|
409
340
|
)
|
341
|
+
self._semaphore_per_partition[self._to_partition_key(state["partition"])] = (
|
342
|
+
threading.Semaphore(0)
|
343
|
+
)
|
410
344
|
|
411
345
|
# set default state for missing partitions if it is per partition with fallback to global
|
412
346
|
if self._GLOBAL_STATE_KEY in stream_state:
|