airbyte-cdk 6.17.1.dev0__tar.gz → 6.18.0__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/PKG-INFO +1 -1
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -69
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +5 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +5 -3
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -6
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -14
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +26 -12
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +26 -79
- airbyte_cdk-6.18.0/airbyte_cdk/sources/declarative/requesters/README.md +57 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +33 -4
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +1 -1
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/types.py +3 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/pyproject.toml +1 -1
- airbyte_cdk-6.17.1.dev0/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -346
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/LICENSE.txt +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/README.md +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.17.1.dev0 → airbyte_cdk-6.18.0}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -20,9 +20,6 @@ from airbyte_cdk.sources.declarative.extractors.record_filter import (
|
|
20
20
|
ClientSideIncrementalRecordFilterDecorator,
|
21
21
|
)
|
22
22
|
from airbyte_cdk.sources.declarative.incremental.datetime_based_cursor import DatetimeBasedCursor
|
23
|
-
from airbyte_cdk.sources.declarative.incremental.per_partition_with_global import (
|
24
|
-
PerPartitionWithGlobalCursor,
|
25
|
-
)
|
26
23
|
from airbyte_cdk.sources.declarative.interpolation import InterpolatedString
|
27
24
|
from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource
|
28
25
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
@@ -307,72 +304,6 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
307
304
|
cursor=final_state_cursor,
|
308
305
|
)
|
309
306
|
)
|
310
|
-
elif (
|
311
|
-
incremental_sync_component_definition
|
312
|
-
and incremental_sync_component_definition.get("type", "")
|
313
|
-
== DatetimeBasedCursorModel.__name__
|
314
|
-
and self._stream_supports_concurrent_partition_processing(
|
315
|
-
declarative_stream=declarative_stream
|
316
|
-
)
|
317
|
-
and hasattr(declarative_stream.retriever, "stream_slicer")
|
318
|
-
and isinstance(
|
319
|
-
declarative_stream.retriever.stream_slicer, PerPartitionWithGlobalCursor
|
320
|
-
)
|
321
|
-
):
|
322
|
-
stream_state = state_manager.get_stream_state(
|
323
|
-
stream_name=declarative_stream.name, namespace=declarative_stream.namespace
|
324
|
-
)
|
325
|
-
partition_router = declarative_stream.retriever.stream_slicer._partition_router
|
326
|
-
|
327
|
-
cursor = self._constructor.create_concurrent_cursor_from_perpartition_cursor(
|
328
|
-
state_manager=state_manager,
|
329
|
-
model_type=DatetimeBasedCursorModel,
|
330
|
-
component_definition=incremental_sync_component_definition,
|
331
|
-
stream_name=declarative_stream.name,
|
332
|
-
stream_namespace=declarative_stream.namespace,
|
333
|
-
config=config or {},
|
334
|
-
stream_state=stream_state,
|
335
|
-
partition_router=partition_router,
|
336
|
-
)
|
337
|
-
|
338
|
-
retriever = declarative_stream.retriever
|
339
|
-
|
340
|
-
# This is an optimization so that we don't invoke any cursor or state management flows within the
|
341
|
-
# low-code framework because state management is handled through the ConcurrentCursor.
|
342
|
-
if declarative_stream and isinstance(retriever, SimpleRetriever):
|
343
|
-
# Also a temporary hack. In the legacy Stream implementation, as part of the read,
|
344
|
-
# set_initial_state() is called to instantiate incoming state on the cursor. Although we no
|
345
|
-
# longer rely on the legacy low-code cursor for concurrent checkpointing, low-code components
|
346
|
-
# like StopConditionPaginationStrategyDecorator and ClientSideIncrementalRecordFilterDecorator
|
347
|
-
# still rely on a DatetimeBasedCursor that is properly initialized with state.
|
348
|
-
if retriever.cursor:
|
349
|
-
retriever.cursor.set_initial_state(stream_state=stream_state)
|
350
|
-
# We zero it out here, but since this is a cursor reference, the state is still properly
|
351
|
-
# instantiated for the other components that reference it
|
352
|
-
retriever.cursor = None
|
353
|
-
|
354
|
-
partition_generator = StreamSlicerPartitionGenerator(
|
355
|
-
DeclarativePartitionFactory(
|
356
|
-
declarative_stream.name,
|
357
|
-
declarative_stream.get_json_schema(),
|
358
|
-
retriever,
|
359
|
-
self.message_repository,
|
360
|
-
),
|
361
|
-
cursor,
|
362
|
-
)
|
363
|
-
|
364
|
-
concurrent_streams.append(
|
365
|
-
DefaultStream(
|
366
|
-
partition_generator=partition_generator,
|
367
|
-
name=declarative_stream.name,
|
368
|
-
json_schema=declarative_stream.get_json_schema(),
|
369
|
-
availability_strategy=AlwaysAvailableAvailabilityStrategy(),
|
370
|
-
primary_key=get_primary_key_from_stream(declarative_stream.primary_key),
|
371
|
-
cursor_field=cursor.cursor_field.cursor_field_key,
|
372
|
-
logger=self.logger,
|
373
|
-
cursor=cursor,
|
374
|
-
)
|
375
|
-
)
|
376
307
|
else:
|
377
308
|
synchronous_streams.append(declarative_stream)
|
378
309
|
else:
|
@@ -2977,6 +2977,11 @@ definitions:
|
|
2977
2977
|
anyOf:
|
2978
2978
|
- "$ref": "#/definitions/CustomRequester"
|
2979
2979
|
- "$ref": "#/definitions/HttpRequester"
|
2980
|
+
url_requester:
|
2981
|
+
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.
|
2982
|
+
anyOf:
|
2983
|
+
- "$ref": "#/definitions/CustomRequester"
|
2984
|
+
- "$ref": "#/definitions/HttpRequester"
|
2980
2985
|
download_requester:
|
2981
2986
|
description: Requester component that describes how to prepare HTTP requests to send to the source API to download the data provided by the completed async job.
|
2982
2987
|
anyOf:
|
@@ -59,11 +59,13 @@ class ClientSideIncrementalRecordFilterDecorator(RecordFilter):
|
|
59
59
|
|
60
60
|
def __init__(
|
61
61
|
self,
|
62
|
-
|
62
|
+
date_time_based_cursor: DatetimeBasedCursor,
|
63
|
+
substream_cursor: Optional[Union[PerPartitionWithGlobalCursor, GlobalSubstreamCursor]],
|
63
64
|
**kwargs: Any,
|
64
65
|
):
|
65
66
|
super().__init__(**kwargs)
|
66
|
-
self.
|
67
|
+
self._date_time_based_cursor = date_time_based_cursor
|
68
|
+
self._substream_cursor = substream_cursor
|
67
69
|
|
68
70
|
def filter_records(
|
69
71
|
self,
|
@@ -75,7 +77,7 @@ class ClientSideIncrementalRecordFilterDecorator(RecordFilter):
|
|
75
77
|
records = (
|
76
78
|
record
|
77
79
|
for record in records
|
78
|
-
if self.
|
80
|
+
if (self._substream_cursor or self._date_time_based_cursor).should_be_synced(
|
79
81
|
# Record is created on the fly to align with cursors interface; stream name is ignored as we don't need it here
|
80
82
|
# Record stream name is empty cause it is not used durig the filtering
|
81
83
|
Record(data=record, associated_slice=stream_slice, stream_name="")
|
@@ -2,10 +2,6 @@
|
|
2
2
|
# Copyright (c) 2022 Airbyte, Inc., all rights reserved.
|
3
3
|
#
|
4
4
|
|
5
|
-
from airbyte_cdk.sources.declarative.incremental.concurrent_partition_cursor import (
|
6
|
-
ConcurrentCursorFactory,
|
7
|
-
ConcurrentPerPartitionCursor,
|
8
|
-
)
|
9
5
|
from airbyte_cdk.sources.declarative.incremental.datetime_based_cursor import DatetimeBasedCursor
|
10
6
|
from airbyte_cdk.sources.declarative.incremental.declarative_cursor import DeclarativeCursor
|
11
7
|
from airbyte_cdk.sources.declarative.incremental.global_substream_cursor import (
|
@@ -25,8 +21,6 @@ from airbyte_cdk.sources.declarative.incremental.resumable_full_refresh_cursor i
|
|
25
21
|
|
26
22
|
__all__ = [
|
27
23
|
"CursorFactory",
|
28
|
-
"ConcurrentCursorFactory",
|
29
|
-
"ConcurrentPerPartitionCursor",
|
30
24
|
"DatetimeBasedCursor",
|
31
25
|
"DeclarativeCursor",
|
32
26
|
"GlobalSubstreamCursor",
|
@@ -303,20 +303,6 @@ class PerPartitionCursor(DeclarativeCursor):
|
|
303
303
|
raise ValueError("A partition needs to be provided in order to get request body json")
|
304
304
|
|
305
305
|
def should_be_synced(self, record: Record) -> bool:
|
306
|
-
if (
|
307
|
-
self._to_partition_key(record.associated_slice.partition)
|
308
|
-
not in self._cursor_per_partition
|
309
|
-
):
|
310
|
-
partition_state = (
|
311
|
-
self._state_to_migrate_from
|
312
|
-
if self._state_to_migrate_from
|
313
|
-
else self._NO_CURSOR_STATE
|
314
|
-
)
|
315
|
-
cursor = self._create_cursor(partition_state)
|
316
|
-
|
317
|
-
self._cursor_per_partition[
|
318
|
-
self._to_partition_key(record.associated_slice.partition)
|
319
|
-
] = cursor
|
320
306
|
return self._get_cursor(record).should_be_synced(
|
321
307
|
self._convert_record_to_cursor_record(record)
|
322
308
|
)
|
@@ -737,33 +737,43 @@ class KeysToSnakeCase(BaseModel):
|
|
737
737
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
738
738
|
|
739
739
|
|
740
|
+
class FlattenFields(BaseModel):
|
741
|
+
type: Literal["FlattenFields"]
|
742
|
+
flatten_lists: Optional[bool] = Field(
|
743
|
+
True,
|
744
|
+
description="Whether to flatten lists or leave it as is. Default is True.",
|
745
|
+
title="Flatten Lists",
|
746
|
+
)
|
747
|
+
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
748
|
+
|
749
|
+
|
740
750
|
class KeysReplace(BaseModel):
|
741
751
|
type: Literal["KeysReplace"]
|
742
752
|
old: str = Field(
|
743
753
|
...,
|
744
754
|
description="Old value to replace.",
|
745
|
-
examples=[
|
755
|
+
examples=[
|
756
|
+
" ",
|
757
|
+
"{{ record.id }}",
|
758
|
+
"{{ config['id'] }}",
|
759
|
+
"{{ stream_slice['id'] }}",
|
760
|
+
],
|
746
761
|
title="Old value",
|
747
762
|
)
|
748
763
|
new: str = Field(
|
749
764
|
...,
|
750
765
|
description="New value to set.",
|
751
|
-
examples=[
|
766
|
+
examples=[
|
767
|
+
"_",
|
768
|
+
"{{ record.id }}",
|
769
|
+
"{{ config['id'] }}",
|
770
|
+
"{{ stream_slice['id'] }}",
|
771
|
+
],
|
752
772
|
title="New value",
|
753
773
|
)
|
754
774
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
755
775
|
|
756
776
|
|
757
|
-
class FlattenFields(BaseModel):
|
758
|
-
type: Literal["FlattenFields"]
|
759
|
-
flatten_lists: Optional[bool] = Field(
|
760
|
-
True,
|
761
|
-
description="Whether to flatten lists or leave it as is. Default is True.",
|
762
|
-
title="Flatten Lists",
|
763
|
-
)
|
764
|
-
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
765
|
-
|
766
|
-
|
767
777
|
class IterableDecoder(BaseModel):
|
768
778
|
type: Literal["IterableDecoder"]
|
769
779
|
|
@@ -2040,6 +2050,10 @@ class AsyncRetriever(BaseModel):
|
|
2040
2050
|
...,
|
2041
2051
|
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.",
|
2042
2052
|
)
|
2053
|
+
url_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
|
2054
|
+
None,
|
2055
|
+
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.",
|
2056
|
+
)
|
2043
2057
|
download_requester: Union[CustomRequester, HttpRequester] = Field(
|
2044
2058
|
...,
|
2045
2059
|
description="Requester component that describes how to prepare HTTP requests to send to the source API to download the data provided by the completed async job.",
|
@@ -84,8 +84,6 @@ from airbyte_cdk.sources.declarative.extractors.record_filter import (
|
|
84
84
|
)
|
85
85
|
from airbyte_cdk.sources.declarative.incremental import (
|
86
86
|
ChildPartitionResumableFullRefreshCursor,
|
87
|
-
ConcurrentCursorFactory,
|
88
|
-
ConcurrentPerPartitionCursor,
|
89
87
|
CursorFactory,
|
90
88
|
DatetimeBasedCursor,
|
91
89
|
DeclarativeCursor,
|
@@ -440,7 +438,6 @@ from airbyte_cdk.sources.message import (
|
|
440
438
|
InMemoryMessageRepository,
|
441
439
|
LogAppenderMessageRepositoryDecorator,
|
442
440
|
MessageRepository,
|
443
|
-
NoopMessageRepository,
|
444
441
|
)
|
445
442
|
from airbyte_cdk.sources.streams.concurrent.cursor import ConcurrentCursor, CursorField
|
446
443
|
from airbyte_cdk.sources.streams.concurrent.state_converters.datetime_stream_state_converter import (
|
@@ -874,8 +871,6 @@ class ModelToComponentFactory:
|
|
874
871
|
stream_namespace: Optional[str],
|
875
872
|
config: Config,
|
876
873
|
stream_state: MutableMapping[str, Any],
|
877
|
-
message_repository: Optional[MessageRepository] = None,
|
878
|
-
runtime_lookback_window: Optional[int] = None,
|
879
874
|
**kwargs: Any,
|
880
875
|
) -> ConcurrentCursor:
|
881
876
|
component_type = component_definition.get("type")
|
@@ -933,11 +928,6 @@ class ModelToComponentFactory:
|
|
933
928
|
if evaluated_lookback_window:
|
934
929
|
lookback_window = parse_duration(evaluated_lookback_window)
|
935
930
|
|
936
|
-
if runtime_lookback_window and lookback_window:
|
937
|
-
lookback_window = max(lookback_window, runtime_lookback_window)
|
938
|
-
elif runtime_lookback_window:
|
939
|
-
lookback_window = runtime_lookback_window
|
940
|
-
|
941
931
|
connector_state_converter: DateTimeStreamStateConverter
|
942
932
|
connector_state_converter = CustomFormatConcurrentStreamStateConverter(
|
943
933
|
datetime_format=datetime_format,
|
@@ -1016,7 +1006,7 @@ class ModelToComponentFactory:
|
|
1016
1006
|
stream_name=stream_name,
|
1017
1007
|
stream_namespace=stream_namespace,
|
1018
1008
|
stream_state=stream_state,
|
1019
|
-
message_repository=
|
1009
|
+
message_repository=self._message_repository,
|
1020
1010
|
connector_state_manager=state_manager,
|
1021
1011
|
connector_state_converter=connector_state_converter,
|
1022
1012
|
cursor_field=cursor_field,
|
@@ -1028,63 +1018,6 @@ class ModelToComponentFactory:
|
|
1028
1018
|
cursor_granularity=cursor_granularity,
|
1029
1019
|
)
|
1030
1020
|
|
1031
|
-
def create_concurrent_cursor_from_perpartition_cursor(
|
1032
|
-
self,
|
1033
|
-
state_manager: ConnectorStateManager,
|
1034
|
-
model_type: Type[BaseModel],
|
1035
|
-
component_definition: ComponentDefinition,
|
1036
|
-
stream_name: str,
|
1037
|
-
stream_namespace: Optional[str],
|
1038
|
-
config: Config,
|
1039
|
-
stream_state: MutableMapping[str, Any],
|
1040
|
-
partition_router,
|
1041
|
-
**kwargs: Any,
|
1042
|
-
) -> ConcurrentPerPartitionCursor:
|
1043
|
-
component_type = component_definition.get("type")
|
1044
|
-
if component_definition.get("type") != model_type.__name__:
|
1045
|
-
raise ValueError(
|
1046
|
-
f"Expected manifest component of type {model_type.__name__}, but received {component_type} instead"
|
1047
|
-
)
|
1048
|
-
|
1049
|
-
datetime_based_cursor_model = model_type.parse_obj(component_definition)
|
1050
|
-
|
1051
|
-
if not isinstance(datetime_based_cursor_model, DatetimeBasedCursorModel):
|
1052
|
-
raise ValueError(
|
1053
|
-
f"Expected {model_type.__name__} component, but received {datetime_based_cursor_model.__class__.__name__}"
|
1054
|
-
)
|
1055
|
-
|
1056
|
-
interpolated_cursor_field = InterpolatedString.create(
|
1057
|
-
datetime_based_cursor_model.cursor_field,
|
1058
|
-
parameters=datetime_based_cursor_model.parameters or {},
|
1059
|
-
)
|
1060
|
-
cursor_field = CursorField(interpolated_cursor_field.eval(config=config))
|
1061
|
-
|
1062
|
-
# Create the cursor factory
|
1063
|
-
cursor_factory = ConcurrentCursorFactory(
|
1064
|
-
partial(
|
1065
|
-
self.create_concurrent_cursor_from_datetime_based_cursor,
|
1066
|
-
state_manager=state_manager,
|
1067
|
-
model_type=model_type,
|
1068
|
-
component_definition=component_definition,
|
1069
|
-
stream_name=stream_name,
|
1070
|
-
stream_namespace=stream_namespace,
|
1071
|
-
config=config,
|
1072
|
-
message_repository=NoopMessageRepository(),
|
1073
|
-
)
|
1074
|
-
)
|
1075
|
-
|
1076
|
-
# Return the concurrent cursor and state converter
|
1077
|
-
return ConcurrentPerPartitionCursor(
|
1078
|
-
cursor_factory=cursor_factory,
|
1079
|
-
partition_router=partition_router,
|
1080
|
-
stream_name=stream_name,
|
1081
|
-
stream_namespace=stream_namespace,
|
1082
|
-
stream_state=stream_state,
|
1083
|
-
message_repository=self._message_repository, # type: ignore
|
1084
|
-
connector_state_manager=state_manager,
|
1085
|
-
cursor_field=cursor_field,
|
1086
|
-
)
|
1087
|
-
|
1088
1021
|
@staticmethod
|
1089
1022
|
def create_constant_backoff_strategy(
|
1090
1023
|
model: ConstantBackoffStrategyModel, config: Config, **kwargs: Any
|
@@ -1367,15 +1300,18 @@ class ModelToComponentFactory:
|
|
1367
1300
|
raise ValueError(
|
1368
1301
|
"Unsupported Slicer is used. PerPartitionWithGlobalCursor should be used here instead"
|
1369
1302
|
)
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1303
|
+
client_side_incremental_sync = {
|
1304
|
+
"date_time_based_cursor": self._create_component_from_model(
|
1305
|
+
model=model.incremental_sync, config=config
|
1306
|
+
),
|
1307
|
+
"substream_cursor": (
|
1308
|
+
combined_slicers
|
1309
|
+
if isinstance(
|
1310
|
+
combined_slicers, (PerPartitionWithGlobalCursor, GlobalSubstreamCursor)
|
1311
|
+
)
|
1312
|
+
else None
|
1313
|
+
),
|
1314
|
+
}
|
1379
1315
|
|
1380
1316
|
if model.incremental_sync and isinstance(model.incremental_sync, DatetimeBasedCursorModel):
|
1381
1317
|
cursor_model = model.incremental_sync
|
@@ -2191,7 +2127,7 @@ class ModelToComponentFactory:
|
|
2191
2127
|
if (
|
2192
2128
|
not isinstance(stream_slicer, DatetimeBasedCursor)
|
2193
2129
|
or type(stream_slicer) is not DatetimeBasedCursor
|
2194
|
-
)
|
2130
|
+
):
|
2195
2131
|
# Many of the custom component implementations of DatetimeBasedCursor override get_request_params() (or other methods).
|
2196
2132
|
# Because we're decoupling RequestOptionsProvider from the Cursor, custom components will eventually need to reimplement
|
2197
2133
|
# their own RequestOptionsProvider. However, right now the existing StreamSlicer/Cursor still can act as the SimpleRetriever's
|
@@ -2351,7 +2287,7 @@ class ModelToComponentFactory:
|
|
2351
2287
|
extractor=download_extractor,
|
2352
2288
|
name=name,
|
2353
2289
|
record_filter=None,
|
2354
|
-
transformations=
|
2290
|
+
transformations=transformations,
|
2355
2291
|
schema_normalization=TypeTransformer(TransformConfig.NoTransform),
|
2356
2292
|
config=config,
|
2357
2293
|
parameters={},
|
@@ -2388,6 +2324,16 @@ class ModelToComponentFactory:
|
|
2388
2324
|
if model.delete_requester
|
2389
2325
|
else None
|
2390
2326
|
)
|
2327
|
+
url_requester = (
|
2328
|
+
self._create_component_from_model(
|
2329
|
+
model=model.url_requester,
|
2330
|
+
decoder=decoder,
|
2331
|
+
config=config,
|
2332
|
+
name=f"job extract_url - {name}",
|
2333
|
+
)
|
2334
|
+
if model.url_requester
|
2335
|
+
else None
|
2336
|
+
)
|
2391
2337
|
status_extractor = self._create_component_from_model(
|
2392
2338
|
model=model.status_extractor, decoder=decoder, config=config, name=name
|
2393
2339
|
)
|
@@ -2398,6 +2344,7 @@ class ModelToComponentFactory:
|
|
2398
2344
|
creation_requester=creation_requester,
|
2399
2345
|
polling_requester=polling_requester,
|
2400
2346
|
download_retriever=download_retriever,
|
2347
|
+
url_requester=url_requester,
|
2401
2348
|
abort_requester=abort_requester,
|
2402
2349
|
delete_requester=delete_requester,
|
2403
2350
|
status_extractor=status_extractor,
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# AsyncHttpJobRepository sequence diagram
|
2
|
+
|
3
|
+
- Components marked as optional are not required and can be ignored.
|
4
|
+
- if `url_requester` is not provided, `urls_extractor` will get urls from the `polling_job_response`
|
5
|
+
- interpolation_context, e.g. `create_job_response` or `polling_job_response` can be obtained from stream_slice
|
6
|
+
|
7
|
+
|
8
|
+
```mermaid
|
9
|
+
---
|
10
|
+
title: AsyncHttpJobRepository Sequence Diagram
|
11
|
+
---
|
12
|
+
sequenceDiagram
|
13
|
+
participant AsyncHttpJobRepository as AsyncOrchestrator
|
14
|
+
participant CreationRequester as creation_requester
|
15
|
+
participant PollingRequester as polling_requester
|
16
|
+
participant UrlRequester as url_requester (Optional)
|
17
|
+
participant DownloadRetriever as download_retriever
|
18
|
+
participant AbortRequester as abort_requester (Optional)
|
19
|
+
participant DeleteRequester as delete_requester (Optional)
|
20
|
+
participant Reporting Server as Async Reporting Server
|
21
|
+
|
22
|
+
AsyncHttpJobRepository ->> CreationRequester: Initiate job creation
|
23
|
+
CreationRequester ->> Reporting Server: Create job request
|
24
|
+
Reporting Server -->> CreationRequester: Job ID response
|
25
|
+
CreationRequester -->> AsyncHttpJobRepository: Job ID
|
26
|
+
|
27
|
+
loop Poll for job status
|
28
|
+
AsyncHttpJobRepository ->> PollingRequester: Check job status
|
29
|
+
PollingRequester ->> Reporting Server: Status request (interpolation_context: `create_job_response`)
|
30
|
+
Reporting Server -->> PollingRequester: Status response
|
31
|
+
PollingRequester -->> AsyncHttpJobRepository: Job status
|
32
|
+
end
|
33
|
+
|
34
|
+
alt Status: Ready
|
35
|
+
AsyncHttpJobRepository ->> UrlRequester: Request download URLs (if applicable)
|
36
|
+
UrlRequester ->> Reporting Server: URL request (interpolation_context: `polling_job_response`)
|
37
|
+
Reporting Server -->> UrlRequester: Download URLs
|
38
|
+
UrlRequester -->> AsyncHttpJobRepository: Download URLs
|
39
|
+
|
40
|
+
AsyncHttpJobRepository ->> DownloadRetriever: Download reports
|
41
|
+
DownloadRetriever ->> Reporting Server: Retrieve report data (interpolation_context: `url`)
|
42
|
+
Reporting Server -->> DownloadRetriever: Report data
|
43
|
+
DownloadRetriever -->> AsyncHttpJobRepository: Report data
|
44
|
+
else Status: Failed
|
45
|
+
AsyncHttpJobRepository ->> AbortRequester: Send abort request
|
46
|
+
AbortRequester ->> Reporting Server: Abort job
|
47
|
+
Reporting Server -->> AbortRequester: Abort confirmation
|
48
|
+
AbortRequester -->> AsyncHttpJobRepository: Confirmation
|
49
|
+
end
|
50
|
+
|
51
|
+
AsyncHttpJobRepository ->> DeleteRequester: Send delete job request
|
52
|
+
DeleteRequester ->> Reporting Server: Delete job
|
53
|
+
Reporting Server -->> DeleteRequester: Deletion confirmation
|
54
|
+
DeleteRequester -->> AsyncHttpJobRepository: Confirmation
|
55
|
+
|
56
|
+
|
57
|
+
```
|
@@ -31,6 +31,10 @@ LOGGER = logging.getLogger("airbyte")
|
|
31
31
|
|
32
32
|
@dataclass
|
33
33
|
class AsyncHttpJobRepository(AsyncJobRepository):
|
34
|
+
"""
|
35
|
+
See Readme file for more details about flow.
|
36
|
+
"""
|
37
|
+
|
34
38
|
creation_requester: Requester
|
35
39
|
polling_requester: Requester
|
36
40
|
download_retriever: SimpleRetriever
|
@@ -44,6 +48,9 @@ class AsyncHttpJobRepository(AsyncJobRepository):
|
|
44
48
|
record_extractor: RecordExtractor = field(
|
45
49
|
init=False, repr=False, default_factory=lambda: ResponseToFileExtractor({})
|
46
50
|
)
|
51
|
+
url_requester: Optional[Requester] = (
|
52
|
+
None # use it in case polling_requester provides some <id> and extra request is needed to obtain list of urls to download from
|
53
|
+
)
|
47
54
|
|
48
55
|
def __post_init__(self) -> None:
|
49
56
|
self._create_job_response_by_id: Dict[str, Response] = {}
|
@@ -186,10 +193,13 @@ class AsyncHttpJobRepository(AsyncJobRepository):
|
|
186
193
|
|
187
194
|
"""
|
188
195
|
|
189
|
-
for url in self.
|
190
|
-
|
191
|
-
|
192
|
-
|
196
|
+
for url in self._get_download_url(job):
|
197
|
+
job_slice = job.job_parameters()
|
198
|
+
stream_slice = StreamSlice(
|
199
|
+
partition=job_slice.partition,
|
200
|
+
cursor_slice=job_slice.cursor_slice,
|
201
|
+
extra_fields={**job_slice.extra_fields, "url": url},
|
202
|
+
)
|
193
203
|
for message in self.download_retriever.read_records({}, stream_slice):
|
194
204
|
if isinstance(message, Record):
|
195
205
|
yield message.data
|
@@ -226,3 +236,22 @@ class AsyncHttpJobRepository(AsyncJobRepository):
|
|
226
236
|
cursor_slice={},
|
227
237
|
)
|
228
238
|
return stream_slice
|
239
|
+
|
240
|
+
def _get_download_url(self, job: AsyncJob) -> Iterable[str]:
|
241
|
+
if not self.url_requester:
|
242
|
+
url_response = self._polling_job_response_by_id[job.api_job_id()]
|
243
|
+
else:
|
244
|
+
stream_slice: StreamSlice = StreamSlice(
|
245
|
+
partition={
|
246
|
+
"polling_job_response": self._polling_job_response_by_id[job.api_job_id()]
|
247
|
+
},
|
248
|
+
cursor_slice={},
|
249
|
+
)
|
250
|
+
url_response = self.url_requester.send_request(stream_slice=stream_slice) # type: ignore # we expect url_requester to always be presented, otherwise raise an exception as we cannot proceed with the report
|
251
|
+
if not url_response:
|
252
|
+
raise AirbyteTracedException(
|
253
|
+
internal_message="Always expect a response or an exception from url_requester",
|
254
|
+
failure_type=FailureType.system_error,
|
255
|
+
)
|
256
|
+
|
257
|
+
yield from self.urls_extractor.extract_records(url_response) # type: ignore # we expect urls_extractor to always return list of strings
|
@@ -160,7 +160,7 @@ class SimpleRetriever(Retriever):
|
|
160
160
|
stream_slice,
|
161
161
|
next_page_token,
|
162
162
|
self._paginator.get_request_headers,
|
163
|
-
self.
|
163
|
+
self.stream_slicer.get_request_headers,
|
164
164
|
)
|
165
165
|
if isinstance(headers, str):
|
166
166
|
raise ValueError("Request headers cannot be a string")
|
@@ -23,7 +23,7 @@ classifiers = [
|
|
23
23
|
keywords = ["airbyte", "connector-development-kit", "cdk"]
|
24
24
|
|
25
25
|
# Python CDK uses dynamic versioning: https://github.com/mtkennerly/poetry-dynamic-versioning
|
26
|
-
version = "6.
|
26
|
+
version = "6.18.0" # Version will be calculated dynamically.
|
27
27
|
|
28
28
|
[tool.poetry-dynamic-versioning]
|
29
29
|
enable = false
|