airbyte-cdk 6.9.1.dev3__tar.gz → 6.9.2__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.9.2/PKG-INFO +108 -0
- airbyte_cdk-6.9.2/README.md +34 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +30 -35
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +101 -3
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/jinja.py +36 -35
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +53 -2
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +95 -2
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +6 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +95 -21
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +2 -1
- airbyte_cdk-6.9.2/airbyte_cdk/sources/declarative/resolvers/__init__.py +13 -0
- airbyte_cdk-6.9.2/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +55 -0
- airbyte_cdk-6.9.2/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +106 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/http_client.py +15 -5
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/pyproject.toml +8 -8
- airbyte_cdk-6.9.1.dev3/PKG-INFO +0 -306
- airbyte_cdk-6.9.1.dev3/README.md +0 -229
- airbyte_cdk-6.9.1.dev3/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -81
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/LICENSE.txt +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: airbyte-cdk
|
3
|
+
Version: 6.9.2
|
4
|
+
Summary: A framework for writing Airbyte Connectors.
|
5
|
+
Home-page: https://airbyte.com
|
6
|
+
License: MIT
|
7
|
+
Keywords: airbyte,connector-development-kit,cdk
|
8
|
+
Author: Airbyte
|
9
|
+
Author-email: contact@airbyte.io
|
10
|
+
Requires-Python: >=3.10,<3.13
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
12
|
+
Classifier: Intended Audience :: Developers
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
18
|
+
Classifier: Topic :: Scientific/Engineering
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
20
|
+
Provides-Extra: file-based
|
21
|
+
Provides-Extra: sql
|
22
|
+
Provides-Extra: vector-db-based
|
23
|
+
Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
|
24
|
+
Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
|
25
|
+
Requires-Dist: airbyte-protocol-models-dataclasses (>=0.14,<0.15)
|
26
|
+
Requires-Dist: avro (>=1.11.2,<1.12.0) ; extra == "file-based"
|
27
|
+
Requires-Dist: backoff
|
28
|
+
Requires-Dist: cachetools
|
29
|
+
Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
|
30
|
+
Requires-Dist: cryptography (>=42.0.5,<44.0.0)
|
31
|
+
Requires-Dist: dpath (>=2.1.6,<3.0.0)
|
32
|
+
Requires-Dist: dunamai (>=1.22.0,<2.0.0)
|
33
|
+
Requires-Dist: fastavro (>=1.8.0,<1.9.0) ; extra == "file-based"
|
34
|
+
Requires-Dist: genson (==1.3.0)
|
35
|
+
Requires-Dist: isodate (>=0.6.1,<0.7.0)
|
36
|
+
Requires-Dist: jsonref (>=0.2,<0.3)
|
37
|
+
Requires-Dist: jsonschema (>=4.17.3,<4.18.0)
|
38
|
+
Requires-Dist: langchain (==0.1.16) ; extra == "vector-db-based"
|
39
|
+
Requires-Dist: langchain_core (==0.1.42)
|
40
|
+
Requires-Dist: markdown ; extra == "file-based"
|
41
|
+
Requires-Dist: nltk (==3.9.1)
|
42
|
+
Requires-Dist: numpy (<2)
|
43
|
+
Requires-Dist: openai[embeddings] (==0.27.9) ; extra == "vector-db-based"
|
44
|
+
Requires-Dist: orjson (>=3.10.7,<4.0.0)
|
45
|
+
Requires-Dist: pandas (==2.2.2)
|
46
|
+
Requires-Dist: pdf2image (==1.16.3) ; extra == "file-based"
|
47
|
+
Requires-Dist: pdfminer.six (==20221105) ; extra == "file-based"
|
48
|
+
Requires-Dist: pendulum (<3.0.0)
|
49
|
+
Requires-Dist: psutil (==6.1.0)
|
50
|
+
Requires-Dist: pyarrow (>=15.0.0,<15.1.0) ; extra == "file-based"
|
51
|
+
Requires-Dist: pydantic (>=2.7,<3.0)
|
52
|
+
Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
|
53
|
+
Requires-Dist: pyrate-limiter (>=3.1.0,<3.2.0)
|
54
|
+
Requires-Dist: pytesseract (==0.3.10) ; extra == "file-based"
|
55
|
+
Requires-Dist: python-calamine (==0.2.3) ; extra == "file-based"
|
56
|
+
Requires-Dist: python-dateutil
|
57
|
+
Requires-Dist: python-snappy (==0.7.3) ; extra == "file-based"
|
58
|
+
Requires-Dist: python-ulid (>=3.0.0,<4.0.0)
|
59
|
+
Requires-Dist: pytz (==2024.1)
|
60
|
+
Requires-Dist: rapidfuzz (>=3.10.1,<4.0.0)
|
61
|
+
Requires-Dist: requests
|
62
|
+
Requires-Dist: requests_cache
|
63
|
+
Requires-Dist: serpyco-rs (>=1.10.2,<2.0.0)
|
64
|
+
Requires-Dist: sqlalchemy (>=2.0,<3.0,!=2.0.36) ; extra == "sql"
|
65
|
+
Requires-Dist: tiktoken (==0.8.0) ; extra == "vector-db-based"
|
66
|
+
Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
|
67
|
+
Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
|
68
|
+
Requires-Dist: wcmatch (==10.0)
|
69
|
+
Requires-Dist: xmltodict (>=0.13.0,<0.14.0)
|
70
|
+
Project-URL: Documentation, https://docs.airbyte.io/
|
71
|
+
Project-URL: Repository, https://github.com/airbytehq/airbyte-python-cdk
|
72
|
+
Description-Content-Type: text/markdown
|
73
|
+
|
74
|
+
# Airbyte Python CDK and Low-Code CDK
|
75
|
+
|
76
|
+
Airbyte Python CDK is a framework for building Airbyte API Source Connectors. It provides a set of
|
77
|
+
classes and helpers that make it easy to build a connector against an HTTP API (REST, GraphQL, etc),
|
78
|
+
or a generic Python source connector.
|
79
|
+
|
80
|
+
## Building Connectors with the CDK
|
81
|
+
|
82
|
+
If you're looking to build a connector, we highly recommend that you first
|
83
|
+
[start with the Connector Builder](https://docs.airbyte.com/connector-development/connector-builder-ui/overview).
|
84
|
+
It should be enough for 90% connectors out there. For more flexible and complex connectors, use the
|
85
|
+
[low-code CDK and `SourceDeclarativeManifest`](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview).
|
86
|
+
|
87
|
+
For more information on building connectors, please see the [Connector Development](https://docs.airbyte.com/connector-development/) guide on [docs.airbyte.com](https://docs.airbyte.com).
|
88
|
+
|
89
|
+
## Python CDK Overview
|
90
|
+
|
91
|
+
Airbyte CDK code is within `airbyte_cdk` directory. Here's a high level overview of what's inside:
|
92
|
+
|
93
|
+
- `airbyte_cdk/connector_builder`. Internal wrapper that helps the Connector Builder platform run a declarative manifest (low-code connector). You should not use this code directly. If you need to run a `SourceDeclarativeManifest`, take a look at [`source-declarative-manifest`](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-declarative-manifest) connector implementation instead.
|
94
|
+
- `airbyte_cdk/cli/source_declarative_manifest`. This module defines the `source-declarative-manifest` (aka "SDM") connector execution logic and associated CLI.
|
95
|
+
- `airbyte_cdk/destinations`. Basic Destination connector support! If you're building a Destination connector in Python, try that. Some of our vector DB destinations like `destination-pinecone` are using that code.
|
96
|
+
- `airbyte_cdk/models` expose `airbyte_protocol.models` as a part of `airbyte_cdk` package.
|
97
|
+
- `airbyte_cdk/sources/concurrent_source` is the Concurrent CDK implementation. It supports reading data from streams concurrently per slice / partition, useful for connectors with high throughput and high number of records.
|
98
|
+
- `airbyte_cdk/sources/declarative` is the low-code CDK. It works on top of Airbyte Python CDK, but provides a declarative manifest language to define streams, operations, etc. This makes it easier to build connectors without writing Python code.
|
99
|
+
- `airbyte_cdk/sources/file_based` is the CDK for file-based sources. Examples include S3, Azure, GCS, etc.
|
100
|
+
|
101
|
+
## Contributing
|
102
|
+
|
103
|
+
For instructions on how to contribute, please see our [Contributing Guide](docs/CONTRIBUTING.md).
|
104
|
+
|
105
|
+
## Release Management
|
106
|
+
|
107
|
+
Please see the [Release Management](docs/RELEASES.md) guide for information on how to perform releases and pre-releases.
|
108
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Airbyte Python CDK and Low-Code CDK
|
2
|
+
|
3
|
+
Airbyte Python CDK is a framework for building Airbyte API Source Connectors. It provides a set of
|
4
|
+
classes and helpers that make it easy to build a connector against an HTTP API (REST, GraphQL, etc),
|
5
|
+
or a generic Python source connector.
|
6
|
+
|
7
|
+
## Building Connectors with the CDK
|
8
|
+
|
9
|
+
If you're looking to build a connector, we highly recommend that you first
|
10
|
+
[start with the Connector Builder](https://docs.airbyte.com/connector-development/connector-builder-ui/overview).
|
11
|
+
It should be enough for 90% connectors out there. For more flexible and complex connectors, use the
|
12
|
+
[low-code CDK and `SourceDeclarativeManifest`](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview).
|
13
|
+
|
14
|
+
For more information on building connectors, please see the [Connector Development](https://docs.airbyte.com/connector-development/) guide on [docs.airbyte.com](https://docs.airbyte.com).
|
15
|
+
|
16
|
+
## Python CDK Overview
|
17
|
+
|
18
|
+
Airbyte CDK code is within `airbyte_cdk` directory. Here's a high level overview of what's inside:
|
19
|
+
|
20
|
+
- `airbyte_cdk/connector_builder`. Internal wrapper that helps the Connector Builder platform run a declarative manifest (low-code connector). You should not use this code directly. If you need to run a `SourceDeclarativeManifest`, take a look at [`source-declarative-manifest`](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-declarative-manifest) connector implementation instead.
|
21
|
+
- `airbyte_cdk/cli/source_declarative_manifest`. This module defines the `source-declarative-manifest` (aka "SDM") connector execution logic and associated CLI.
|
22
|
+
- `airbyte_cdk/destinations`. Basic Destination connector support! If you're building a Destination connector in Python, try that. Some of our vector DB destinations like `destination-pinecone` are using that code.
|
23
|
+
- `airbyte_cdk/models` expose `airbyte_protocol.models` as a part of `airbyte_cdk` package.
|
24
|
+
- `airbyte_cdk/sources/concurrent_source` is the Concurrent CDK implementation. It supports reading data from streams concurrently per slice / partition, useful for connectors with high throughput and high number of records.
|
25
|
+
- `airbyte_cdk/sources/declarative` is the low-code CDK. It works on top of Airbyte Python CDK, but provides a declarative manifest language to define streams, operations, etc. This makes it easier to build connectors without writing Python code.
|
26
|
+
- `airbyte_cdk/sources/file_based` is the CDK for file-based sources. Examples include S3, Azure, GCS, etc.
|
27
|
+
|
28
|
+
## Contributing
|
29
|
+
|
30
|
+
For instructions on how to contribute, please see our [Contributing Guide](docs/CONTRIBUTING.md).
|
31
|
+
|
32
|
+
## Release Management
|
33
|
+
|
34
|
+
Please see the [Release Management](docs/RELEASES.md) guide for information on how to perform releases and pre-releases.
|
@@ -56,8 +56,9 @@ from airbyte_cdk.sources.types import Config, StreamState
|
|
56
56
|
|
57
57
|
|
58
58
|
class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
59
|
-
# By default, we defer to a value of
|
60
|
-
|
59
|
+
# By default, we defer to a value of 2. A value lower than than could cause a PartitionEnqueuer to be stuck in a state of deadlock
|
60
|
+
# because it has hit the limit of futures but not partition reader is consuming them.
|
61
|
+
_LOWEST_SAFE_CONCURRENCY_LEVEL = 2
|
61
62
|
|
62
63
|
def __init__(
|
63
64
|
self,
|
@@ -86,23 +87,10 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
86
87
|
component_factory=component_factory,
|
87
88
|
)
|
88
89
|
|
90
|
+
# todo: We could remove state from initialization. Now that streams are grouped during the read(), a source
|
91
|
+
# no longer needs to store the original incoming state. But maybe there's an edge case?
|
89
92
|
self._state = state
|
90
93
|
|
91
|
-
self._concurrent_streams: Optional[List[AbstractStream]]
|
92
|
-
self._synchronous_streams: Optional[List[Stream]]
|
93
|
-
|
94
|
-
# If the connector command was SPEC, there is no incoming config, and we cannot instantiate streams because
|
95
|
-
# they might depend on it. Ideally we want to have a static method on this class to get the spec without
|
96
|
-
# any other arguments, but the existing entrypoint.py isn't designed to support this. Just noting this
|
97
|
-
# for our future improvements to the CDK.
|
98
|
-
if config:
|
99
|
-
self._concurrent_streams, self._synchronous_streams = self._group_streams(
|
100
|
-
config=config or {}
|
101
|
-
)
|
102
|
-
else:
|
103
|
-
self._concurrent_streams = None
|
104
|
-
self._synchronous_streams = None
|
105
|
-
|
106
94
|
concurrency_level_from_manifest = self._source_config.get("concurrency_level")
|
107
95
|
if concurrency_level_from_manifest:
|
108
96
|
concurrency_level_component = self._constructor.create_component(
|
@@ -120,8 +108,8 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
120
108
|
concurrency_level // 2, 1
|
121
109
|
) # Partition_generation iterates using range based on this value. If this is floored to zero we end up in a dead lock during start up
|
122
110
|
else:
|
123
|
-
concurrency_level = self.
|
124
|
-
initial_number_of_partitions_to_generate = self.
|
111
|
+
concurrency_level = self._LOWEST_SAFE_CONCURRENCY_LEVEL
|
112
|
+
initial_number_of_partitions_to_generate = self._LOWEST_SAFE_CONCURRENCY_LEVEL // 2
|
125
113
|
|
126
114
|
self._concurrent_source = ConcurrentSource.create(
|
127
115
|
num_workers=concurrency_level,
|
@@ -136,17 +124,20 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
136
124
|
logger: logging.Logger,
|
137
125
|
config: Mapping[str, Any],
|
138
126
|
catalog: ConfiguredAirbyteCatalog,
|
139
|
-
state: Optional[
|
127
|
+
state: Optional[List[AirbyteStateMessage]] = None,
|
140
128
|
) -> Iterator[AirbyteMessage]:
|
141
|
-
|
142
|
-
|
143
|
-
|
129
|
+
concurrent_streams, _ = self._group_streams(config=config)
|
130
|
+
|
131
|
+
# ConcurrentReadProcessor pops streams that are finished being read so before syncing, the names of
|
132
|
+
# the concurrent streams must be saved so that they can be removed from the catalog before starting
|
133
|
+
# synchronous streams
|
134
|
+
if len(concurrent_streams) > 0:
|
144
135
|
concurrent_stream_names = set(
|
145
|
-
[concurrent_stream.name for concurrent_stream in
|
136
|
+
[concurrent_stream.name for concurrent_stream in concurrent_streams]
|
146
137
|
)
|
147
138
|
|
148
139
|
selected_concurrent_streams = self._select_streams(
|
149
|
-
streams=
|
140
|
+
streams=concurrent_streams, configured_catalog=catalog
|
150
141
|
)
|
151
142
|
# It would appear that passing in an empty set of streams causes an infinite loop in ConcurrentReadProcessor.
|
152
143
|
# This is also evident in concurrent_source_adapter.py so I'll leave this out of scope to fix for now
|
@@ -165,8 +156,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
165
156
|
yield from super().read(logger, config, filtered_catalog, state)
|
166
157
|
|
167
158
|
def discover(self, logger: logging.Logger, config: Mapping[str, Any]) -> AirbyteCatalog:
|
168
|
-
concurrent_streams = self.
|
169
|
-
synchronous_streams = self._synchronous_streams or []
|
159
|
+
concurrent_streams, synchronous_streams = self._group_streams(config=config)
|
170
160
|
return AirbyteCatalog(
|
171
161
|
streams=[
|
172
162
|
stream.as_airbyte_stream() for stream in concurrent_streams + synchronous_streams
|
@@ -192,9 +182,13 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
192
182
|
|
193
183
|
state_manager = ConnectorStateManager(state=self._state) # type: ignore # state is always in the form of List[AirbyteStateMessage]. The ConnectorStateManager should use generics, but this can be done later
|
194
184
|
|
195
|
-
|
196
|
-
|
197
|
-
|
185
|
+
# Combine streams and dynamic_streams. Note: both cannot be empty at the same time,
|
186
|
+
# and this is validated during the initialization of the source.
|
187
|
+
streams = self._stream_configs(self._source_config) + self._dynamic_stream_configs(
|
188
|
+
self._source_config, config
|
189
|
+
)
|
190
|
+
|
191
|
+
name_to_stream_mapping = {stream["name"]: stream for stream in streams}
|
198
192
|
|
199
193
|
for declarative_stream in self.streams(config=config):
|
200
194
|
# Some low-code sources use a combination of DeclarativeStream and regular Python streams. We can't inspect
|
@@ -202,7 +196,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
202
196
|
# so we need to treat them as synchronous
|
203
197
|
if (
|
204
198
|
isinstance(declarative_stream, DeclarativeStream)
|
205
|
-
and name_to_stream_mapping[declarative_stream.name]
|
199
|
+
and name_to_stream_mapping[declarative_stream.name]["retriever"]["type"]
|
206
200
|
== "SimpleRetriever"
|
207
201
|
):
|
208
202
|
incremental_sync_component_definition = name_to_stream_mapping[
|
@@ -211,7 +205,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
211
205
|
|
212
206
|
partition_router_component_definition = (
|
213
207
|
name_to_stream_mapping[declarative_stream.name]
|
214
|
-
.get("retriever")
|
208
|
+
.get("retriever", {})
|
215
209
|
.get("partition_router")
|
216
210
|
)
|
217
211
|
is_without_partition_router_or_cursor = not bool(
|
@@ -233,7 +227,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
233
227
|
cursor = self._constructor.create_concurrent_cursor_from_datetime_based_cursor(
|
234
228
|
state_manager=state_manager,
|
235
229
|
model_type=DatetimeBasedCursorModel,
|
236
|
-
component_definition=incremental_sync_component_definition,
|
230
|
+
component_definition=incremental_sync_component_definition, # type: ignore # Not None because of the if condition above
|
237
231
|
stream_name=declarative_stream.name,
|
238
232
|
stream_namespace=declarative_stream.namespace,
|
239
233
|
config=config or {},
|
@@ -316,10 +310,11 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
316
310
|
def _is_datetime_incremental_without_partition_routing(
|
317
311
|
self,
|
318
312
|
declarative_stream: DeclarativeStream,
|
319
|
-
incremental_sync_component_definition: Mapping[str, Any],
|
313
|
+
incremental_sync_component_definition: Mapping[str, Any] | None,
|
320
314
|
) -> bool:
|
321
315
|
return (
|
322
|
-
|
316
|
+
incremental_sync_component_definition is not None
|
317
|
+
and bool(incremental_sync_component_definition)
|
323
318
|
and incremental_sync_component_definition.get("type", "")
|
324
319
|
== DatetimeBasedCursorModel.__name__
|
325
320
|
and self._stream_supports_concurrent_partition_processing(
|
@@ -7,8 +7,12 @@ version: 1.0.0
|
|
7
7
|
required:
|
8
8
|
- type
|
9
9
|
- check
|
10
|
-
- streams
|
11
10
|
- version
|
11
|
+
anyOf:
|
12
|
+
- required:
|
13
|
+
- streams
|
14
|
+
- required:
|
15
|
+
- dynamic_streams
|
12
16
|
properties:
|
13
17
|
type:
|
14
18
|
type: string
|
@@ -19,6 +23,10 @@ properties:
|
|
19
23
|
type: array
|
20
24
|
items:
|
21
25
|
"$ref": "#/definitions/DeclarativeStream"
|
26
|
+
dynamic_streams:
|
27
|
+
type: array
|
28
|
+
items:
|
29
|
+
"$ref": "#/definitions/DynamicDeclarativeStream"
|
22
30
|
version:
|
23
31
|
type: string
|
24
32
|
description: The version of the Airbyte CDK used to build and test the source.
|
@@ -319,7 +327,7 @@ definitions:
|
|
319
327
|
additionalProperties: true
|
320
328
|
ConcurrencyLevel:
|
321
329
|
title: Concurrency Level
|
322
|
-
description: Defines the amount of parallelization for the streams that are being synced. The factor of parallelization is how many partitions or streams are synced at the same time. For example, with a concurrency_level of 10, ten streams or partitions of data will processed at the same time.
|
330
|
+
description: Defines the amount of parallelization for the streams that are being synced. The factor of parallelization is how many partitions or streams are synced at the same time. For example, with a concurrency_level of 10, ten streams or partitions of data will processed at the same time. Note that a value of 1 could create deadlock if a stream has a very high number of partitions.
|
323
331
|
type: object
|
324
332
|
required:
|
325
333
|
- default_concurrency
|
@@ -1321,7 +1329,7 @@ definitions:
|
|
1321
1329
|
type: array
|
1322
1330
|
items:
|
1323
1331
|
- type: string
|
1324
|
-
|
1332
|
+
interpolation_context:
|
1325
1333
|
- config
|
1326
1334
|
examples:
|
1327
1335
|
- ["data"]
|
@@ -2895,6 +2903,96 @@ definitions:
|
|
2895
2903
|
$parameters:
|
2896
2904
|
type: object
|
2897
2905
|
additionalProperties: true
|
2906
|
+
ComponentMappingDefinition:
|
2907
|
+
title: Component Mapping Definition
|
2908
|
+
description: (This component is experimental. Use at your own risk.) Specifies a mapping definition to update or add fields in a record or configuration. This allows dynamic mapping of data by interpolating values into the template based on provided contexts.
|
2909
|
+
type: object
|
2910
|
+
required:
|
2911
|
+
- type
|
2912
|
+
- field_path
|
2913
|
+
- value
|
2914
|
+
properties:
|
2915
|
+
type:
|
2916
|
+
type: string
|
2917
|
+
enum: [ComponentMappingDefinition]
|
2918
|
+
field_path:
|
2919
|
+
title: Field Path
|
2920
|
+
description: A list of potentially nested fields indicating the full path where value will be added or updated.
|
2921
|
+
type: array
|
2922
|
+
items:
|
2923
|
+
- type: string
|
2924
|
+
interpolation_context:
|
2925
|
+
- config
|
2926
|
+
- components_values
|
2927
|
+
- stream_template_config
|
2928
|
+
examples:
|
2929
|
+
- ["data"]
|
2930
|
+
- ["data", "records"]
|
2931
|
+
- ["data", "{{ parameters.name }}"]
|
2932
|
+
- ["data", "*", "record"]
|
2933
|
+
value:
|
2934
|
+
title: Value
|
2935
|
+
description: The dynamic or static value to assign to the key. Interpolated values can be used to dynamically determine the value during runtime.
|
2936
|
+
type: string
|
2937
|
+
interpolation_context:
|
2938
|
+
- config
|
2939
|
+
- stream_template_config
|
2940
|
+
- components_values
|
2941
|
+
examples:
|
2942
|
+
- "{{ components_values['updates'] }}"
|
2943
|
+
- "{{ components_values['MetaData']['LastUpdatedTime'] }}"
|
2944
|
+
- "{{ config['segment_id'] }}"
|
2945
|
+
value_type:
|
2946
|
+
title: Value Type
|
2947
|
+
description: The expected data type of the value. If omitted, the type will be inferred from the value provided.
|
2948
|
+
"$ref": "#/definitions/ValueType"
|
2949
|
+
$parameters:
|
2950
|
+
type: object
|
2951
|
+
additionalProperties: true
|
2952
|
+
HttpComponentsResolver:
|
2953
|
+
type: object
|
2954
|
+
description: (This component is experimental. Use at your own risk.) Component resolve and populates stream templates with components fetched via an HTTP retriever.
|
2955
|
+
properties:
|
2956
|
+
type:
|
2957
|
+
type: string
|
2958
|
+
enum: [HttpComponentsResolver]
|
2959
|
+
retriever:
|
2960
|
+
title: Retriever
|
2961
|
+
description: Component used to coordinate how records are extracted across stream slices and request pages.
|
2962
|
+
anyOf:
|
2963
|
+
- "$ref": "#/definitions/AsyncRetriever"
|
2964
|
+
- "$ref": "#/definitions/CustomRetriever"
|
2965
|
+
- "$ref": "#/definitions/SimpleRetriever"
|
2966
|
+
components_mapping:
|
2967
|
+
type: array
|
2968
|
+
items:
|
2969
|
+
"$ref": "#/definitions/ComponentMappingDefinition"
|
2970
|
+
$parameters:
|
2971
|
+
type: object
|
2972
|
+
additionalProperties: true
|
2973
|
+
required:
|
2974
|
+
- type
|
2975
|
+
- retriever
|
2976
|
+
- components_mapping
|
2977
|
+
DynamicDeclarativeStream:
|
2978
|
+
type: object
|
2979
|
+
description: (This component is experimental. Use at your own risk.) A component that described how will be created declarative streams based on stream template.
|
2980
|
+
properties:
|
2981
|
+
type:
|
2982
|
+
type: string
|
2983
|
+
enum: [DynamicDeclarativeStream]
|
2984
|
+
stream_template:
|
2985
|
+
title: Stream Template
|
2986
|
+
description: Reference to the stream template.
|
2987
|
+
"$ref": "#/definitions/DeclarativeStream"
|
2988
|
+
components_resolver:
|
2989
|
+
title: Components Resolver
|
2990
|
+
description: Component resolve and populates stream templates with components values.
|
2991
|
+
"$ref": "#/definitions/HttpComponentsResolver"
|
2992
|
+
required:
|
2993
|
+
- type
|
2994
|
+
- stream_template
|
2995
|
+
- components_resolver
|
2898
2996
|
interpolation:
|
2899
2997
|
variables:
|
2900
2998
|
- title: config
|
{airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/jinja.py
RENAMED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
import ast
|
6
6
|
from functools import cache
|
7
|
-
from typing import Any, Mapping, Optional, Tuple, Type
|
7
|
+
from typing import Any, Mapping, Optional, Set, Tuple, Type
|
8
8
|
|
9
9
|
from jinja2 import meta
|
10
10
|
from jinja2.environment import Template
|
@@ -27,7 +27,35 @@ class StreamPartitionAccessEnvironment(SandboxedEnvironment):
|
|
27
27
|
def is_safe_attribute(self, obj: Any, attr: str, value: Any) -> bool:
|
28
28
|
if attr in ["_partition"]:
|
29
29
|
return True
|
30
|
-
return super().is_safe_attribute(obj, attr, value)
|
30
|
+
return super().is_safe_attribute(obj, attr, value) # type: ignore # for some reason, mypy says 'Returning Any from function declared to return "bool"'
|
31
|
+
|
32
|
+
|
33
|
+
# These aliases are used to deprecate existing keywords without breaking all existing connectors.
|
34
|
+
_ALIASES = {
|
35
|
+
"stream_interval": "stream_slice", # Use stream_interval to access incremental_sync values
|
36
|
+
"stream_partition": "stream_slice", # Use stream_partition to access partition router's values
|
37
|
+
}
|
38
|
+
|
39
|
+
# These extensions are not installed so they're not currently a problem,
|
40
|
+
# but we're still explicitly removing them from the jinja context.
|
41
|
+
# At worst, this is documentation that we do NOT want to include these extensions because of the potential security risks
|
42
|
+
_RESTRICTED_EXTENSIONS = ["jinja2.ext.loopcontrols"] # Adds support for break continue in loops
|
43
|
+
|
44
|
+
# By default, these Python builtin functions are available in the Jinja context.
|
45
|
+
# We explicitly remove them because of the potential security risk.
|
46
|
+
# Please add a unit test to test_jinja.py when adding a restriction.
|
47
|
+
_RESTRICTED_BUILTIN_FUNCTIONS = [
|
48
|
+
"range"
|
49
|
+
] # The range function can cause very expensive computations
|
50
|
+
|
51
|
+
_ENVIRONMENT = StreamPartitionAccessEnvironment()
|
52
|
+
_ENVIRONMENT.filters.update(**filters)
|
53
|
+
_ENVIRONMENT.globals.update(**macros)
|
54
|
+
|
55
|
+
for extension in _RESTRICTED_EXTENSIONS:
|
56
|
+
_ENVIRONMENT.extensions.pop(extension, None)
|
57
|
+
for builtin in _RESTRICTED_BUILTIN_FUNCTIONS:
|
58
|
+
_ENVIRONMENT.globals.pop(builtin, None)
|
31
59
|
|
32
60
|
|
33
61
|
class JinjaInterpolation(Interpolation):
|
@@ -48,34 +76,6 @@ class JinjaInterpolation(Interpolation):
|
|
48
76
|
Additional information on jinja templating can be found at https://jinja.palletsprojects.com/en/3.1.x/templates/#
|
49
77
|
"""
|
50
78
|
|
51
|
-
# These aliases are used to deprecate existing keywords without breaking all existing connectors.
|
52
|
-
ALIASES = {
|
53
|
-
"stream_interval": "stream_slice", # Use stream_interval to access incremental_sync values
|
54
|
-
"stream_partition": "stream_slice", # Use stream_partition to access partition router's values
|
55
|
-
}
|
56
|
-
|
57
|
-
# These extensions are not installed so they're not currently a problem,
|
58
|
-
# but we're still explicitely removing them from the jinja context.
|
59
|
-
# At worst, this is documentation that we do NOT want to include these extensions because of the potential security risks
|
60
|
-
RESTRICTED_EXTENSIONS = ["jinja2.ext.loopcontrols"] # Adds support for break continue in loops
|
61
|
-
|
62
|
-
# By default, these Python builtin functions are available in the Jinja context.
|
63
|
-
# We explicitely remove them because of the potential security risk.
|
64
|
-
# Please add a unit test to test_jinja.py when adding a restriction.
|
65
|
-
RESTRICTED_BUILTIN_FUNCTIONS = [
|
66
|
-
"range"
|
67
|
-
] # The range function can cause very expensive computations
|
68
|
-
|
69
|
-
def __init__(self) -> None:
|
70
|
-
self._environment = StreamPartitionAccessEnvironment()
|
71
|
-
self._environment.filters.update(**filters)
|
72
|
-
self._environment.globals.update(**macros)
|
73
|
-
|
74
|
-
for extension in self.RESTRICTED_EXTENSIONS:
|
75
|
-
self._environment.extensions.pop(extension, None)
|
76
|
-
for builtin in self.RESTRICTED_BUILTIN_FUNCTIONS:
|
77
|
-
self._environment.globals.pop(builtin, None)
|
78
|
-
|
79
79
|
def eval(
|
80
80
|
self,
|
81
81
|
input_str: str,
|
@@ -86,7 +86,7 @@ class JinjaInterpolation(Interpolation):
|
|
86
86
|
) -> Any:
|
87
87
|
context = {"config": config, **additional_parameters}
|
88
88
|
|
89
|
-
for alias, equivalent in
|
89
|
+
for alias, equivalent in _ALIASES.items():
|
90
90
|
if alias in context:
|
91
91
|
# This is unexpected. We could ignore or log a warning, but failing loudly should result in fewer surprises
|
92
92
|
raise ValueError(
|
@@ -105,6 +105,7 @@ class JinjaInterpolation(Interpolation):
|
|
105
105
|
raise Exception(f"Expected a string, got {input_str}")
|
106
106
|
except UndefinedError:
|
107
107
|
pass
|
108
|
+
|
108
109
|
# If result is empty or resulted in an undefined error, evaluate and return the default string
|
109
110
|
return self._literal_eval(self._eval(default, context), valid_types)
|
110
111
|
|
@@ -132,16 +133,16 @@ class JinjaInterpolation(Interpolation):
|
|
132
133
|
return s
|
133
134
|
|
134
135
|
@cache
|
135
|
-
def _find_undeclared_variables(self, s: Optional[str]) ->
|
136
|
+
def _find_undeclared_variables(self, s: Optional[str]) -> Set[str]:
|
136
137
|
"""
|
137
138
|
Find undeclared variables and cache them
|
138
139
|
"""
|
139
|
-
ast =
|
140
|
+
ast = _ENVIRONMENT.parse(s) # type: ignore # parse is able to handle None
|
140
141
|
return meta.find_undeclared_variables(ast)
|
141
142
|
|
142
143
|
@cache
|
143
|
-
def _compile(self, s:
|
144
|
+
def _compile(self, s: str) -> Template:
|
144
145
|
"""
|
145
146
|
We must cache the Jinja Template ourselves because we're using `from_string` instead of a template loader
|
146
147
|
"""
|
147
|
-
return
|
148
|
+
return _ENVIRONMENT.from_string(s)
|
@@ -39,6 +39,7 @@ from airbyte_cdk.sources.declarative.parsers.manifest_reference_resolver import
|
|
39
39
|
from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
|
40
40
|
ModelToComponentFactory,
|
41
41
|
)
|
42
|
+
from airbyte_cdk.sources.declarative.resolvers import COMPONENTS_RESOLVER_TYPE_MAPPING
|
42
43
|
from airbyte_cdk.sources.message import MessageRepository
|
43
44
|
from airbyte_cdk.sources.streams.core import Stream
|
44
45
|
from airbyte_cdk.sources.types import ConnectionDefinition
|
@@ -120,7 +121,10 @@ class ManifestDeclarativeSource(DeclarativeSource):
|
|
120
121
|
self._emit_manifest_debug_message(
|
121
122
|
extra_args={"source_name": self.name, "parsed_config": json.dumps(self._source_config)}
|
122
123
|
)
|
123
|
-
|
124
|
+
|
125
|
+
stream_configs = self._stream_configs(self._source_config) + self._dynamic_stream_configs(
|
126
|
+
self._source_config, config
|
127
|
+
)
|
124
128
|
|
125
129
|
source_streams = [
|
126
130
|
self._constructor.create_component(
|
@@ -234,7 +238,8 @@ class ManifestDeclarativeSource(DeclarativeSource):
|
|
234
238
|
)
|
235
239
|
|
236
240
|
streams = self._source_config.get("streams")
|
237
|
-
|
241
|
+
dynamic_streams = self._source_config.get("dynamic_streams")
|
242
|
+
if not (streams or dynamic_streams):
|
238
243
|
raise ValidationError(
|
239
244
|
f"A valid manifest should have at least one stream defined. Got {streams}"
|
240
245
|
)
|
@@ -303,5 +308,51 @@ class ManifestDeclarativeSource(DeclarativeSource):
|
|
303
308
|
s["type"] = "DeclarativeStream"
|
304
309
|
return stream_configs
|
305
310
|
|
311
|
+
def _dynamic_stream_configs(
|
312
|
+
self, manifest: Mapping[str, Any], config: Mapping[str, Any]
|
313
|
+
) -> List[Dict[str, Any]]:
|
314
|
+
dynamic_stream_definitions: List[Dict[str, Any]] = manifest.get("dynamic_streams", [])
|
315
|
+
dynamic_stream_configs: List[Dict[str, Any]] = []
|
316
|
+
|
317
|
+
for dynamic_definition in dynamic_stream_definitions:
|
318
|
+
components_resolver_config = dynamic_definition["components_resolver"]
|
319
|
+
|
320
|
+
if not components_resolver_config:
|
321
|
+
raise ValueError(
|
322
|
+
f"Missing 'components_resolver' in dynamic definition: {dynamic_definition}"
|
323
|
+
)
|
324
|
+
|
325
|
+
resolver_type = components_resolver_config.get("type")
|
326
|
+
if not resolver_type:
|
327
|
+
raise ValueError(
|
328
|
+
f"Missing 'type' in components resolver configuration: {components_resolver_config}"
|
329
|
+
)
|
330
|
+
|
331
|
+
if resolver_type not in COMPONENTS_RESOLVER_TYPE_MAPPING:
|
332
|
+
raise ValueError(
|
333
|
+
f"Invalid components resolver type '{resolver_type}'. "
|
334
|
+
f"Expected one of {list(COMPONENTS_RESOLVER_TYPE_MAPPING.keys())}."
|
335
|
+
)
|
336
|
+
|
337
|
+
if "retriever" in components_resolver_config:
|
338
|
+
components_resolver_config["retriever"]["requester"]["use_cache"] = True
|
339
|
+
|
340
|
+
# Create a resolver for dynamic components based on type
|
341
|
+
components_resolver = self._constructor.create_component(
|
342
|
+
COMPONENTS_RESOLVER_TYPE_MAPPING[resolver_type], components_resolver_config, config
|
343
|
+
)
|
344
|
+
|
345
|
+
stream_template_config = dynamic_definition["stream_template"]
|
346
|
+
|
347
|
+
for dynamic_stream in components_resolver.resolve_components(
|
348
|
+
stream_template_config=stream_template_config
|
349
|
+
):
|
350
|
+
if "type" not in dynamic_stream:
|
351
|
+
dynamic_stream["type"] = "DeclarativeStream"
|
352
|
+
|
353
|
+
dynamic_stream_configs.append(dynamic_stream)
|
354
|
+
|
355
|
+
return dynamic_stream_configs
|
356
|
+
|
306
357
|
def _emit_manifest_debug_message(self, extra_args: dict[str, Any]) -> None:
|
307
358
|
self.logger.debug("declarative source created from manifest", extra=extra_args)
|