airbyte-cdk 6.30.0.dev0__tar.gz → 6.31.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.30.0.dev0 → airbyte_cdk-6.31.1}/PKG-INFO +1 -1
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +4 -4
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +2 -1
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_stream.py +3 -1
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +26 -1
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +5 -5
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +6 -12
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +214 -56
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +144 -73
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/pyproject.toml +1 -1
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/LICENSE.txt +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/README.md +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -482,16 +482,16 @@ class AsyncJobOrchestrator:
|
|
482
482
|
and exception.failure_type == FailureType.config_error
|
483
483
|
)
|
484
484
|
|
485
|
-
def fetch_records(self,
|
485
|
+
def fetch_records(self, async_jobs: Iterable[AsyncJob]) -> Iterable[Mapping[str, Any]]:
|
486
486
|
"""
|
487
|
-
Fetches records from the given
|
487
|
+
Fetches records from the given jobs.
|
488
488
|
|
489
489
|
Args:
|
490
|
-
|
490
|
+
async_jobs Iterable[AsyncJob]: The list of AsyncJobs.
|
491
491
|
|
492
492
|
Yields:
|
493
493
|
Iterable[Mapping[str, Any]]: The fetched records from the jobs.
|
494
494
|
"""
|
495
|
-
for job in
|
495
|
+
for job in async_jobs:
|
496
496
|
yield from self._job_repository.fetch_records(job)
|
497
497
|
self._job_repository.delete(job)
|
@@ -19,6 +19,7 @@ from airbyte_cdk.sources.declarative.extractors import RecordSelector
|
|
19
19
|
from airbyte_cdk.sources.declarative.extractors.record_filter import (
|
20
20
|
ClientSideIncrementalRecordFilterDecorator,
|
21
21
|
)
|
22
|
+
from airbyte_cdk.sources.declarative.incremental import ConcurrentPerPartitionCursor
|
22
23
|
from airbyte_cdk.sources.declarative.incremental.datetime_based_cursor import DatetimeBasedCursor
|
23
24
|
from airbyte_cdk.sources.declarative.incremental.per_partition_with_global import (
|
24
25
|
PerPartitionWithGlobalCursor,
|
@@ -231,7 +232,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
231
232
|
):
|
232
233
|
cursor = declarative_stream.retriever.stream_slicer.stream_slicer
|
233
234
|
|
234
|
-
if not isinstance(cursor, ConcurrentCursor):
|
235
|
+
if not isinstance(cursor, ConcurrentCursor | ConcurrentPerPartitionCursor):
|
235
236
|
# This should never happen since we instantiate ConcurrentCursor in
|
236
237
|
# model_to_component_factory.py
|
237
238
|
raise ValueError(
|
{airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_stream.py
RENAMED
@@ -138,7 +138,9 @@ class DeclarativeStream(Stream):
|
|
138
138
|
"""
|
139
139
|
:param: stream_state We knowingly avoid using stream_state as we want cursors to manage their own state.
|
140
140
|
"""
|
141
|
-
if stream_slice is None or
|
141
|
+
if stream_slice is None or (
|
142
|
+
not isinstance(stream_slice, StreamSlice) and stream_slice == {}
|
143
|
+
):
|
142
144
|
# As the parameter is Optional, many would just call `read_records(sync_mode)` during testing without specifying the field
|
143
145
|
# As part of the declarative model without custom components, this should never happen as the CDK would wire up a
|
144
146
|
# SinglePartitionRouter that would create this StreamSlice properly
|
@@ -1656,7 +1656,7 @@ class ModelToComponentFactory:
|
|
1656
1656
|
) -> Optional[PartitionRouter]:
|
1657
1657
|
if (
|
1658
1658
|
hasattr(model, "partition_router")
|
1659
|
-
and isinstance(model, SimpleRetrieverModel)
|
1659
|
+
and isinstance(model, SimpleRetrieverModel | AsyncRetrieverModel)
|
1660
1660
|
and model.partition_router
|
1661
1661
|
):
|
1662
1662
|
stream_slicer_model = model.partition_router
|
@@ -1690,6 +1690,31 @@ class ModelToComponentFactory:
|
|
1690
1690
|
stream_slicer = self._build_stream_slicer_from_partition_router(model.retriever, config)
|
1691
1691
|
|
1692
1692
|
if model.incremental_sync and stream_slicer:
|
1693
|
+
if model.retriever.type == "AsyncRetriever":
|
1694
|
+
if model.incremental_sync.type != "DatetimeBasedCursor":
|
1695
|
+
# We are currently in a transition to the Concurrent CDK and AsyncRetriever can only work with the support or unordered slices (for example, when we trigger reports for January and February, the report in February can be completed first). Once we have support for custom concurrent cursor or have a new implementation available in the CDK, we can enable more cursors here.
|
1696
|
+
raise ValueError(
|
1697
|
+
"AsyncRetriever with cursor other than DatetimeBasedCursor is not supported yet"
|
1698
|
+
)
|
1699
|
+
if stream_slicer:
|
1700
|
+
return self.create_concurrent_cursor_from_perpartition_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
|
1701
|
+
state_manager=self._connector_state_manager,
|
1702
|
+
model_type=DatetimeBasedCursorModel,
|
1703
|
+
component_definition=model.incremental_sync.__dict__,
|
1704
|
+
stream_name=model.name or "",
|
1705
|
+
stream_namespace=None,
|
1706
|
+
config=config or {},
|
1707
|
+
stream_state={},
|
1708
|
+
partition_router=stream_slicer,
|
1709
|
+
)
|
1710
|
+
return self.create_concurrent_cursor_from_datetime_based_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
|
1711
|
+
model_type=DatetimeBasedCursorModel,
|
1712
|
+
component_definition=model.incremental_sync.__dict__,
|
1713
|
+
stream_name=model.name or "",
|
1714
|
+
stream_namespace=None,
|
1715
|
+
config=config or {},
|
1716
|
+
)
|
1717
|
+
|
1693
1718
|
incremental_sync_model = model.incremental_sync
|
1694
1719
|
if (
|
1695
1720
|
hasattr(incremental_sync_model, "global_substream_cursor")
|
@@ -4,9 +4,9 @@ from dataclasses import InitVar, dataclass, field
|
|
4
4
|
from typing import Any, Callable, Iterable, Mapping, Optional
|
5
5
|
|
6
6
|
from airbyte_cdk.models import FailureType
|
7
|
+
from airbyte_cdk.sources.declarative.async_job.job import AsyncJob
|
7
8
|
from airbyte_cdk.sources.declarative.async_job.job_orchestrator import (
|
8
9
|
AsyncJobOrchestrator,
|
9
|
-
AsyncPartition,
|
10
10
|
)
|
11
11
|
from airbyte_cdk.sources.declarative.partition_routers.single_partition_router import (
|
12
12
|
SinglePartitionRouter,
|
@@ -42,12 +42,12 @@ class AsyncJobPartitionRouter(StreamSlicer):
|
|
42
42
|
|
43
43
|
for completed_partition in self._job_orchestrator.create_and_get_completed_partitions():
|
44
44
|
yield StreamSlice(
|
45
|
-
partition=dict(completed_partition.stream_slice.partition)
|
46
|
-
| {"partition": completed_partition},
|
45
|
+
partition=dict(completed_partition.stream_slice.partition),
|
47
46
|
cursor_slice=completed_partition.stream_slice.cursor_slice,
|
47
|
+
extra_fields={"jobs": list(completed_partition.jobs)},
|
48
48
|
)
|
49
49
|
|
50
|
-
def fetch_records(self,
|
50
|
+
def fetch_records(self, async_jobs: Iterable[AsyncJob]) -> Iterable[Mapping[str, Any]]:
|
51
51
|
"""
|
52
52
|
This method of fetching records extends beyond what a PartitionRouter/StreamSlicer should
|
53
53
|
be responsible for. However, this was added in because the JobOrchestrator is required to
|
@@ -62,4 +62,4 @@ class AsyncJobPartitionRouter(StreamSlicer):
|
|
62
62
|
failure_type=FailureType.system_error,
|
63
63
|
)
|
64
64
|
|
65
|
-
return self._job_orchestrator.fetch_records(
|
65
|
+
return self._job_orchestrator.fetch_records(async_jobs=async_jobs)
|
@@ -6,7 +6,7 @@ from typing import Any, Iterable, Mapping, Optional
|
|
6
6
|
|
7
7
|
from typing_extensions import deprecated
|
8
8
|
|
9
|
-
from airbyte_cdk.
|
9
|
+
from airbyte_cdk.sources.declarative.async_job.job import AsyncJob
|
10
10
|
from airbyte_cdk.sources.declarative.async_job.job_orchestrator import AsyncPartition
|
11
11
|
from airbyte_cdk.sources.declarative.extractors.record_selector import RecordSelector
|
12
12
|
from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_router import (
|
@@ -16,7 +16,6 @@ from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
|
|
16
16
|
from airbyte_cdk.sources.source import ExperimentalClassWarning
|
17
17
|
from airbyte_cdk.sources.streams.core import StreamData
|
18
18
|
from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
|
19
|
-
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
20
19
|
|
21
20
|
|
22
21
|
@deprecated(
|
@@ -57,9 +56,9 @@ class AsyncRetriever(Retriever):
|
|
57
56
|
|
58
57
|
return self.state
|
59
58
|
|
60
|
-
def
|
59
|
+
def _validate_and_get_stream_slice_jobs(
|
61
60
|
self, stream_slice: Optional[StreamSlice] = None
|
62
|
-
) ->
|
61
|
+
) -> Iterable[AsyncJob]:
|
63
62
|
"""
|
64
63
|
Validates the stream_slice argument and returns the partition from it.
|
65
64
|
|
@@ -73,12 +72,7 @@ class AsyncRetriever(Retriever):
|
|
73
72
|
AirbyteTracedException: If the stream_slice is not an instance of StreamSlice or if the partition is not present in the stream_slice.
|
74
73
|
|
75
74
|
"""
|
76
|
-
|
77
|
-
raise AirbyteTracedException(
|
78
|
-
message="Invalid arguments to AsyncRetriever.read_records: stream_slice is not optional. Please contact Airbyte Support",
|
79
|
-
failure_type=FailureType.system_error,
|
80
|
-
)
|
81
|
-
return stream_slice["partition"] # type: ignore # stream_slice["partition"] has been added as an AsyncPartition as part of stream_slices
|
75
|
+
return stream_slice.extra_fields.get("jobs", []) if stream_slice else []
|
82
76
|
|
83
77
|
def stream_slices(self) -> Iterable[Optional[StreamSlice]]:
|
84
78
|
return self.stream_slicer.stream_slices()
|
@@ -89,8 +83,8 @@ class AsyncRetriever(Retriever):
|
|
89
83
|
stream_slice: Optional[StreamSlice] = None,
|
90
84
|
) -> Iterable[StreamData]:
|
91
85
|
stream_state: StreamState = self._get_stream_state()
|
92
|
-
|
93
|
-
records: Iterable[Mapping[str, Any]] = self.stream_slicer.fetch_records(
|
86
|
+
jobs: Iterable[AsyncJob] = self._validate_and_get_stream_slice_jobs(stream_slice)
|
87
|
+
records: Iterable[Mapping[str, Any]] = self.stream_slicer.fetch_records(jobs)
|
94
88
|
|
95
89
|
yield from self.record_selector.filter_and_transform(
|
96
90
|
all_data=records,
|
@@ -25,6 +25,13 @@ logger = logging.getLogger("airbyte")
|
|
25
25
|
_NOOP_MESSAGE_REPOSITORY = NoopMessageRepository()
|
26
26
|
|
27
27
|
|
28
|
+
class ResponseKeysMaxRecurtionReached(AirbyteTracedException):
|
29
|
+
"""
|
30
|
+
Raised when the max level of recursion is reached, when trying to
|
31
|
+
find-and-get the target key, during the `_make_handled_request`
|
32
|
+
"""
|
33
|
+
|
34
|
+
|
28
35
|
class AbstractOauth2Authenticator(AuthBase):
|
29
36
|
"""
|
30
37
|
Abstract class for an OAuth authenticators that implements the OAuth token refresh flow. The authenticator
|
@@ -53,15 +60,31 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
53
60
|
request.headers.update(self.get_auth_header())
|
54
61
|
return request
|
55
62
|
|
63
|
+
@property
|
64
|
+
def _is_access_token_flow(self) -> bool:
|
65
|
+
return self.get_token_refresh_endpoint() is None and self.access_token is not None
|
66
|
+
|
67
|
+
@property
|
68
|
+
def token_expiry_is_time_of_expiration(self) -> bool:
|
69
|
+
"""
|
70
|
+
Indicates that the Token Expiry returns the date until which the token will be valid, not the amount of time it will be valid.
|
71
|
+
"""
|
72
|
+
|
73
|
+
return False
|
74
|
+
|
75
|
+
@property
|
76
|
+
def token_expiry_date_format(self) -> Optional[str]:
|
77
|
+
"""
|
78
|
+
Format of the datetime; exists it if expires_in is returned as the expiration datetime instead of seconds until it expires
|
79
|
+
"""
|
80
|
+
|
81
|
+
return None
|
82
|
+
|
56
83
|
def get_auth_header(self) -> Mapping[str, Any]:
|
57
84
|
"""HTTP header to set on the requests"""
|
58
85
|
token = self.access_token if self._is_access_token_flow else self.get_access_token()
|
59
86
|
return {"Authorization": f"Bearer {token}"}
|
60
87
|
|
61
|
-
@property
|
62
|
-
def _is_access_token_flow(self) -> bool:
|
63
|
-
return self.get_token_refresh_endpoint() is None and self.access_token is not None
|
64
|
-
|
65
88
|
def get_access_token(self) -> str:
|
66
89
|
"""Returns the access token"""
|
67
90
|
if self.token_has_expired():
|
@@ -107,9 +130,39 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
107
130
|
headers = self.get_refresh_request_headers()
|
108
131
|
return headers if headers else None
|
109
132
|
|
133
|
+
def refresh_access_token(self) -> Tuple[str, Union[str, int]]:
|
134
|
+
"""
|
135
|
+
Returns the refresh token and its expiration datetime
|
136
|
+
|
137
|
+
:return: a tuple of (access_token, token_lifespan)
|
138
|
+
"""
|
139
|
+
response_json = self._make_handled_request()
|
140
|
+
self._ensure_access_token_in_response(response_json)
|
141
|
+
|
142
|
+
return (
|
143
|
+
self._extract_access_token(response_json),
|
144
|
+
self._extract_token_expiry_date(response_json),
|
145
|
+
)
|
146
|
+
|
147
|
+
# ----------------
|
148
|
+
# PRIVATE METHODS
|
149
|
+
# ----------------
|
150
|
+
|
110
151
|
def _wrap_refresh_token_exception(
|
111
152
|
self, exception: requests.exceptions.RequestException
|
112
153
|
) -> bool:
|
154
|
+
"""
|
155
|
+
Wraps and handles exceptions that occur during the refresh token process.
|
156
|
+
|
157
|
+
This method checks if the provided exception is related to a refresh token error
|
158
|
+
by examining the response status code and specific error content.
|
159
|
+
|
160
|
+
Args:
|
161
|
+
exception (requests.exceptions.RequestException): The exception raised during the request.
|
162
|
+
|
163
|
+
Returns:
|
164
|
+
bool: True if the exception is related to a refresh token error, False otherwise.
|
165
|
+
"""
|
113
166
|
try:
|
114
167
|
if exception.response is not None:
|
115
168
|
exception_content = exception.response.json()
|
@@ -131,7 +184,24 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
131
184
|
),
|
132
185
|
max_time=300,
|
133
186
|
)
|
134
|
-
def
|
187
|
+
def _make_handled_request(self) -> Any:
|
188
|
+
"""
|
189
|
+
Makes a handled HTTP request to refresh an OAuth token.
|
190
|
+
|
191
|
+
This method sends a POST request to the token refresh endpoint with the necessary
|
192
|
+
headers and body to obtain a new access token. It handles various exceptions that
|
193
|
+
may occur during the request and logs the response for troubleshooting purposes.
|
194
|
+
|
195
|
+
Returns:
|
196
|
+
Mapping[str, Any]: The JSON response from the token refresh endpoint.
|
197
|
+
|
198
|
+
Raises:
|
199
|
+
DefaultBackoffException: If the response status code is 429 (Too Many Requests)
|
200
|
+
or any 5xx server error.
|
201
|
+
AirbyteTracedException: If the refresh token is invalid or expired, prompting
|
202
|
+
re-authentication.
|
203
|
+
Exception: For any other exceptions that occur during the request.
|
204
|
+
"""
|
135
205
|
try:
|
136
206
|
response = requests.request(
|
137
207
|
method="POST",
|
@@ -139,22 +209,10 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
139
209
|
data=self.build_refresh_request_body(),
|
140
210
|
headers=self.build_refresh_request_headers(),
|
141
211
|
)
|
142
|
-
if
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
access_key = response_json.get(self.get_access_token_name())
|
147
|
-
if not access_key:
|
148
|
-
raise Exception(
|
149
|
-
"Token refresh API response was missing access token {self.get_access_token_name()}"
|
150
|
-
)
|
151
|
-
add_to_secrets(access_key)
|
152
|
-
self._log_response(response)
|
153
|
-
return response_json
|
154
|
-
else:
|
155
|
-
# log the response even if the request failed for troubleshooting purposes
|
156
|
-
self._log_response(response)
|
157
|
-
response.raise_for_status()
|
212
|
+
# log the response even if the request failed for troubleshooting purposes
|
213
|
+
self._log_response(response)
|
214
|
+
response.raise_for_status()
|
215
|
+
return response.json()
|
158
216
|
except requests.exceptions.RequestException as e:
|
159
217
|
if e.response is not None:
|
160
218
|
if e.response.status_code == 429 or e.response.status_code >= 500:
|
@@ -168,17 +226,34 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
168
226
|
except Exception as e:
|
169
227
|
raise Exception(f"Error while refreshing access token: {e}") from e
|
170
228
|
|
171
|
-
def
|
229
|
+
def _ensure_access_token_in_response(self, response_data: Mapping[str, Any]) -> None:
|
172
230
|
"""
|
173
|
-
|
231
|
+
Ensures that the access token is present in the response data.
|
174
232
|
|
175
|
-
|
176
|
-
|
177
|
-
|
233
|
+
This method attempts to extract the access token from the provided response data.
|
234
|
+
If the access token is not found, it raises an exception indicating that the token
|
235
|
+
refresh API response was missing the access token. If the access token is found,
|
236
|
+
it adds the token to the list of secrets to ensure it is replaced before logging
|
237
|
+
the response.
|
238
|
+
|
239
|
+
Args:
|
240
|
+
response_data (Mapping[str, Any]): The response data from which to extract the access token.
|
178
241
|
|
179
|
-
|
180
|
-
|
181
|
-
|
242
|
+
Raises:
|
243
|
+
Exception: If the access token is not found in the response data.
|
244
|
+
ResponseKeysMaxRecurtionReached: If the maximum recursion depth is reached while extracting the access token.
|
245
|
+
"""
|
246
|
+
try:
|
247
|
+
access_key = self._extract_access_token(response_data)
|
248
|
+
if not access_key:
|
249
|
+
raise Exception(
|
250
|
+
"Token refresh API response was missing access token {self.get_access_token_name()}"
|
251
|
+
)
|
252
|
+
# Add the access token to the list of secrets so it is replaced before logging the response
|
253
|
+
# An argument could be made to remove the prevous access key from the list of secrets, but unmasking values seems like a security incident waiting to happen...
|
254
|
+
add_to_secrets(access_key)
|
255
|
+
except ResponseKeysMaxRecurtionReached as e:
|
256
|
+
raise e
|
182
257
|
|
183
258
|
def _parse_token_expiration_date(self, value: Union[str, int]) -> AirbyteDateTime:
|
184
259
|
"""
|
@@ -206,22 +281,125 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
206
281
|
f"Invalid expires_in value: {value}. Expected number of seconds when no format specified."
|
207
282
|
)
|
208
283
|
|
209
|
-
|
210
|
-
def token_expiry_is_time_of_expiration(self) -> bool:
|
284
|
+
def _extract_access_token(self, response_data: Mapping[str, Any]) -> Any:
|
211
285
|
"""
|
212
|
-
|
286
|
+
Extracts the access token from the given response data.
|
287
|
+
|
288
|
+
Args:
|
289
|
+
response_data (Mapping[str, Any]): The response data from which to extract the access token.
|
290
|
+
|
291
|
+
Returns:
|
292
|
+
str: The extracted access token.
|
213
293
|
"""
|
294
|
+
return self._find_and_get_value_from_response(response_data, self.get_access_token_name())
|
214
295
|
|
215
|
-
|
296
|
+
def _extract_refresh_token(self, response_data: Mapping[str, Any]) -> Any:
|
297
|
+
"""
|
298
|
+
Extracts the refresh token from the given response data.
|
216
299
|
|
217
|
-
|
218
|
-
|
300
|
+
Args:
|
301
|
+
response_data (Mapping[str, Any]): The response data from which to extract the refresh token.
|
302
|
+
|
303
|
+
Returns:
|
304
|
+
str: The extracted refresh token.
|
219
305
|
"""
|
220
|
-
|
306
|
+
return self._find_and_get_value_from_response(response_data, self.get_refresh_token_name())
|
307
|
+
|
308
|
+
def _extract_token_expiry_date(self, response_data: Mapping[str, Any]) -> Any:
|
309
|
+
"""
|
310
|
+
Extracts the token_expiry_date, like `expires_in` or `expires_at`, etc from the given response data.
|
311
|
+
|
312
|
+
Args:
|
313
|
+
response_data (Mapping[str, Any]): The response data from which to extract the token_expiry_date.
|
314
|
+
|
315
|
+
Returns:
|
316
|
+
str: The extracted token_expiry_date.
|
221
317
|
"""
|
318
|
+
return self._find_and_get_value_from_response(response_data, self.get_expires_in_name())
|
319
|
+
|
320
|
+
def _find_and_get_value_from_response(
|
321
|
+
self,
|
322
|
+
response_data: Mapping[str, Any],
|
323
|
+
key_name: str,
|
324
|
+
max_depth: int = 5,
|
325
|
+
current_depth: int = 0,
|
326
|
+
) -> Any:
|
327
|
+
"""
|
328
|
+
Recursively searches for a specified key in a nested dictionary or list and returns its value if found.
|
329
|
+
|
330
|
+
Args:
|
331
|
+
response_data (Mapping[str, Any]): The response data to search through, which can be a dictionary or a list.
|
332
|
+
key_name (str): The key to search for in the response data.
|
333
|
+
max_depth (int, optional): The maximum depth to search for the key to avoid infinite recursion. Defaults to 5.
|
334
|
+
current_depth (int, optional): The current depth of the recursion. Defaults to 0.
|
335
|
+
|
336
|
+
Returns:
|
337
|
+
Any: The value associated with the specified key if found, otherwise None.
|
338
|
+
|
339
|
+
Raises:
|
340
|
+
AirbyteTracedException: If the maximum recursion depth is reached without finding the key.
|
341
|
+
"""
|
342
|
+
if current_depth > max_depth:
|
343
|
+
# this is needed to avoid an inf loop, possible with a very deep nesting observed.
|
344
|
+
message = f"The maximum level of recursion is reached. Couldn't find the speficied `{key_name}` in the response."
|
345
|
+
raise ResponseKeysMaxRecurtionReached(
|
346
|
+
internal_message=message, message=message, failure_type=FailureType.config_error
|
347
|
+
)
|
348
|
+
|
349
|
+
if isinstance(response_data, dict):
|
350
|
+
# get from the root level
|
351
|
+
if key_name in response_data:
|
352
|
+
return response_data[key_name]
|
353
|
+
|
354
|
+
# get from the nested object
|
355
|
+
for _, value in response_data.items():
|
356
|
+
result = self._find_and_get_value_from_response(
|
357
|
+
value, key_name, max_depth, current_depth + 1
|
358
|
+
)
|
359
|
+
if result is not None:
|
360
|
+
return result
|
361
|
+
|
362
|
+
# get from the nested array object
|
363
|
+
elif isinstance(response_data, list):
|
364
|
+
for item in response_data:
|
365
|
+
result = self._find_and_get_value_from_response(
|
366
|
+
item, key_name, max_depth, current_depth + 1
|
367
|
+
)
|
368
|
+
if result is not None:
|
369
|
+
return result
|
222
370
|
|
223
371
|
return None
|
224
372
|
|
373
|
+
@property
|
374
|
+
def _message_repository(self) -> Optional[MessageRepository]:
|
375
|
+
"""
|
376
|
+
The implementation can define a message_repository if it wants debugging logs for HTTP requests
|
377
|
+
"""
|
378
|
+
return _NOOP_MESSAGE_REPOSITORY
|
379
|
+
|
380
|
+
def _log_response(self, response: requests.Response) -> None:
|
381
|
+
"""
|
382
|
+
Logs the HTTP response using the message repository if it is available.
|
383
|
+
|
384
|
+
Args:
|
385
|
+
response (requests.Response): The HTTP response to log.
|
386
|
+
"""
|
387
|
+
if self._message_repository:
|
388
|
+
self._message_repository.log_message(
|
389
|
+
Level.DEBUG,
|
390
|
+
lambda: format_http_message(
|
391
|
+
response,
|
392
|
+
"Refresh token",
|
393
|
+
"Obtains access token",
|
394
|
+
self._NO_STREAM_NAME,
|
395
|
+
is_auxiliary=True,
|
396
|
+
),
|
397
|
+
)
|
398
|
+
|
399
|
+
# ----------------
|
400
|
+
# ABSTR METHODS
|
401
|
+
# ----------------
|
402
|
+
|
225
403
|
@abstractmethod
|
226
404
|
def get_token_refresh_endpoint(self) -> Optional[str]:
|
227
405
|
"""Returns the endpoint to refresh the access token"""
|
@@ -295,23 +473,3 @@ class AbstractOauth2Authenticator(AuthBase):
|
|
295
473
|
@abstractmethod
|
296
474
|
def access_token(self, value: str) -> str:
|
297
475
|
"""Setter for the access token"""
|
298
|
-
|
299
|
-
@property
|
300
|
-
def _message_repository(self) -> Optional[MessageRepository]:
|
301
|
-
"""
|
302
|
-
The implementation can define a message_repository if it wants debugging logs for HTTP requests
|
303
|
-
"""
|
304
|
-
return _NOOP_MESSAGE_REPOSITORY
|
305
|
-
|
306
|
-
def _log_response(self, response: requests.Response) -> None:
|
307
|
-
if self._message_repository:
|
308
|
-
self._message_repository.log_message(
|
309
|
-
Level.DEBUG,
|
310
|
-
lambda: format_http_message(
|
311
|
-
response,
|
312
|
-
"Refresh token",
|
313
|
-
"Obtains access token",
|
314
|
-
self._NO_STREAM_NAME,
|
315
|
-
is_auxiliary=True,
|
316
|
-
),
|
317
|
-
)
|