airbyte-cdk 6.60.5__tar.gz → 6.60.7__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.60.5 → airbyte_cdk-6.60.7}/PKG-INFO +1 -1
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/connector_builder_handler.py +32 -36
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/main.py +3 -3
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/test_reader/helpers.py +24 -2
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +14 -21
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +29 -18
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +54 -3
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +24 -25
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/http_requester.py +7 -1
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +20 -4
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +2 -2
- airbyte_cdk-6.60.7/airbyte_cdk/sources/message/concurrent_repository.py +43 -0
- airbyte_cdk-6.60.7/airbyte_cdk/sources/streams/concurrent/partition_reader.py +84 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +7 -1
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/slice_logger.py +4 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/pyproject.toml +1 -1
- airbyte_cdk-6.60.5/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -45
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/LICENSE.txt +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/_connector.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/_image.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/_manifest.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/_secrets.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/_version.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/airbyte_cdk/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/source_declarative_manifest/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/manifest_migration.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migration_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migrations/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migrations/registry.yaml +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/manifest_migrations/migrations_registry.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/models/connector_metadata.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/composite_schema_loader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/config_transformations/add_fields.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/config_transformations/config_transformation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/config_transformations/remap_field.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/config_transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/validators/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/validators/dpath_validator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/validators/predicate_validator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/validators/validate_adheres_to_schema.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/validators/validation_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/validators/validator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/files_directory.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/models/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/models/outcome.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/models/scenario.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/_job_runner.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/connector_base.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/declarative_sources.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/docker_base.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/standard_tests/util.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/connector_paths.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/docker.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/utils/traced_exception.py +0 -0
{airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/connector_builder_handler.py
RENAMED
@@ -3,8 +3,8 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
|
6
|
-
from dataclasses import asdict
|
7
|
-
from typing import Any,
|
6
|
+
from dataclasses import asdict
|
7
|
+
from typing import Any, Dict, List, Mapping, Optional
|
8
8
|
|
9
9
|
from airbyte_cdk.connector_builder.test_reader import TestReader
|
10
10
|
from airbyte_cdk.models import (
|
@@ -15,45 +15,32 @@ from airbyte_cdk.models import (
|
|
15
15
|
Type,
|
16
16
|
)
|
17
17
|
from airbyte_cdk.models import Type as MessageType
|
18
|
+
from airbyte_cdk.sources.declarative.concurrent_declarative_source import (
|
19
|
+
ConcurrentDeclarativeSource,
|
20
|
+
TestLimits,
|
21
|
+
)
|
18
22
|
from airbyte_cdk.sources.declarative.declarative_source import DeclarativeSource
|
19
23
|
from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource
|
20
|
-
from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
|
21
|
-
ModelToComponentFactory,
|
22
|
-
)
|
23
24
|
from airbyte_cdk.utils.airbyte_secrets_utils import filter_secrets
|
24
25
|
from airbyte_cdk.utils.datetime_helpers import ab_datetime_now
|
25
26
|
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
26
27
|
|
27
|
-
DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE = 5
|
28
|
-
DEFAULT_MAXIMUM_NUMBER_OF_SLICES = 5
|
29
|
-
DEFAULT_MAXIMUM_RECORDS = 100
|
30
|
-
DEFAULT_MAXIMUM_STREAMS = 100
|
31
|
-
|
32
28
|
MAX_PAGES_PER_SLICE_KEY = "max_pages_per_slice"
|
33
29
|
MAX_SLICES_KEY = "max_slices"
|
34
30
|
MAX_RECORDS_KEY = "max_records"
|
35
31
|
MAX_STREAMS_KEY = "max_streams"
|
36
32
|
|
37
33
|
|
38
|
-
@dataclass
|
39
|
-
class TestLimits:
|
40
|
-
__test__: ClassVar[bool] = False # Tell Pytest this is not a Pytest class, despite its name
|
41
|
-
|
42
|
-
max_records: int = field(default=DEFAULT_MAXIMUM_RECORDS)
|
43
|
-
max_pages_per_slice: int = field(default=DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE)
|
44
|
-
max_slices: int = field(default=DEFAULT_MAXIMUM_NUMBER_OF_SLICES)
|
45
|
-
max_streams: int = field(default=DEFAULT_MAXIMUM_STREAMS)
|
46
|
-
|
47
|
-
|
48
34
|
def get_limits(config: Mapping[str, Any]) -> TestLimits:
|
49
35
|
command_config = config.get("__test_read_config", {})
|
50
|
-
|
51
|
-
command_config.get(
|
36
|
+
return TestLimits(
|
37
|
+
max_records=command_config.get(MAX_RECORDS_KEY, TestLimits.DEFAULT_MAX_RECORDS),
|
38
|
+
max_pages_per_slice=command_config.get(
|
39
|
+
MAX_PAGES_PER_SLICE_KEY, TestLimits.DEFAULT_MAX_PAGES_PER_SLICE
|
40
|
+
),
|
41
|
+
max_slices=command_config.get(MAX_SLICES_KEY, TestLimits.DEFAULT_MAX_SLICES),
|
42
|
+
max_streams=command_config.get(MAX_STREAMS_KEY, TestLimits.DEFAULT_MAX_STREAMS),
|
52
43
|
)
|
53
|
-
max_slices = command_config.get(MAX_SLICES_KEY) or DEFAULT_MAXIMUM_NUMBER_OF_SLICES
|
54
|
-
max_records = command_config.get(MAX_RECORDS_KEY) or DEFAULT_MAXIMUM_RECORDS
|
55
|
-
max_streams = command_config.get(MAX_STREAMS_KEY) or DEFAULT_MAXIMUM_STREAMS
|
56
|
-
return TestLimits(max_records, max_pages_per_slice, max_slices, max_streams)
|
57
44
|
|
58
45
|
|
59
46
|
def should_migrate_manifest(config: Mapping[str, Any]) -> bool:
|
@@ -75,21 +62,30 @@ def should_normalize_manifest(config: Mapping[str, Any]) -> bool:
|
|
75
62
|
return config.get("__should_normalize", False)
|
76
63
|
|
77
64
|
|
78
|
-
def create_source(
|
65
|
+
def create_source(
|
66
|
+
config: Mapping[str, Any],
|
67
|
+
limits: TestLimits,
|
68
|
+
catalog: Optional[ConfiguredAirbyteCatalog],
|
69
|
+
state: Optional[List[AirbyteStateMessage]],
|
70
|
+
) -> ConcurrentDeclarativeSource[Optional[List[AirbyteStateMessage]]]:
|
79
71
|
manifest = config["__injected_declarative_manifest"]
|
80
|
-
|
72
|
+
|
73
|
+
# We enforce a concurrency level of 1 so that the stream is processed on a single thread
|
74
|
+
# to retain ordering for the grouping of the builder message responses.
|
75
|
+
if "concurrency_level" in manifest:
|
76
|
+
manifest["concurrency_level"]["default_concurrency"] = 1
|
77
|
+
else:
|
78
|
+
manifest["concurrency_level"] = {"type": "ConcurrencyLevel", "default_concurrency": 1}
|
79
|
+
|
80
|
+
return ConcurrentDeclarativeSource(
|
81
|
+
catalog=catalog,
|
81
82
|
config=config,
|
82
|
-
|
83
|
+
state=state,
|
83
84
|
source_config=manifest,
|
85
|
+
emit_connector_builder_messages=True,
|
84
86
|
migrate_manifest=should_migrate_manifest(config),
|
85
87
|
normalize_manifest=should_normalize_manifest(config),
|
86
|
-
|
87
|
-
emit_connector_builder_messages=True,
|
88
|
-
limit_pages_fetched_per_slice=limits.max_pages_per_slice,
|
89
|
-
limit_slices_fetched=limits.max_slices,
|
90
|
-
disable_retries=True,
|
91
|
-
disable_cache=True,
|
92
|
-
),
|
88
|
+
limits=limits,
|
93
89
|
)
|
94
90
|
|
95
91
|
|
@@ -91,12 +91,12 @@ def handle_connector_builder_request(
|
|
91
91
|
def handle_request(args: List[str]) -> str:
|
92
92
|
command, config, catalog, state = get_config_and_catalog_from_args(args)
|
93
93
|
limits = get_limits(config)
|
94
|
-
source = create_source(config, limits)
|
95
|
-
return orjson.dumps(
|
94
|
+
source = create_source(config=config, limits=limits, catalog=catalog, state=state)
|
95
|
+
return orjson.dumps( # type: ignore[no-any-return] # Serializer.dump() always returns AirbyteMessage
|
96
96
|
AirbyteMessageSerializer.dump(
|
97
97
|
handle_connector_builder_request(source, command, config, catalog, state, limits)
|
98
98
|
)
|
99
|
-
).decode()
|
99
|
+
).decode()
|
100
100
|
|
101
101
|
|
102
102
|
if __name__ == "__main__":
|
{airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/connector_builder/test_reader/helpers.py
RENAMED
@@ -5,7 +5,7 @@
|
|
5
5
|
import json
|
6
6
|
from copy import deepcopy
|
7
7
|
from json import JSONDecodeError
|
8
|
-
from typing import Any, Dict, List, Mapping, Optional
|
8
|
+
from typing import Any, Dict, List, Mapping, Optional, Union
|
9
9
|
|
10
10
|
from airbyte_cdk.connector_builder.models import (
|
11
11
|
AuxiliaryRequest,
|
@@ -17,6 +17,8 @@ from airbyte_cdk.connector_builder.models import (
|
|
17
17
|
from airbyte_cdk.models import (
|
18
18
|
AirbyteLogMessage,
|
19
19
|
AirbyteMessage,
|
20
|
+
AirbyteStateBlob,
|
21
|
+
AirbyteStateMessage,
|
20
22
|
OrchestratorType,
|
21
23
|
TraceType,
|
22
24
|
)
|
@@ -466,7 +468,7 @@ def handle_current_slice(
|
|
466
468
|
return StreamReadSlices(
|
467
469
|
pages=current_slice_pages,
|
468
470
|
slice_descriptor=current_slice_descriptor,
|
469
|
-
state=[latest_state_message] if latest_state_message else [],
|
471
|
+
state=[convert_state_blob_to_mapping(latest_state_message)] if latest_state_message else [],
|
470
472
|
auxiliary_requests=auxiliary_requests if auxiliary_requests else [],
|
471
473
|
)
|
472
474
|
|
@@ -718,3 +720,23 @@ def get_auxiliary_request_type(stream: dict, http: dict) -> str: # type: ignore
|
|
718
720
|
Determines the type of the auxiliary request based on the stream and HTTP properties.
|
719
721
|
"""
|
720
722
|
return "PARENT_STREAM" if stream.get("is_substream", False) else str(http.get("type", None))
|
723
|
+
|
724
|
+
|
725
|
+
def convert_state_blob_to_mapping(
|
726
|
+
state_message: Union[AirbyteStateMessage, Dict[str, Any]],
|
727
|
+
) -> Dict[str, Any]:
|
728
|
+
"""
|
729
|
+
The AirbyteStreamState stores state as an AirbyteStateBlob which deceivingly is not
|
730
|
+
a dictionary, but rather a list of kwargs fields. This in turn causes it to not be
|
731
|
+
properly turned into a dictionary when translating this back into response output
|
732
|
+
by the connector_builder_handler using asdict()
|
733
|
+
"""
|
734
|
+
|
735
|
+
if isinstance(state_message, AirbyteStateMessage) and state_message.stream:
|
736
|
+
state_value = state_message.stream.stream_state
|
737
|
+
if isinstance(state_value, AirbyteStateBlob):
|
738
|
+
state_value_mapping = {k: v for k, v in state_value.__dict__.items()}
|
739
|
+
state_message.stream.stream_state = state_value_mapping # type: ignore # we intentionally set this as a Dict so that StreamReadSlices is translated properly in the resulting HTTP response
|
740
|
+
return state_message # type: ignore # See above, but when this is an AirbyteStateMessage we must convert AirbyteStateBlob to a Dict
|
741
|
+
else:
|
742
|
+
return state_message # type: ignore # This is guaranteed to be a Dict since we check isinstance AirbyteStateMessage above
|
@@ -95,11 +95,14 @@ class ConcurrentReadProcessor:
|
|
95
95
|
"""
|
96
96
|
stream_name = partition.stream_name()
|
97
97
|
self._streams_to_running_partitions[stream_name].add(partition)
|
98
|
+
cursor = self._stream_name_to_instance[stream_name].cursor
|
98
99
|
if self._slice_logger.should_log_slice_message(self._logger):
|
99
100
|
self._message_repository.emit_message(
|
100
101
|
self._slice_logger.create_slice_log_message(partition.to_slice())
|
101
102
|
)
|
102
|
-
self._thread_pool_manager.submit(
|
103
|
+
self._thread_pool_manager.submit(
|
104
|
+
self._partition_reader.process_partition, partition, cursor
|
105
|
+
)
|
103
106
|
|
104
107
|
def on_partition_complete_sentinel(
|
105
108
|
self, sentinel: PartitionCompleteSentinel
|
@@ -112,26 +115,16 @@ class ConcurrentReadProcessor:
|
|
112
115
|
"""
|
113
116
|
partition = sentinel.partition
|
114
117
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
partitions_running = self._streams_to_running_partitions[partition.stream_name()]
|
126
|
-
if partition in partitions_running:
|
127
|
-
partitions_running.remove(partition)
|
128
|
-
# If all partitions were generated and this was the last one, the stream is done
|
129
|
-
if (
|
130
|
-
partition.stream_name() not in self._streams_currently_generating_partitions
|
131
|
-
and len(partitions_running) == 0
|
132
|
-
):
|
133
|
-
yield from self._on_stream_is_done(partition.stream_name())
|
134
|
-
yield from self._message_repository.consume_queue()
|
118
|
+
partitions_running = self._streams_to_running_partitions[partition.stream_name()]
|
119
|
+
if partition in partitions_running:
|
120
|
+
partitions_running.remove(partition)
|
121
|
+
# If all partitions were generated and this was the last one, the stream is done
|
122
|
+
if (
|
123
|
+
partition.stream_name() not in self._streams_currently_generating_partitions
|
124
|
+
and len(partitions_running) == 0
|
125
|
+
):
|
126
|
+
yield from self._on_stream_is_done(partition.stream_name())
|
127
|
+
yield from self._message_repository.consume_queue()
|
135
128
|
|
136
129
|
def on_record(self, record: Record) -> Iterable[AirbyteMessage]:
|
137
130
|
"""
|
{airbyte_cdk-6.60.5 → airbyte_cdk-6.60.7}/airbyte_cdk/sources/concurrent_source/concurrent_source.py
RENAMED
@@ -4,7 +4,7 @@
|
|
4
4
|
import concurrent
|
5
5
|
import logging
|
6
6
|
from queue import Queue
|
7
|
-
from typing import Iterable, Iterator, List
|
7
|
+
from typing import Iterable, Iterator, List, Optional
|
8
8
|
|
9
9
|
from airbyte_cdk.models import AirbyteMessage
|
10
10
|
from airbyte_cdk.sources.concurrent_source.concurrent_read_processor import ConcurrentReadProcessor
|
@@ -16,7 +16,7 @@ from airbyte_cdk.sources.concurrent_source.thread_pool_manager import ThreadPool
|
|
16
16
|
from airbyte_cdk.sources.message import InMemoryMessageRepository, MessageRepository
|
17
17
|
from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream
|
18
18
|
from airbyte_cdk.sources.streams.concurrent.partition_enqueuer import PartitionEnqueuer
|
19
|
-
from airbyte_cdk.sources.streams.concurrent.partition_reader import PartitionReader
|
19
|
+
from airbyte_cdk.sources.streams.concurrent.partition_reader import PartitionLogger, PartitionReader
|
20
20
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
|
21
21
|
from airbyte_cdk.sources.streams.concurrent.partitions.types import (
|
22
22
|
PartitionCompleteSentinel,
|
@@ -43,6 +43,7 @@ class ConcurrentSource:
|
|
43
43
|
logger: logging.Logger,
|
44
44
|
slice_logger: SliceLogger,
|
45
45
|
message_repository: MessageRepository,
|
46
|
+
queue: Optional[Queue[QueueItem]] = None,
|
46
47
|
timeout_seconds: int = DEFAULT_TIMEOUT_SECONDS,
|
47
48
|
) -> "ConcurrentSource":
|
48
49
|
is_single_threaded = initial_number_of_partitions_to_generate == 1 and num_workers == 1
|
@@ -59,12 +60,13 @@ class ConcurrentSource:
|
|
59
60
|
logger,
|
60
61
|
)
|
61
62
|
return ConcurrentSource(
|
62
|
-
threadpool,
|
63
|
-
logger,
|
64
|
-
slice_logger,
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
threadpool=threadpool,
|
64
|
+
logger=logger,
|
65
|
+
slice_logger=slice_logger,
|
66
|
+
queue=queue,
|
67
|
+
message_repository=message_repository,
|
68
|
+
initial_number_partitions_to_generate=initial_number_of_partitions_to_generate,
|
69
|
+
timeout_seconds=timeout_seconds,
|
68
70
|
)
|
69
71
|
|
70
72
|
def __init__(
|
@@ -72,6 +74,7 @@ class ConcurrentSource:
|
|
72
74
|
threadpool: ThreadPoolManager,
|
73
75
|
logger: logging.Logger,
|
74
76
|
slice_logger: SliceLogger = DebugSliceLogger(),
|
77
|
+
queue: Optional[Queue[QueueItem]] = None,
|
75
78
|
message_repository: MessageRepository = InMemoryMessageRepository(),
|
76
79
|
initial_number_partitions_to_generate: int = 1,
|
77
80
|
timeout_seconds: int = DEFAULT_TIMEOUT_SECONDS,
|
@@ -91,25 +94,28 @@ class ConcurrentSource:
|
|
91
94
|
self._initial_number_partitions_to_generate = initial_number_partitions_to_generate
|
92
95
|
self._timeout_seconds = timeout_seconds
|
93
96
|
|
97
|
+
# We set a maxsize to for the main thread to process record items when the queue size grows. This assumes that there are less
|
98
|
+
# threads generating partitions that than are max number of workers. If it weren't the case, we could have threads only generating
|
99
|
+
# partitions which would fill the queue. This number is arbitrarily set to 10_000 but will probably need to be changed given more
|
100
|
+
# information and might even need to be configurable depending on the source
|
101
|
+
self._queue = queue or Queue(maxsize=10_000)
|
102
|
+
|
94
103
|
def read(
|
95
104
|
self,
|
96
105
|
streams: List[AbstractStream],
|
97
106
|
) -> Iterator[AirbyteMessage]:
|
98
107
|
self._logger.info("Starting syncing")
|
99
|
-
|
100
|
-
# We set a maxsize to for the main thread to process record items when the queue size grows. This assumes that there are less
|
101
|
-
# threads generating partitions that than are max number of workers. If it weren't the case, we could have threads only generating
|
102
|
-
# partitions which would fill the queue. This number is arbitrarily set to 10_000 but will probably need to be changed given more
|
103
|
-
# information and might even need to be configurable depending on the source
|
104
|
-
queue: Queue[QueueItem] = Queue(maxsize=10_000)
|
105
108
|
concurrent_stream_processor = ConcurrentReadProcessor(
|
106
109
|
streams,
|
107
|
-
PartitionEnqueuer(
|
110
|
+
PartitionEnqueuer(self._queue, self._threadpool),
|
108
111
|
self._threadpool,
|
109
112
|
self._logger,
|
110
113
|
self._slice_logger,
|
111
114
|
self._message_repository,
|
112
|
-
PartitionReader(
|
115
|
+
PartitionReader(
|
116
|
+
self._queue,
|
117
|
+
PartitionLogger(self._slice_logger, self._logger, self._message_repository),
|
118
|
+
),
|
113
119
|
)
|
114
120
|
|
115
121
|
# Enqueue initial partition generation tasks
|
@@ -117,7 +123,7 @@ class ConcurrentSource:
|
|
117
123
|
|
118
124
|
# Read from the queue until all partitions were generated and read
|
119
125
|
yield from self._consume_from_queue(
|
120
|
-
|
126
|
+
self._queue,
|
121
127
|
concurrent_stream_processor,
|
122
128
|
)
|
123
129
|
self._threadpool.check_for_errors_and_shutdown()
|
@@ -141,7 +147,10 @@ class ConcurrentSource:
|
|
141
147
|
airbyte_message_or_record_or_exception,
|
142
148
|
concurrent_stream_processor,
|
143
149
|
)
|
144
|
-
|
150
|
+
# In the event that a partition raises an exception, anything remaining in
|
151
|
+
# the queue will be missed because is_done() can raise an exception and exit
|
152
|
+
# out of this loop before remaining items are consumed
|
153
|
+
if queue.empty() and concurrent_stream_processor.is_done():
|
145
154
|
# all partitions were generated and processed. we're done here
|
146
155
|
break
|
147
156
|
|
@@ -161,5 +170,7 @@ class ConcurrentSource:
|
|
161
170
|
yield from concurrent_stream_processor.on_partition_complete_sentinel(queue_item)
|
162
171
|
elif isinstance(queue_item, Record):
|
163
172
|
yield from concurrent_stream_processor.on_record(queue_item)
|
173
|
+
elif isinstance(queue_item, AirbyteMessage):
|
174
|
+
yield queue_item
|
164
175
|
else:
|
165
176
|
raise ValueError(f"Unknown queue item type: {type(queue_item)}")
|
@@ -3,7 +3,11 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
import logging
|
6
|
-
from
|
6
|
+
from dataclasses import dataclass, field
|
7
|
+
from queue import Queue
|
8
|
+
from typing import Any, ClassVar, Generic, Iterator, List, Mapping, MutableMapping, Optional, Tuple
|
9
|
+
|
10
|
+
from airbyte_protocol_dataclasses.models import Level
|
7
11
|
|
8
12
|
from airbyte_cdk.models import (
|
9
13
|
AirbyteCatalog,
|
@@ -48,6 +52,8 @@ from airbyte_cdk.sources.declarative.stream_slicers.declarative_partition_genera
|
|
48
52
|
StreamSlicerPartitionGenerator,
|
49
53
|
)
|
50
54
|
from airbyte_cdk.sources.declarative.types import ConnectionDefinition
|
55
|
+
from airbyte_cdk.sources.message.concurrent_repository import ConcurrentMessageRepository
|
56
|
+
from airbyte_cdk.sources.message.repository import InMemoryMessageRepository, MessageRepository
|
51
57
|
from airbyte_cdk.sources.source import TState
|
52
58
|
from airbyte_cdk.sources.streams import Stream
|
53
59
|
from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream
|
@@ -58,6 +64,22 @@ from airbyte_cdk.sources.streams.concurrent.availability_strategy import (
|
|
58
64
|
from airbyte_cdk.sources.streams.concurrent.cursor import ConcurrentCursor, FinalStateCursor
|
59
65
|
from airbyte_cdk.sources.streams.concurrent.default_stream import DefaultStream
|
60
66
|
from airbyte_cdk.sources.streams.concurrent.helpers import get_primary_key_from_stream
|
67
|
+
from airbyte_cdk.sources.streams.concurrent.partitions.types import QueueItem
|
68
|
+
|
69
|
+
|
70
|
+
@dataclass
|
71
|
+
class TestLimits:
|
72
|
+
__test__: ClassVar[bool] = False # Tell Pytest this is not a Pytest class, despite its name
|
73
|
+
|
74
|
+
DEFAULT_MAX_PAGES_PER_SLICE: ClassVar[int] = 5
|
75
|
+
DEFAULT_MAX_SLICES: ClassVar[int] = 5
|
76
|
+
DEFAULT_MAX_RECORDS: ClassVar[int] = 100
|
77
|
+
DEFAULT_MAX_STREAMS: ClassVar[int] = 100
|
78
|
+
|
79
|
+
max_records: int = field(default=DEFAULT_MAX_RECORDS)
|
80
|
+
max_pages_per_slice: int = field(default=DEFAULT_MAX_PAGES_PER_SLICE)
|
81
|
+
max_slices: int = field(default=DEFAULT_MAX_SLICES)
|
82
|
+
max_streams: int = field(default=DEFAULT_MAX_STREAMS)
|
61
83
|
|
62
84
|
|
63
85
|
class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
@@ -73,7 +95,9 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
73
95
|
source_config: ConnectionDefinition,
|
74
96
|
debug: bool = False,
|
75
97
|
emit_connector_builder_messages: bool = False,
|
76
|
-
|
98
|
+
migrate_manifest: bool = False,
|
99
|
+
normalize_manifest: bool = False,
|
100
|
+
limits: Optional[TestLimits] = None,
|
77
101
|
config_path: Optional[str] = None,
|
78
102
|
**kwargs: Any,
|
79
103
|
) -> None:
|
@@ -81,22 +105,40 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
81
105
|
# no longer needs to store the original incoming state. But maybe there's an edge case?
|
82
106
|
self._connector_state_manager = ConnectorStateManager(state=state) # type: ignore # state is always in the form of List[AirbyteStateMessage]. The ConnectorStateManager should use generics, but this can be done later
|
83
107
|
|
108
|
+
# We set a maxsize to for the main thread to process record items when the queue size grows. This assumes that there are less
|
109
|
+
# threads generating partitions that than are max number of workers. If it weren't the case, we could have threads only generating
|
110
|
+
# partitions which would fill the queue. This number is arbitrarily set to 10_000 but will probably need to be changed given more
|
111
|
+
# information and might even need to be configurable depending on the source
|
112
|
+
queue: Queue[QueueItem] = Queue(maxsize=10_000)
|
113
|
+
message_repository = InMemoryMessageRepository(
|
114
|
+
Level.DEBUG if emit_connector_builder_messages else Level.INFO
|
115
|
+
)
|
116
|
+
|
84
117
|
# To reduce the complexity of the concurrent framework, we are not enabling RFR with synthetic
|
85
118
|
# cursors. We do this by no longer automatically instantiating RFR cursors when converting
|
86
119
|
# the declarative models into runtime components. Concurrent sources will continue to checkpoint
|
87
120
|
# incremental streams running in full refresh.
|
88
|
-
component_factory =
|
121
|
+
component_factory = ModelToComponentFactory(
|
89
122
|
emit_connector_builder_messages=emit_connector_builder_messages,
|
90
123
|
disable_resumable_full_refresh=True,
|
124
|
+
message_repository=ConcurrentMessageRepository(queue, message_repository),
|
91
125
|
connector_state_manager=self._connector_state_manager,
|
92
126
|
max_concurrent_async_job_count=source_config.get("max_concurrent_async_job_count"),
|
127
|
+
limit_pages_fetched_per_slice=limits.max_pages_per_slice if limits else None,
|
128
|
+
limit_slices_fetched=limits.max_slices if limits else None,
|
129
|
+
disable_retries=True if limits else False,
|
130
|
+
disable_cache=True if limits else False,
|
93
131
|
)
|
94
132
|
|
133
|
+
self._limits = limits
|
134
|
+
|
95
135
|
super().__init__(
|
96
136
|
source_config=source_config,
|
97
137
|
config=config,
|
98
138
|
debug=debug,
|
99
139
|
emit_connector_builder_messages=emit_connector_builder_messages,
|
140
|
+
migrate_manifest=migrate_manifest,
|
141
|
+
normalize_manifest=normalize_manifest,
|
100
142
|
component_factory=component_factory,
|
101
143
|
config_path=config_path,
|
102
144
|
)
|
@@ -126,6 +168,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
126
168
|
initial_number_of_partitions_to_generate=initial_number_of_partitions_to_generate,
|
127
169
|
logger=self.logger,
|
128
170
|
slice_logger=self._slice_logger,
|
171
|
+
queue=queue,
|
129
172
|
message_repository=self.message_repository,
|
130
173
|
)
|
131
174
|
|
@@ -287,6 +330,9 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
287
330
|
self.message_repository,
|
288
331
|
),
|
289
332
|
stream_slicer=declarative_stream.retriever.stream_slicer,
|
333
|
+
slice_limit=self._limits.max_slices
|
334
|
+
if self._limits
|
335
|
+
else None, # technically not needed because create_declarative_stream() -> create_simple_retriever() will apply the decorator. But for consistency and depending how we build create_default_stream, this may be needed later
|
290
336
|
)
|
291
337
|
else:
|
292
338
|
if (
|
@@ -318,6 +364,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
318
364
|
self.message_repository,
|
319
365
|
),
|
320
366
|
stream_slicer=cursor,
|
367
|
+
slice_limit=self._limits.max_slices if self._limits else None,
|
321
368
|
)
|
322
369
|
|
323
370
|
concurrent_streams.append(
|
@@ -349,6 +396,9 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
349
396
|
self.message_repository,
|
350
397
|
),
|
351
398
|
declarative_stream.retriever.stream_slicer,
|
399
|
+
slice_limit=self._limits.max_slices
|
400
|
+
if self._limits
|
401
|
+
else None, # technically not needed because create_declarative_stream() -> create_simple_retriever() will apply the decorator. But for consistency and depending how we build create_default_stream, this may be needed later
|
352
402
|
)
|
353
403
|
|
354
404
|
final_state_cursor = FinalStateCursor(
|
@@ -410,6 +460,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
410
460
|
self.message_repository,
|
411
461
|
),
|
412
462
|
perpartition_cursor,
|
463
|
+
slice_limit=self._limits.max_slices if self._limits else None,
|
413
464
|
)
|
414
465
|
|
415
466
|
concurrent_streams.append(
|
@@ -622,6 +622,10 @@ SCHEMA_TRANSFORMER_TYPE_MAPPING = {
|
|
622
622
|
SchemaNormalizationModel.Default: TransformConfig.DefaultSchemaNormalization,
|
623
623
|
}
|
624
624
|
|
625
|
+
# Ideally this should use the value defined in ConcurrentDeclarativeSource, but
|
626
|
+
# this would be a circular import
|
627
|
+
MAX_SLICES = 5
|
628
|
+
|
625
629
|
|
626
630
|
class ModelToComponentFactory:
|
627
631
|
EPOCH_DATETIME_FORMAT = "%s"
|
@@ -2112,6 +2116,15 @@ class ModelToComponentFactory:
|
|
2112
2116
|
stream_slicer: Optional[PartitionRouter],
|
2113
2117
|
config: Config,
|
2114
2118
|
) -> Optional[StreamSlicer]:
|
2119
|
+
state_transformations = (
|
2120
|
+
[
|
2121
|
+
self._create_component_from_model(state_migration, config, declarative_stream=model)
|
2122
|
+
for state_migration in model.state_migrations
|
2123
|
+
]
|
2124
|
+
if model.state_migrations
|
2125
|
+
else []
|
2126
|
+
)
|
2127
|
+
|
2115
2128
|
if model.incremental_sync and stream_slicer:
|
2116
2129
|
if model.retriever.type == "AsyncRetriever":
|
2117
2130
|
stream_name = model.name or ""
|
@@ -2119,16 +2132,6 @@ class ModelToComponentFactory:
|
|
2119
2132
|
stream_state = self._connector_state_manager.get_stream_state(
|
2120
2133
|
stream_name, stream_namespace
|
2121
2134
|
)
|
2122
|
-
state_transformations = (
|
2123
|
-
[
|
2124
|
-
self._create_component_from_model(
|
2125
|
-
state_migration, config, declarative_stream=model
|
2126
|
-
)
|
2127
|
-
for state_migration in model.state_migrations
|
2128
|
-
]
|
2129
|
-
if model.state_migrations
|
2130
|
-
else []
|
2131
|
-
)
|
2132
2135
|
|
2133
2136
|
return self.create_concurrent_cursor_from_perpartition_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
|
2134
2137
|
state_manager=self._connector_state_manager,
|
@@ -2172,7 +2175,7 @@ class ModelToComponentFactory:
|
|
2172
2175
|
stream_name=model.name or "",
|
2173
2176
|
stream_namespace=None,
|
2174
2177
|
config=config or {},
|
2175
|
-
stream_state_migrations=
|
2178
|
+
stream_state_migrations=state_transformations,
|
2176
2179
|
)
|
2177
2180
|
return self._create_component_from_model(model=model.incremental_sync, config=config) # type: ignore[no-any-return] # Will be created Cursor as stream_slicer_model is model.incremental_sync
|
2178
2181
|
return None
|
@@ -2187,19 +2190,15 @@ class ModelToComponentFactory:
|
|
2187
2190
|
stream_name=model.name or "", namespace=None
|
2188
2191
|
)
|
2189
2192
|
|
2190
|
-
if model.
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2194
|
-
|
2195
|
-
|
2196
|
-
|
2197
|
-
)
|
2198
|
-
for state_migration in model.state_migrations
|
2199
|
-
]
|
2200
|
-
else:
|
2201
|
-
state_transformations = []
|
2193
|
+
if model.state_migrations:
|
2194
|
+
state_transformations = [
|
2195
|
+
self._create_component_from_model(state_migration, config, declarative_stream=model)
|
2196
|
+
for state_migration in model.state_migrations
|
2197
|
+
]
|
2198
|
+
else:
|
2199
|
+
state_transformations = []
|
2202
2200
|
|
2201
|
+
if model.incremental_sync and stream_slicer:
|
2203
2202
|
return self.create_concurrent_cursor_from_perpartition_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
|
2204
2203
|
state_manager=self._connector_state_manager,
|
2205
2204
|
model_type=DatetimeBasedCursorModel,
|
@@ -2220,7 +2219,7 @@ class ModelToComponentFactory:
|
|
2220
2219
|
stream_name=model.name or "",
|
2221
2220
|
stream_namespace=None,
|
2222
2221
|
config=config or {},
|
2223
|
-
stream_state_migrations=
|
2222
|
+
stream_state_migrations=state_transformations,
|
2224
2223
|
)
|
2225
2224
|
elif type(model.incremental_sync) == DatetimeBasedCursorModel:
|
2226
2225
|
return self.create_concurrent_cursor_from_datetime_based_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
|
@@ -2229,7 +2228,7 @@ class ModelToComponentFactory:
|
|
2229
2228
|
stream_name=model.name or "",
|
2230
2229
|
stream_namespace=None,
|
2231
2230
|
config=config or {},
|
2232
|
-
stream_state_migrations=
|
2231
|
+
stream_state_migrations=state_transformations,
|
2233
2232
|
attempt_to_create_cursor_if_not_provided=True,
|
2234
2233
|
)
|
2235
2234
|
else:
|
@@ -168,7 +168,13 @@ class HttpRequester(Requester):
|
|
168
168
|
next_page_token=next_page_token,
|
169
169
|
)
|
170
170
|
|
171
|
-
full_url =
|
171
|
+
full_url = (
|
172
|
+
self._join_url(url_base, path)
|
173
|
+
if url_base
|
174
|
+
else self._join_url(url, path)
|
175
|
+
if path
|
176
|
+
else url
|
177
|
+
)
|
172
178
|
|
173
179
|
return full_url
|
174
180
|
|
@@ -1,8 +1,11 @@
|
|
1
|
-
# Copyright (c)
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
2
|
|
3
|
-
from typing import Any, Iterable, Mapping, Optional
|
3
|
+
from typing import Any, Iterable, Mapping, Optional, cast
|
4
4
|
|
5
5
|
from airbyte_cdk.sources.declarative.retrievers import Retriever
|
6
|
+
from airbyte_cdk.sources.declarative.stream_slicers.stream_slicer_test_read_decorator import (
|
7
|
+
StreamSlicerTestReadDecorator,
|
8
|
+
)
|
6
9
|
from airbyte_cdk.sources.message import MessageRepository
|
7
10
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
|
8
11
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator
|
@@ -83,10 +86,23 @@ class DeclarativePartition(Partition):
|
|
83
86
|
|
84
87
|
class StreamSlicerPartitionGenerator(PartitionGenerator):
|
85
88
|
def __init__(
|
86
|
-
self,
|
89
|
+
self,
|
90
|
+
partition_factory: DeclarativePartitionFactory,
|
91
|
+
stream_slicer: StreamSlicer,
|
92
|
+
slice_limit: Optional[int] = None,
|
87
93
|
) -> None:
|
88
94
|
self._partition_factory = partition_factory
|
89
|
-
|
95
|
+
|
96
|
+
if slice_limit:
|
97
|
+
self._stream_slicer = cast(
|
98
|
+
StreamSlicer,
|
99
|
+
StreamSlicerTestReadDecorator(
|
100
|
+
wrapped_slicer=stream_slicer,
|
101
|
+
maximum_number_of_slices=slice_limit,
|
102
|
+
),
|
103
|
+
)
|
104
|
+
else:
|
105
|
+
self._stream_slicer = stream_slicer
|
90
106
|
|
91
107
|
def generate(self) -> Iterable[Partition]:
|
92
108
|
for stream_slice in self._stream_slicer.stream_slices():
|
@@ -4,10 +4,10 @@
|
|
4
4
|
|
5
5
|
from dataclasses import dataclass
|
6
6
|
from itertools import islice
|
7
|
-
from typing import Any, Iterable
|
7
|
+
from typing import Any, Iterable
|
8
8
|
|
9
9
|
from airbyte_cdk.sources.streams.concurrent.partitions.stream_slicer import StreamSlicer
|
10
|
-
from airbyte_cdk.sources.types import StreamSlice
|
10
|
+
from airbyte_cdk.sources.types import StreamSlice
|
11
11
|
|
12
12
|
|
13
13
|
@dataclass
|