airbyte-cdk 6.37.0.dev0__tar.gz → 6.37.1__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.37.0.dev0 → airbyte_cdk-6.37.1}/PKG-INFO +2 -2
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/entrypoint.py +7 -7
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +28 -7
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +7 -1
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +62 -3
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +1 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +2 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +27 -3
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +18 -4
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +119 -7
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/README.md +5 -5
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +60 -17
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +7 -1
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +10 -3
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +2 -2
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +2 -1
- airbyte_cdk-6.37.1/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +92 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/pyproject.toml +2 -2
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/LICENSE.txt +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/README.md +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: airbyte-cdk
|
3
|
-
Version: 6.37.
|
3
|
+
Version: 6.37.1
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -22,8 +22,8 @@ Provides-Extra: sql
|
|
22
22
|
Provides-Extra: vector-db-based
|
23
23
|
Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
|
24
24
|
Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
|
25
|
-
Requires-Dist: Unidecode (>=1.3,<2.0)
|
26
25
|
Requires-Dist: airbyte-protocol-models-dataclasses (>=0.14,<0.15)
|
26
|
+
Requires-Dist: anyascii (>=0.3.2,<0.4.0)
|
27
27
|
Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
|
28
28
|
Requires-Dist: backoff
|
29
29
|
Requires-Dist: cachetools
|
@@ -37,8 +37,8 @@ from airbyte_cdk.sources import Source
|
|
37
37
|
from airbyte_cdk.sources.connector_state_manager import HashableStreamDescriptor
|
38
38
|
from airbyte_cdk.sources.utils.schema_helpers import check_config_against_spec_or_exit, split_config
|
39
39
|
|
40
|
-
from airbyte_cdk.utils import PrintBuffer, is_cloud_environment, message_utils # add PrintBuffer back once fixed
|
41
|
-
|
40
|
+
# from airbyte_cdk.utils import PrintBuffer, is_cloud_environment, message_utils # add PrintBuffer back once fixed
|
41
|
+
from airbyte_cdk.utils import is_cloud_environment, message_utils
|
42
42
|
from airbyte_cdk.utils.airbyte_secrets_utils import get_secrets, update_secrets
|
43
43
|
from airbyte_cdk.utils.constants import ENV_REQUEST_CACHE_PATH
|
44
44
|
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
@@ -337,11 +337,11 @@ def launch(source: Source, args: List[str]) -> None:
|
|
337
337
|
parsed_args = source_entrypoint.parse_args(args)
|
338
338
|
# temporarily removes the PrintBuffer because we're seeing weird print behavior for concurrent syncs
|
339
339
|
# Refer to: https://github.com/airbytehq/oncall/issues/6235
|
340
|
-
with PrintBuffer():
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
340
|
+
# with PrintBuffer():
|
341
|
+
for message in source_entrypoint.run(parsed_args):
|
342
|
+
# simply printing is creating issues for concurrent CDK as Python uses different two instructions to print: one for the message and
|
343
|
+
# the other for the break line. Adding `\n` to the message ensure that both are printed at the same time
|
344
|
+
print(f"{message}\n", end="", flush=True)
|
345
345
|
|
346
346
|
|
347
347
|
def _init_internal_request_filter() -> None:
|
@@ -31,6 +31,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
31
31
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
32
32
|
DatetimeBasedCursor as DatetimeBasedCursorModel,
|
33
33
|
)
|
34
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
35
|
+
IncrementingCountCursor as IncrementingCountCursorModel,
|
36
|
+
)
|
34
37
|
from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
|
35
38
|
ModelToComponentFactory,
|
36
39
|
)
|
@@ -222,7 +225,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
222
225
|
and not incremental_sync_component_definition
|
223
226
|
)
|
224
227
|
|
225
|
-
if self.
|
228
|
+
if self._is_concurrent_cursor_incremental_without_partition_routing(
|
226
229
|
declarative_stream, incremental_sync_component_definition
|
227
230
|
):
|
228
231
|
stream_state = self._connector_state_manager.get_stream_state(
|
@@ -254,15 +257,26 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
254
257
|
stream_slicer=declarative_stream.retriever.stream_slicer,
|
255
258
|
)
|
256
259
|
else:
|
257
|
-
|
258
|
-
|
260
|
+
if (
|
261
|
+
incremental_sync_component_definition
|
262
|
+
and incremental_sync_component_definition.get("type")
|
263
|
+
== IncrementingCountCursorModel.__name__
|
264
|
+
):
|
265
|
+
cursor = self._constructor.create_concurrent_cursor_from_incrementing_count_cursor(
|
266
|
+
model_type=IncrementingCountCursorModel,
|
267
|
+
component_definition=incremental_sync_component_definition, # type: ignore # Not None because of the if condition above
|
268
|
+
stream_name=declarative_stream.name,
|
269
|
+
stream_namespace=declarative_stream.namespace,
|
270
|
+
config=config or {},
|
271
|
+
)
|
272
|
+
else:
|
273
|
+
cursor = self._constructor.create_concurrent_cursor_from_datetime_based_cursor(
|
259
274
|
model_type=DatetimeBasedCursorModel,
|
260
275
|
component_definition=incremental_sync_component_definition, # type: ignore # Not None because of the if condition above
|
261
276
|
stream_name=declarative_stream.name,
|
262
277
|
stream_namespace=declarative_stream.namespace,
|
263
278
|
config=config or {},
|
264
279
|
)
|
265
|
-
)
|
266
280
|
partition_generator = StreamSlicerPartitionGenerator(
|
267
281
|
partition_factory=DeclarativePartitionFactory(
|
268
282
|
declarative_stream.name,
|
@@ -389,7 +403,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
389
403
|
|
390
404
|
return concurrent_streams, synchronous_streams
|
391
405
|
|
392
|
-
def
|
406
|
+
def _is_concurrent_cursor_incremental_without_partition_routing(
|
393
407
|
self,
|
394
408
|
declarative_stream: DeclarativeStream,
|
395
409
|
incremental_sync_component_definition: Mapping[str, Any] | None,
|
@@ -397,11 +411,18 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
397
411
|
return (
|
398
412
|
incremental_sync_component_definition is not None
|
399
413
|
and bool(incremental_sync_component_definition)
|
400
|
-
and
|
401
|
-
|
414
|
+
and (
|
415
|
+
incremental_sync_component_definition.get("type", "")
|
416
|
+
in (DatetimeBasedCursorModel.__name__, IncrementingCountCursorModel.__name__)
|
417
|
+
)
|
402
418
|
and hasattr(declarative_stream.retriever, "stream_slicer")
|
403
419
|
and (
|
404
420
|
isinstance(declarative_stream.retriever.stream_slicer, DatetimeBasedCursor)
|
421
|
+
# IncrementingCountCursorModel is hardcoded to be of type DatetimeBasedCursor
|
422
|
+
# add isintance check here if we want to create a Declarative IncrementingCountCursor
|
423
|
+
# or isinstance(
|
424
|
+
# declarative_stream.retriever.stream_slicer, IncrementingCountCursor
|
425
|
+
# )
|
405
426
|
or isinstance(declarative_stream.retriever.stream_slicer, AsyncJobPartitionRouter)
|
406
427
|
)
|
407
428
|
)
|
@@ -31,7 +31,8 @@ class DatetimeParser:
|
|
31
31
|
return datetime.datetime.fromtimestamp(float(date), tz=datetime.timezone.utc)
|
32
32
|
elif format == "%ms":
|
33
33
|
return self._UNIX_EPOCH + datetime.timedelta(milliseconds=int(date))
|
34
|
-
|
34
|
+
elif "%_ms" in format:
|
35
|
+
format = format.replace("%_ms", "%f")
|
35
36
|
parsed_datetime = datetime.datetime.strptime(str(date), format)
|
36
37
|
if self._is_naive(parsed_datetime):
|
37
38
|
return parsed_datetime.replace(tzinfo=datetime.timezone.utc)
|
@@ -48,6 +49,11 @@ class DatetimeParser:
|
|
48
49
|
if format == "%ms":
|
49
50
|
# timstamp() returns a float representing the number of seconds since the unix epoch
|
50
51
|
return str(int(dt.timestamp() * 1000))
|
52
|
+
if "%_ms" in format:
|
53
|
+
_format = format.replace("%_ms", "%f")
|
54
|
+
milliseconds = int(dt.microsecond / 1000)
|
55
|
+
formatted_dt = dt.strftime(_format).replace(dt.strftime("%f"), "%03d" % milliseconds)
|
56
|
+
return formatted_dt
|
51
57
|
else:
|
52
58
|
return dt.strftime(format)
|
53
59
|
|
@@ -777,6 +777,44 @@ definitions:
|
|
777
777
|
type:
|
778
778
|
type: string
|
779
779
|
enum: [LegacyToPerPartitionStateMigration]
|
780
|
+
IncrementingCountCursor:
|
781
|
+
title: Incrementing Count Cursor
|
782
|
+
description: Cursor that allows for incremental sync according to a continuously increasing integer.
|
783
|
+
type: object
|
784
|
+
required:
|
785
|
+
- type
|
786
|
+
- cursor_field
|
787
|
+
properties:
|
788
|
+
type:
|
789
|
+
type: string
|
790
|
+
enum: [IncrementingCountCursor]
|
791
|
+
cursor_field:
|
792
|
+
title: Cursor Field
|
793
|
+
description: The location of the value on a record that will be used as a bookmark during sync. To ensure no data loss, the API must return records in ascending order based on the cursor field. Nested fields are not supported, so the field must be at the top level of the record. You can use a combination of Add Field and Remove Field transformations to move the nested field to the top.
|
794
|
+
type: string
|
795
|
+
interpolation_context:
|
796
|
+
- config
|
797
|
+
examples:
|
798
|
+
- "created_at"
|
799
|
+
- "{{ config['record_cursor'] }}"
|
800
|
+
start_value:
|
801
|
+
title: Start Value
|
802
|
+
description: The value that determines the earliest record that should be synced.
|
803
|
+
anyOf:
|
804
|
+
- type: string
|
805
|
+
- type: integer
|
806
|
+
interpolation_context:
|
807
|
+
- config
|
808
|
+
examples:
|
809
|
+
- 0
|
810
|
+
- "{{ config['start_value'] }}"
|
811
|
+
start_value_option:
|
812
|
+
title: Inject Start Value Into Outgoing HTTP Request
|
813
|
+
description: Optionally configures how the start value will be sent in requests to the source API.
|
814
|
+
"$ref": "#/definitions/RequestOption"
|
815
|
+
$parameters:
|
816
|
+
type: object
|
817
|
+
additionalProperties: true
|
780
818
|
DatetimeBasedCursor:
|
781
819
|
title: Datetime Based Cursor
|
782
820
|
description: Cursor to provide incremental capabilities over datetime.
|
@@ -844,6 +882,7 @@ definitions:
|
|
844
882
|
* **%M**: Minute (zero-padded) - `00`, `01`, ..., `59`
|
845
883
|
* **%S**: Second (zero-padded) - `00`, `01`, ..., `59`
|
846
884
|
* **%f**: Microsecond (zero-padded to 6 digits) - `000000`
|
885
|
+
* **%_ms**: Millisecond (zero-padded to 3 digits) - `000`
|
847
886
|
* **%z**: UTC offset - `(empty)`, `+0000`, `-04:00`
|
848
887
|
* **%Z**: Time zone name - `(empty)`, `UTC`, `GMT`
|
849
888
|
* **%j**: Day of the year (zero-padded) - `001`, `002`, ..., `366`
|
@@ -1318,6 +1357,7 @@ definitions:
|
|
1318
1357
|
anyOf:
|
1319
1358
|
- "$ref": "#/definitions/CustomIncrementalSync"
|
1320
1359
|
- "$ref": "#/definitions/DatetimeBasedCursor"
|
1360
|
+
- "$ref": "#/definitions/IncrementingCountCursor"
|
1321
1361
|
name:
|
1322
1362
|
title: Name
|
1323
1363
|
description: The stream name.
|
@@ -1779,6 +1819,9 @@ definitions:
|
|
1779
1819
|
- stream_interval
|
1780
1820
|
- stream_partition
|
1781
1821
|
- stream_slice
|
1822
|
+
- creation_response
|
1823
|
+
- polling_response
|
1824
|
+
- download_target
|
1782
1825
|
examples:
|
1783
1826
|
- "/products"
|
1784
1827
|
- "/quotes/{{ stream_partition['id'] }}/quote_line_groups"
|
@@ -2398,6 +2441,7 @@ definitions:
|
|
2398
2441
|
* **%M**: Minute (zero-padded) - `00`, `01`, ..., `59`
|
2399
2442
|
* **%S**: Second (zero-padded) - `00`, `01`, ..., `59`
|
2400
2443
|
* **%f**: Microsecond (zero-padded to 6 digits) - `000000`, `000001`, ..., `999999`
|
2444
|
+
* **%_ms**: Millisecond (zero-padded to 3 digits) - `000`, `001`, ..., `999`
|
2401
2445
|
* **%z**: UTC offset - `(empty)`, `+0000`, `-04:00`
|
2402
2446
|
* **%Z**: Time zone name - `(empty)`, `UTC`, `GMT`
|
2403
2447
|
* **%j**: Day of the year (zero-padded) - `001`, `002`, ..., `366`
|
@@ -3223,7 +3267,7 @@ definitions:
|
|
3223
3267
|
- polling_requester
|
3224
3268
|
- download_requester
|
3225
3269
|
- status_extractor
|
3226
|
-
-
|
3270
|
+
- download_target_extractor
|
3227
3271
|
properties:
|
3228
3272
|
type:
|
3229
3273
|
type: string
|
@@ -3240,7 +3284,7 @@ definitions:
|
|
3240
3284
|
anyOf:
|
3241
3285
|
- "$ref": "#/definitions/CustomRecordExtractor"
|
3242
3286
|
- "$ref": "#/definitions/DpathExtractor"
|
3243
|
-
|
3287
|
+
download_target_extractor:
|
3244
3288
|
description: Responsible for fetching the final result `urls` provided by the completed / finished / ready async job.
|
3245
3289
|
anyOf:
|
3246
3290
|
- "$ref": "#/definitions/CustomRecordExtractor"
|
@@ -3261,7 +3305,7 @@ definitions:
|
|
3261
3305
|
anyOf:
|
3262
3306
|
- "$ref": "#/definitions/CustomRequester"
|
3263
3307
|
- "$ref": "#/definitions/HttpRequester"
|
3264
|
-
|
3308
|
+
download_target_requester:
|
3265
3309
|
description: Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.
|
3266
3310
|
anyOf:
|
3267
3311
|
- "$ref": "#/definitions/CustomRequester"
|
@@ -3667,6 +3711,21 @@ interpolation:
|
|
3667
3711
|
self: https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=
|
3668
3712
|
next: https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=0236d6d2
|
3669
3713
|
count: 82
|
3714
|
+
- title: creation_response
|
3715
|
+
description: The response received from the creation_requester in the AsyncRetriever component.
|
3716
|
+
type: object
|
3717
|
+
examples:
|
3718
|
+
- id: "1234"
|
3719
|
+
- title: polling_response
|
3720
|
+
description: The response received from the polling_requester in the AsyncRetriever component.
|
3721
|
+
type: object
|
3722
|
+
examples:
|
3723
|
+
- id: "1234"
|
3724
|
+
- title: download_target
|
3725
|
+
description: The `URL` received from the polling_requester in the AsyncRetriever with jobStatus as `COMPLETED`.
|
3726
|
+
type: string
|
3727
|
+
examples:
|
3728
|
+
- "https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=0236d6d2&filename=xxx_yyy_zzz.csv"
|
3670
3729
|
- title: stream_interval
|
3671
3730
|
description: The current stream interval being processed. The keys are defined by the incremental sync component. Default keys are `start_time` and `end_time`.
|
3672
3731
|
type: object
|
@@ -136,6 +136,7 @@ class ResponseToFileExtractor(RecordExtractor):
|
|
136
136
|
"""
|
137
137
|
|
138
138
|
try:
|
139
|
+
# TODO: Add support for other file types, like `json`, with `pd.read_json()`
|
139
140
|
with open(path, "r", encoding=file_encoding) as data:
|
140
141
|
chunks = pd.read_csv(
|
141
142
|
data, chunksize=chunk_size, iterator=True, dialect="unix", dtype=object
|
@@ -1508,6 +1508,28 @@ class AuthFlow(BaseModel):
|
|
1508
1508
|
oauth_config_specification: Optional[OAuthConfigSpecification] = None
|
1509
1509
|
|
1510
1510
|
|
1511
|
+
class IncrementingCountCursor(BaseModel):
|
1512
|
+
type: Literal["IncrementingCountCursor"]
|
1513
|
+
cursor_field: str = Field(
|
1514
|
+
...,
|
1515
|
+
description="The location of the value on a record that will be used as a bookmark during sync. To ensure no data loss, the API must return records in ascending order based on the cursor field. Nested fields are not supported, so the field must be at the top level of the record. You can use a combination of Add Field and Remove Field transformations to move the nested field to the top.",
|
1516
|
+
examples=["created_at", "{{ config['record_cursor'] }}"],
|
1517
|
+
title="Cursor Field",
|
1518
|
+
)
|
1519
|
+
start_value: Optional[Union[str, int]] = Field(
|
1520
|
+
None,
|
1521
|
+
description="The value that determines the earliest record that should be synced.",
|
1522
|
+
examples=[0, "{{ config['start_value'] }}"],
|
1523
|
+
title="Start Value",
|
1524
|
+
)
|
1525
|
+
start_value_option: Optional[RequestOption] = Field(
|
1526
|
+
None,
|
1527
|
+
description="Optionally configures how the start value will be sent in requests to the source API.",
|
1528
|
+
title="Inject Start Value Into Outgoing HTTP Request",
|
1529
|
+
)
|
1530
|
+
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
1531
|
+
|
1532
|
+
|
1511
1533
|
class DatetimeBasedCursor(BaseModel):
|
1512
1534
|
type: Literal["DatetimeBasedCursor"]
|
1513
1535
|
clamping: Optional[Clamping] = Field(
|
@@ -1948,7 +1970,9 @@ class DeclarativeStream(BaseModel):
|
|
1948
1970
|
description="Component used to coordinate how records are extracted across stream slices and request pages.",
|
1949
1971
|
title="Retriever",
|
1950
1972
|
)
|
1951
|
-
incremental_sync: Optional[
|
1973
|
+
incremental_sync: Optional[
|
1974
|
+
Union[CustomIncrementalSync, DatetimeBasedCursor, IncrementingCountCursor]
|
1975
|
+
] = Field(
|
1952
1976
|
None,
|
1953
1977
|
description="Component used to fetch data incrementally based on a time field in the data.",
|
1954
1978
|
title="Incremental Sync",
|
@@ -2263,7 +2287,7 @@ class AsyncRetriever(BaseModel):
|
|
2263
2287
|
status_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
|
2264
2288
|
..., description="Responsible for fetching the actual status of the async job."
|
2265
2289
|
)
|
2266
|
-
|
2290
|
+
download_target_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
|
2267
2291
|
...,
|
2268
2292
|
description="Responsible for fetching the final result `urls` provided by the completed / finished / ready async job.",
|
2269
2293
|
)
|
@@ -2278,7 +2302,7 @@ class AsyncRetriever(BaseModel):
|
|
2278
2302
|
...,
|
2279
2303
|
description="Requester component that describes how to prepare HTTP requests to send to the source API to fetch the status of the running async job.",
|
2280
2304
|
)
|
2281
|
-
|
2305
|
+
download_target_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
|
2282
2306
|
None,
|
2283
2307
|
description="Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.",
|
2284
2308
|
)
|
@@ -45,7 +45,7 @@ class AirbyteCustomCodeNotPermittedError(Exception):
|
|
45
45
|
def _hash_text(input_text: str, hash_type: str = "md5") -> str:
|
46
46
|
"""Return the hash of the input text using the specified hash type."""
|
47
47
|
if not input_text:
|
48
|
-
raise ValueError("
|
48
|
+
raise ValueError("Hash input text cannot be empty.")
|
49
49
|
|
50
50
|
hash_object = CHECKSUM_FUNCTIONS[hash_type]()
|
51
51
|
hash_object.update(input_text.encode())
|
@@ -68,6 +68,10 @@ def validate_python_code(
|
|
68
68
|
|
69
69
|
Currently we fail if no checksums are provided, although this may change in the future.
|
70
70
|
"""
|
71
|
+
if not code_text:
|
72
|
+
# No code provided, nothing to validate.
|
73
|
+
return
|
74
|
+
|
71
75
|
if not checksums:
|
72
76
|
raise ValueError(f"A checksum is required to validate the code. Received: {checksums}")
|
73
77
|
|
@@ -77,8 +81,18 @@ def validate_python_code(
|
|
77
81
|
f"Unsupported checksum type: {checksum_type}. Supported checksum types are: {CHECKSUM_FUNCTIONS.keys()}"
|
78
82
|
)
|
79
83
|
|
80
|
-
|
81
|
-
|
84
|
+
calculated_checksum = _hash_text(code_text, checksum_type)
|
85
|
+
if calculated_checksum != checksum:
|
86
|
+
raise AirbyteCodeTamperedError(
|
87
|
+
f"{checksum_type} checksum does not match."
|
88
|
+
+ str(
|
89
|
+
{
|
90
|
+
"expected_checksum": checksum,
|
91
|
+
"actual_checksum": calculated_checksum,
|
92
|
+
"code_text": code_text,
|
93
|
+
}
|
94
|
+
),
|
95
|
+
)
|
82
96
|
|
83
97
|
|
84
98
|
def get_registered_components_module(
|
@@ -94,7 +108,7 @@ def get_registered_components_module(
|
|
94
108
|
|
95
109
|
Returns `None` if no components is provided and the `components` module is not found.
|
96
110
|
"""
|
97
|
-
if config and INJECTED_COMPONENTS_PY
|
111
|
+
if config and config.get(INJECTED_COMPONENTS_PY, None):
|
98
112
|
if not custom_code_execution_permitted():
|
99
113
|
raise AirbyteCustomCodeNotPermittedError
|
100
114
|
|
@@ -245,6 +245,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
245
245
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
246
246
|
HttpResponseFilter as HttpResponseFilterModel,
|
247
247
|
)
|
248
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
249
|
+
IncrementingCountCursor as IncrementingCountCursorModel,
|
250
|
+
)
|
248
251
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
249
252
|
InlineSchemaLoader as InlineSchemaLoaderModel,
|
250
253
|
)
|
@@ -496,6 +499,9 @@ from airbyte_cdk.sources.streams.concurrent.state_converters.datetime_stream_sta
|
|
496
499
|
CustomFormatConcurrentStreamStateConverter,
|
497
500
|
DateTimeStreamStateConverter,
|
498
501
|
)
|
502
|
+
from airbyte_cdk.sources.streams.concurrent.state_converters.incrementing_count_stream_state_converter import (
|
503
|
+
IncrementingCountStreamStateConverter,
|
504
|
+
)
|
499
505
|
from airbyte_cdk.sources.streams.http.error_handlers.response_models import ResponseAction
|
500
506
|
from airbyte_cdk.sources.types import Config
|
501
507
|
from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer
|
@@ -584,6 +590,7 @@ class ModelToComponentFactory:
|
|
584
590
|
FlattenFieldsModel: self.create_flatten_fields,
|
585
591
|
DpathFlattenFieldsModel: self.create_dpath_flatten_fields,
|
586
592
|
IterableDecoderModel: self.create_iterable_decoder,
|
593
|
+
IncrementingCountCursorModel: self.create_incrementing_count_cursor,
|
587
594
|
XmlDecoderModel: self.create_xml_decoder,
|
588
595
|
JsonFileSchemaLoaderModel: self.create_json_file_schema_loader,
|
589
596
|
DynamicSchemaLoaderModel: self.create_dynamic_schema_loader,
|
@@ -1189,6 +1196,70 @@ class ModelToComponentFactory:
|
|
1189
1196
|
clamping_strategy=clamping_strategy,
|
1190
1197
|
)
|
1191
1198
|
|
1199
|
+
def create_concurrent_cursor_from_incrementing_count_cursor(
|
1200
|
+
self,
|
1201
|
+
model_type: Type[BaseModel],
|
1202
|
+
component_definition: ComponentDefinition,
|
1203
|
+
stream_name: str,
|
1204
|
+
stream_namespace: Optional[str],
|
1205
|
+
config: Config,
|
1206
|
+
message_repository: Optional[MessageRepository] = None,
|
1207
|
+
**kwargs: Any,
|
1208
|
+
) -> ConcurrentCursor:
|
1209
|
+
# Per-partition incremental streams can dynamically create child cursors which will pass their current
|
1210
|
+
# state via the stream_state keyword argument. Incremental syncs without parent streams use the
|
1211
|
+
# incoming state and connector_state_manager that is initialized when the component factory is created
|
1212
|
+
stream_state = (
|
1213
|
+
self._connector_state_manager.get_stream_state(stream_name, stream_namespace)
|
1214
|
+
if "stream_state" not in kwargs
|
1215
|
+
else kwargs["stream_state"]
|
1216
|
+
)
|
1217
|
+
|
1218
|
+
component_type = component_definition.get("type")
|
1219
|
+
if component_definition.get("type") != model_type.__name__:
|
1220
|
+
raise ValueError(
|
1221
|
+
f"Expected manifest component of type {model_type.__name__}, but received {component_type} instead"
|
1222
|
+
)
|
1223
|
+
|
1224
|
+
incrementing_count_cursor_model = model_type.parse_obj(component_definition)
|
1225
|
+
|
1226
|
+
if not isinstance(incrementing_count_cursor_model, IncrementingCountCursorModel):
|
1227
|
+
raise ValueError(
|
1228
|
+
f"Expected {model_type.__name__} component, but received {incrementing_count_cursor_model.__class__.__name__}"
|
1229
|
+
)
|
1230
|
+
|
1231
|
+
interpolated_start_value = (
|
1232
|
+
InterpolatedString.create(
|
1233
|
+
incrementing_count_cursor_model.start_value, # type: ignore
|
1234
|
+
parameters=incrementing_count_cursor_model.parameters or {},
|
1235
|
+
)
|
1236
|
+
if incrementing_count_cursor_model.start_value
|
1237
|
+
else 0
|
1238
|
+
)
|
1239
|
+
|
1240
|
+
interpolated_cursor_field = InterpolatedString.create(
|
1241
|
+
incrementing_count_cursor_model.cursor_field,
|
1242
|
+
parameters=incrementing_count_cursor_model.parameters or {},
|
1243
|
+
)
|
1244
|
+
cursor_field = CursorField(interpolated_cursor_field.eval(config=config))
|
1245
|
+
|
1246
|
+
connector_state_converter = IncrementingCountStreamStateConverter(
|
1247
|
+
is_sequential_state=True, # ConcurrentPerPartitionCursor only works with sequential state
|
1248
|
+
)
|
1249
|
+
|
1250
|
+
return ConcurrentCursor(
|
1251
|
+
stream_name=stream_name,
|
1252
|
+
stream_namespace=stream_namespace,
|
1253
|
+
stream_state=stream_state,
|
1254
|
+
message_repository=message_repository or self._message_repository,
|
1255
|
+
connector_state_manager=self._connector_state_manager,
|
1256
|
+
connector_state_converter=connector_state_converter,
|
1257
|
+
cursor_field=cursor_field,
|
1258
|
+
slice_boundary_fields=None,
|
1259
|
+
start=interpolated_start_value, # type: ignore # Having issues w/ inspection for GapType and CursorValueType as shown in existing tests. Confirmed functionality is working in practice
|
1260
|
+
end_provider=connector_state_converter.get_end_provider(), # type: ignore # Having issues w/ inspection for GapType and CursorValueType as shown in existing tests. Confirmed functionality is working in practice
|
1261
|
+
)
|
1262
|
+
|
1192
1263
|
def _assemble_weekday(self, weekday: str) -> Weekday:
|
1193
1264
|
match weekday:
|
1194
1265
|
case "MONDAY":
|
@@ -1622,6 +1693,31 @@ class ModelToComponentFactory:
|
|
1622
1693
|
config=config,
|
1623
1694
|
parameters=model.parameters or {},
|
1624
1695
|
)
|
1696
|
+
elif model.incremental_sync and isinstance(
|
1697
|
+
model.incremental_sync, IncrementingCountCursorModel
|
1698
|
+
):
|
1699
|
+
cursor_model: IncrementingCountCursorModel = model.incremental_sync # type: ignore
|
1700
|
+
|
1701
|
+
start_time_option = (
|
1702
|
+
self._create_component_from_model(
|
1703
|
+
cursor_model.start_value_option, # type: ignore # mypy still thinks cursor_model of type DatetimeBasedCursor
|
1704
|
+
config,
|
1705
|
+
parameters=cursor_model.parameters or {},
|
1706
|
+
)
|
1707
|
+
if cursor_model.start_value_option # type: ignore # mypy still thinks cursor_model of type DatetimeBasedCursor
|
1708
|
+
else None
|
1709
|
+
)
|
1710
|
+
|
1711
|
+
# The concurrent engine defaults the start/end fields on the slice to "start" and "end", but
|
1712
|
+
# the default DatetimeBasedRequestOptionsProvider() sets them to start_time/end_time
|
1713
|
+
partition_field_start = "start"
|
1714
|
+
|
1715
|
+
request_options_provider = DatetimeBasedRequestOptionsProvider(
|
1716
|
+
start_time_option=start_time_option,
|
1717
|
+
partition_field_start=partition_field_start,
|
1718
|
+
config=config,
|
1719
|
+
parameters=model.parameters or {},
|
1720
|
+
)
|
1625
1721
|
else:
|
1626
1722
|
request_options_provider = None
|
1627
1723
|
|
@@ -2111,6 +2207,22 @@ class ModelToComponentFactory:
|
|
2111
2207
|
stream_response=False if self._emit_connector_builder_messages else True,
|
2112
2208
|
)
|
2113
2209
|
|
2210
|
+
@staticmethod
|
2211
|
+
def create_incrementing_count_cursor(
|
2212
|
+
model: IncrementingCountCursorModel, config: Config, **kwargs: Any
|
2213
|
+
) -> DatetimeBasedCursor:
|
2214
|
+
# This should not actually get used anywhere at runtime, but needed to add this to pass checks since
|
2215
|
+
# we still parse models into components. The issue is that there's no runtime implementation of a
|
2216
|
+
# IncrementingCountCursor.
|
2217
|
+
# A known and expected issue with this stub is running a check with the declared IncrementingCountCursor because it is run without ConcurrentCursor.
|
2218
|
+
return DatetimeBasedCursor(
|
2219
|
+
cursor_field=model.cursor_field,
|
2220
|
+
datetime_format="%Y-%m-%d",
|
2221
|
+
start_datetime="2024-12-12",
|
2222
|
+
config=config,
|
2223
|
+
parameters={},
|
2224
|
+
)
|
2225
|
+
|
2114
2226
|
@staticmethod
|
2115
2227
|
def create_iterable_decoder(
|
2116
2228
|
model: IterableDecoderModel, config: Config, **kwargs: Any
|
@@ -2744,32 +2856,32 @@ class ModelToComponentFactory:
|
|
2744
2856
|
if model.delete_requester
|
2745
2857
|
else None
|
2746
2858
|
)
|
2747
|
-
|
2859
|
+
download_target_requester = (
|
2748
2860
|
self._create_component_from_model(
|
2749
|
-
model=model.
|
2861
|
+
model=model.download_target_requester,
|
2750
2862
|
decoder=decoder,
|
2751
2863
|
config=config,
|
2752
2864
|
name=f"job extract_url - {name}",
|
2753
2865
|
)
|
2754
|
-
if model.
|
2866
|
+
if model.download_target_requester
|
2755
2867
|
else None
|
2756
2868
|
)
|
2757
2869
|
status_extractor = self._create_component_from_model(
|
2758
2870
|
model=model.status_extractor, decoder=decoder, config=config, name=name
|
2759
2871
|
)
|
2760
|
-
|
2761
|
-
model=model.
|
2872
|
+
download_target_extractor = self._create_component_from_model(
|
2873
|
+
model=model.download_target_extractor, decoder=decoder, config=config, name=name
|
2762
2874
|
)
|
2763
2875
|
job_repository: AsyncJobRepository = AsyncHttpJobRepository(
|
2764
2876
|
creation_requester=creation_requester,
|
2765
2877
|
polling_requester=polling_requester,
|
2766
2878
|
download_retriever=download_retriever,
|
2767
|
-
|
2879
|
+
download_target_requester=download_target_requester,
|
2768
2880
|
abort_requester=abort_requester,
|
2769
2881
|
delete_requester=delete_requester,
|
2770
2882
|
status_extractor=status_extractor,
|
2771
2883
|
status_mapping=self._create_async_job_status_mapping(model.status_mapping, config),
|
2772
|
-
|
2884
|
+
download_target_extractor=download_target_extractor,
|
2773
2885
|
)
|
2774
2886
|
|
2775
2887
|
async_job_partition_router = AsyncJobPartitionRouter(
|
{airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/README.md
RENAMED
@@ -1,8 +1,8 @@
|
|
1
1
|
# AsyncHttpJobRepository sequence diagram
|
2
2
|
|
3
3
|
- Components marked as optional are not required and can be ignored.
|
4
|
-
- if `
|
5
|
-
- interpolation_context, e.g. `
|
4
|
+
- if `download_target_requester` is not provided, `download_target_extractor` will get urls from the `polling_response`
|
5
|
+
- interpolation_context, e.g. `creation_response` or `polling_response` can be obtained from stream_slice
|
6
6
|
|
7
7
|
```mermaid
|
8
8
|
---
|
@@ -12,7 +12,7 @@ sequenceDiagram
|
|
12
12
|
participant AsyncHttpJobRepository as AsyncOrchestrator
|
13
13
|
participant CreationRequester as creation_requester
|
14
14
|
participant PollingRequester as polling_requester
|
15
|
-
participant UrlRequester as
|
15
|
+
participant UrlRequester as download_target_requester (Optional)
|
16
16
|
participant DownloadRetriever as download_retriever
|
17
17
|
participant AbortRequester as abort_requester (Optional)
|
18
18
|
participant DeleteRequester as delete_requester (Optional)
|
@@ -25,14 +25,14 @@ sequenceDiagram
|
|
25
25
|
|
26
26
|
loop Poll for job status
|
27
27
|
AsyncHttpJobRepository ->> PollingRequester: Check job status
|
28
|
-
PollingRequester ->> Reporting Server: Status request (interpolation_context: `
|
28
|
+
PollingRequester ->> Reporting Server: Status request (interpolation_context: `creation_response`)
|
29
29
|
Reporting Server -->> PollingRequester: Status response
|
30
30
|
PollingRequester -->> AsyncHttpJobRepository: Job status
|
31
31
|
end
|
32
32
|
|
33
33
|
alt Status: Ready
|
34
34
|
AsyncHttpJobRepository ->> UrlRequester: Request download URLs (if applicable)
|
35
|
-
UrlRequester ->> Reporting Server: URL request (interpolation_context: `
|
35
|
+
UrlRequester ->> Reporting Server: URL request (interpolation_context: `polling_response`)
|
36
36
|
Reporting Server -->> UrlRequester: Download URLs
|
37
37
|
UrlRequester -->> AsyncHttpJobRepository: Download URLs
|
38
38
|
|