airbyte-cdk 6.38.5.dev0__tar.gz → 6.39.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.38.5.dev0 → airbyte_cdk-6.39.1}/PKG-INFO +3 -1
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +5 -1
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +13 -9
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +4 -1
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +10 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +4 -3
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +8 -3
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_based_source.py +24 -1
- airbyte_cdk-6.39.1/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +123 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -94
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +1 -4
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/identities_stream.py +7 -5
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +12 -3
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/pyproject.toml +68 -11
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/LICENSE.txt +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/README.md +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: airbyte-cdk
|
3
|
-
Version: 6.
|
3
|
+
Version: 6.39.1
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -43,6 +43,7 @@ Requires-Dist: nltk (==3.9.1)
|
|
43
43
|
Requires-Dist: numpy (<2)
|
44
44
|
Requires-Dist: openai[embeddings] (==0.27.9) ; extra == "vector-db-based"
|
45
45
|
Requires-Dist: orjson (>=3.10.7,<4.0.0)
|
46
|
+
Requires-Dist: packaging
|
46
47
|
Requires-Dist: pandas (==2.2.2)
|
47
48
|
Requires-Dist: pdf2image (==1.16.3) ; extra == "file-based"
|
48
49
|
Requires-Dist: pdfminer.six (==20221105) ; extra == "file-based"
|
@@ -63,6 +64,7 @@ Requires-Dist: requests_cache
|
|
63
64
|
Requires-Dist: serpyco-rs (>=1.10.2,<2.0.0)
|
64
65
|
Requires-Dist: sqlalchemy (>=2.0,<3.0,!=2.0.36) ; extra == "sql"
|
65
66
|
Requires-Dist: tiktoken (==0.8.0) ; extra == "vector-db-based"
|
67
|
+
Requires-Dist: typing-extensions
|
66
68
|
Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
|
67
69
|
Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
|
68
70
|
Requires-Dist: wcmatch (==10.0)
|
@@ -17,7 +17,11 @@ class ConcurrentJobLimitReached(Exception):
|
|
17
17
|
class JobTracker:
|
18
18
|
def __init__(self, limit: int):
|
19
19
|
self._jobs: Set[str] = set()
|
20
|
-
|
20
|
+
if limit < 1:
|
21
|
+
LOGGER.warning(
|
22
|
+
f"The `max_concurrent_async_job_count` property is less than 1: {limit}. Setting to 1. Please update the source manifest to set a valid value."
|
23
|
+
)
|
24
|
+
self._limit = 1 if limit < 1 else limit
|
21
25
|
self._lock = threading.Lock()
|
22
26
|
|
23
27
|
def try_to_get_intent(self) -> str:
|
@@ -42,6 +42,10 @@ properties:
|
|
42
42
|
"$ref": "#/definitions/ConcurrencyLevel"
|
43
43
|
api_budget:
|
44
44
|
"$ref": "#/definitions/HTTPAPIBudget"
|
45
|
+
max_concurrent_async_job_count:
|
46
|
+
title: Maximum Concurrent Asynchronous Jobs
|
47
|
+
description: Maximum number of concurrent asynchronous jobs to run. This property is only relevant for sources/streams that support asynchronous job execution through the AsyncRetriever (e.g. a report-based stream that initiates a job, polls the job status, and then fetches the job results). This is often set by the API's maximum number of concurrent jobs on the account level. Refer to the API's documentation for this information.
|
48
|
+
type: integer
|
45
49
|
metadata:
|
46
50
|
type: object
|
47
51
|
description: For internal Airbyte use only - DO NOT modify manually. Used by consumers of declarative manifests for storing related metadata.
|
@@ -109,7 +113,7 @@ definitions:
|
|
109
113
|
description: List of transformations (path and corresponding value) that will be added to the record.
|
110
114
|
type: array
|
111
115
|
items:
|
112
|
-
|
116
|
+
"$ref": "#/definitions/AddedFieldDefinition"
|
113
117
|
$parameters:
|
114
118
|
type: object
|
115
119
|
additionalProperties: true
|
@@ -1657,7 +1661,7 @@ definitions:
|
|
1657
1661
|
description: List of potentially nested fields describing the full path of the field to extract. Use "*" to extract all values from an array. See more info in the [docs](https://docs.airbyte.com/connector-development/config-based/understanding-the-yaml-file/record-selector).
|
1658
1662
|
type: array
|
1659
1663
|
items:
|
1660
|
-
|
1664
|
+
type: string
|
1661
1665
|
interpolation_context:
|
1662
1666
|
- config
|
1663
1667
|
examples:
|
@@ -2073,7 +2077,7 @@ definitions:
|
|
2073
2077
|
type: array
|
2074
2078
|
default: []
|
2075
2079
|
items:
|
2076
|
-
|
2080
|
+
type: string
|
2077
2081
|
interpolation_context:
|
2078
2082
|
- config
|
2079
2083
|
key_pointer:
|
@@ -2081,7 +2085,7 @@ definitions:
|
|
2081
2085
|
description: List of potentially nested fields describing the full path of the field key to extract.
|
2082
2086
|
type: array
|
2083
2087
|
items:
|
2084
|
-
|
2088
|
+
type: string
|
2085
2089
|
interpolation_context:
|
2086
2090
|
- config
|
2087
2091
|
type_pointer:
|
@@ -2089,13 +2093,13 @@ definitions:
|
|
2089
2093
|
description: List of potentially nested fields describing the full path of the field type to extract.
|
2090
2094
|
type: array
|
2091
2095
|
items:
|
2092
|
-
|
2096
|
+
type: string
|
2093
2097
|
interpolation_context:
|
2094
2098
|
- config
|
2095
2099
|
types_mapping:
|
2096
2100
|
type: array
|
2097
2101
|
items:
|
2098
|
-
|
2102
|
+
"$ref": "#/definitions/TypesMap"
|
2099
2103
|
$parameters:
|
2100
2104
|
type: object
|
2101
2105
|
additionalProperties: true
|
@@ -2251,7 +2255,7 @@ definitions:
|
|
2251
2255
|
description: A path to field that needs to be flattened.
|
2252
2256
|
type: array
|
2253
2257
|
items:
|
2254
|
-
|
2258
|
+
type: string
|
2255
2259
|
examples:
|
2256
2260
|
- ["data"]
|
2257
2261
|
- ["data", "*", "field"]
|
@@ -3526,7 +3530,7 @@ definitions:
|
|
3526
3530
|
description: A list of potentially nested fields indicating the full path where value will be added or updated.
|
3527
3531
|
type: array
|
3528
3532
|
items:
|
3529
|
-
|
3533
|
+
type: string
|
3530
3534
|
interpolation_context:
|
3531
3535
|
- config
|
3532
3536
|
- components_values
|
@@ -3602,7 +3606,7 @@ definitions:
|
|
3602
3606
|
description: A list of potentially nested fields indicating the full path in source config file where streams configs located.
|
3603
3607
|
type: array
|
3604
3608
|
items:
|
3605
|
-
|
3609
|
+
type: string
|
3606
3610
|
interpolation_context:
|
3607
3611
|
- parameters
|
3608
3612
|
examples:
|
@@ -93,7 +93,10 @@ class ManifestDeclarativeSource(DeclarativeSource):
|
|
93
93
|
self._constructor = (
|
94
94
|
component_factory
|
95
95
|
if component_factory
|
96
|
-
else ModelToComponentFactory(
|
96
|
+
else ModelToComponentFactory(
|
97
|
+
emit_connector_builder_messages,
|
98
|
+
max_concurrent_async_job_count=source_config.get("max_concurrent_async_job_count"),
|
99
|
+
)
|
97
100
|
)
|
98
101
|
self._message_repository = self._constructor.get_message_repository()
|
99
102
|
self._slice_logger: SliceLogger = (
|
@@ -1871,6 +1871,11 @@ class DeclarativeSource1(BaseModel):
|
|
1871
1871
|
spec: Optional[Spec] = None
|
1872
1872
|
concurrency_level: Optional[ConcurrencyLevel] = None
|
1873
1873
|
api_budget: Optional[HTTPAPIBudget] = None
|
1874
|
+
max_concurrent_async_job_count: Optional[int] = Field(
|
1875
|
+
None,
|
1876
|
+
description="Maximum number of concurrent asynchronous jobs to run. This property is only relevant for sources/streams that support asynchronous job execution through the AsyncRetriever (e.g. a report-based stream that initiates a job, polls the job status, and then fetches the job results). This is often set by the API's maximum number of concurrent jobs on the account level. Refer to the API's documentation for this information.",
|
1877
|
+
title="Maximum Concurrent Asynchronous Jobs",
|
1878
|
+
)
|
1874
1879
|
metadata: Optional[Dict[str, Any]] = Field(
|
1875
1880
|
None,
|
1876
1881
|
description="For internal Airbyte use only - DO NOT modify manually. Used by consumers of declarative manifests for storing related metadata.",
|
@@ -1898,6 +1903,11 @@ class DeclarativeSource2(BaseModel):
|
|
1898
1903
|
spec: Optional[Spec] = None
|
1899
1904
|
concurrency_level: Optional[ConcurrencyLevel] = None
|
1900
1905
|
api_budget: Optional[HTTPAPIBudget] = None
|
1906
|
+
max_concurrent_async_job_count: Optional[int] = Field(
|
1907
|
+
None,
|
1908
|
+
description="Maximum number of concurrent asynchronous jobs to run. This property is only relevant for sources/streams that support asynchronous job execution through the AsyncRetriever (e.g. a report-based stream that initiates a job, polls the job status, and then fetches the job results). This is often set by the API's maximum number of concurrent jobs on the account level. Refer to the API's documentation for this information.",
|
1909
|
+
title="Maximum Concurrent Asynchronous Jobs",
|
1910
|
+
)
|
1901
1911
|
metadata: Optional[Dict[str, Any]] = Field(
|
1902
1912
|
None,
|
1903
1913
|
description="For internal Airbyte use only - DO NOT modify manually. Used by consumers of declarative manifests for storing related metadata.",
|
@@ -503,7 +503,7 @@ from airbyte_cdk.sources.streams.concurrent.state_converters.incrementing_count_
|
|
503
503
|
IncrementingCountStreamStateConverter,
|
504
504
|
)
|
505
505
|
from airbyte_cdk.sources.streams.http.error_handlers.response_models import ResponseAction
|
506
|
-
from airbyte_cdk.sources.types import Config
|
506
|
+
from airbyte_cdk.sources.types import Config, ConnectionDefinition
|
507
507
|
from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer
|
508
508
|
|
509
509
|
ComponentDefinition = Mapping[str, Any]
|
@@ -527,6 +527,7 @@ class ModelToComponentFactory:
|
|
527
527
|
disable_resumable_full_refresh: bool = False,
|
528
528
|
message_repository: Optional[MessageRepository] = None,
|
529
529
|
connector_state_manager: Optional[ConnectorStateManager] = None,
|
530
|
+
max_concurrent_async_job_count: Optional[int] = None,
|
530
531
|
):
|
531
532
|
self._init_mappings()
|
532
533
|
self._limit_pages_fetched_per_slice = limit_pages_fetched_per_slice
|
@@ -540,6 +541,7 @@ class ModelToComponentFactory:
|
|
540
541
|
)
|
541
542
|
self._connector_state_manager = connector_state_manager or ConnectorStateManager()
|
542
543
|
self._api_budget: Optional[Union[APIBudget, HttpAPIBudget]] = None
|
544
|
+
self._job_tracker: JobTracker = JobTracker(max_concurrent_async_job_count or 1)
|
543
545
|
|
544
546
|
def _init_mappings(self) -> None:
|
545
547
|
self.PYDANTIC_MODEL_TO_CONSTRUCTOR: Mapping[Type[BaseModel], Callable[..., Any]] = {
|
@@ -2928,8 +2930,7 @@ class ModelToComponentFactory:
|
|
2928
2930
|
job_orchestrator_factory=lambda stream_slices: AsyncJobOrchestrator(
|
2929
2931
|
job_repository,
|
2930
2932
|
stream_slices,
|
2931
|
-
|
2932
|
-
# FIXME eventually make the number of concurrent jobs in the API configurable. Until then, we limit to 1
|
2933
|
+
self._job_tracker,
|
2933
2934
|
self._message_repository,
|
2934
2935
|
has_bulk_parent=False,
|
2935
2936
|
# FIXME work would need to be done here in order to detect if a stream as a parent stream that is bulk
|
@@ -132,7 +132,7 @@ class HttpRequester(Requester):
|
|
132
132
|
stream_slice=stream_slice,
|
133
133
|
next_page_token=next_page_token,
|
134
134
|
)
|
135
|
-
return
|
135
|
+
return str(self._url_base.eval(self.config, **interpolation_context))
|
136
136
|
|
137
137
|
def get_path(
|
138
138
|
self,
|
@@ -370,13 +370,18 @@ class HttpRequester(Requester):
|
|
370
370
|
Example:
|
371
371
|
1) _join_url("https://example.com/api/", "endpoint") >> 'https://example.com/api/endpoint'
|
372
372
|
2) _join_url("https://example.com/api", "/endpoint") >> 'https://example.com/api/endpoint'
|
373
|
-
3) _join_url("https://example.com/api/", "") >> 'https://example.com/api'
|
373
|
+
3) _join_url("https://example.com/api/", "") >> 'https://example.com/api/'
|
374
374
|
4) _join_url("https://example.com/api", None) >> 'https://example.com/api'
|
375
375
|
"""
|
376
376
|
|
377
377
|
# return a full-url if provided directly from interpolation context
|
378
378
|
if path == EmptyString or path is None:
|
379
|
-
return url_base
|
379
|
+
return url_base
|
380
|
+
else:
|
381
|
+
# since we didn't provide a full-url, the url_base might not have a trailing slash
|
382
|
+
# so we join the url_base and path correctly
|
383
|
+
if not url_base.endswith("/"):
|
384
|
+
url_base += "/"
|
380
385
|
|
381
386
|
return urljoin(url_base, path)
|
382
387
|
|
{airbyte_cdk-6.38.5.dev0 → airbyte_cdk-6.39.1}/airbyte_cdk/sources/file_based/file_based_source.py
RENAMED
@@ -48,6 +48,9 @@ from airbyte_cdk.sources.file_based.exceptions import (
|
|
48
48
|
FileBasedErrorsCollector,
|
49
49
|
FileBasedSourceError,
|
50
50
|
)
|
51
|
+
from airbyte_cdk.sources.file_based.file_based_stream_permissions_reader import (
|
52
|
+
AbstractFileBasedStreamPermissionsReader,
|
53
|
+
)
|
51
54
|
from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFileBasedStreamReader
|
52
55
|
from airbyte_cdk.sources.file_based.file_types import default_parsers
|
53
56
|
from airbyte_cdk.sources.file_based.file_types.file_type_parser import FileTypeParser
|
@@ -100,8 +103,10 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
100
103
|
cursor_cls: Type[
|
101
104
|
Union[AbstractConcurrentFileBasedCursor, AbstractFileBasedCursor]
|
102
105
|
] = FileBasedConcurrentCursor,
|
106
|
+
stream_permissions_reader: Optional[AbstractFileBasedStreamPermissionsReader] = None,
|
103
107
|
):
|
104
108
|
self.stream_reader = stream_reader
|
109
|
+
self.stream_permissions_reader = stream_permissions_reader
|
105
110
|
self.spec_class = spec_class
|
106
111
|
self.config = config
|
107
112
|
self.catalog = catalog
|
@@ -234,6 +239,8 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
234
239
|
try:
|
235
240
|
parsed_config = self._get_parsed_config(config)
|
236
241
|
self.stream_reader.config = parsed_config
|
242
|
+
if self.stream_permissions_reader:
|
243
|
+
self.stream_permissions_reader.config = parsed_config
|
237
244
|
streams: List[Stream] = []
|
238
245
|
for stream_config in parsed_config.streams:
|
239
246
|
# Like state_manager, `catalog_stream` may be None during `check`
|
@@ -337,9 +344,23 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
337
344
|
preserve_directory_structure=preserve_directory_structure(parsed_config),
|
338
345
|
)
|
339
346
|
|
347
|
+
def _ensure_permissions_reader_available(self) -> None:
|
348
|
+
"""
|
349
|
+
Validates that a stream permissions reader is available.
|
350
|
+
Raises a ValueError if the reader is not provided.
|
351
|
+
"""
|
352
|
+
if not self.stream_permissions_reader:
|
353
|
+
raise ValueError(
|
354
|
+
"Stream permissions reader is required for streams that use permissions transfer mode."
|
355
|
+
)
|
356
|
+
|
340
357
|
def _make_permissions_stream(
|
341
358
|
self, stream_config: FileBasedStreamConfig, cursor: Optional[AbstractFileBasedCursor]
|
342
359
|
) -> AbstractFileBasedStream:
|
360
|
+
"""
|
361
|
+
Creates a stream that reads permissions from files.
|
362
|
+
"""
|
363
|
+
self._ensure_permissions_reader_available()
|
343
364
|
return PermissionsFileBasedStream(
|
344
365
|
config=stream_config,
|
345
366
|
catalog_schema=self.stream_schemas.get(stream_config.name),
|
@@ -350,6 +371,7 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
350
371
|
validation_policy=self._validate_and_get_validation_policy(stream_config),
|
351
372
|
errors_collector=self.errors_collector,
|
352
373
|
cursor=cursor,
|
374
|
+
stream_permissions_reader=self.stream_permissions_reader, # type: ignore
|
353
375
|
)
|
354
376
|
|
355
377
|
def _make_file_based_stream(
|
@@ -370,9 +392,10 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
370
392
|
def _make_identities_stream(
|
371
393
|
self,
|
372
394
|
) -> Stream:
|
395
|
+
self._ensure_permissions_reader_available()
|
373
396
|
return FileIdentitiesStream(
|
374
397
|
catalog_schema=self.stream_schemas.get(FileIdentitiesStream.IDENTITIES_STREAM_NAME),
|
375
|
-
|
398
|
+
stream_permissions_reader=self.stream_permissions_reader, # type: ignore
|
376
399
|
discovery_policy=self.discovery_policy,
|
377
400
|
errors_collector=self.errors_collector,
|
378
401
|
)
|
@@ -0,0 +1,123 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
import logging
|
6
|
+
from abc import ABC, abstractmethod
|
7
|
+
from typing import Any, Dict, Iterable, Optional
|
8
|
+
|
9
|
+
from airbyte_cdk.sources.file_based import AbstractFileBasedSpec
|
10
|
+
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
|
11
|
+
|
12
|
+
|
13
|
+
class AbstractFileBasedStreamPermissionsReader(ABC):
|
14
|
+
"""
|
15
|
+
This class is responsible for reading file permissions and Identities from a source.
|
16
|
+
"""
|
17
|
+
|
18
|
+
def __init__(self) -> None:
|
19
|
+
self._config = None
|
20
|
+
|
21
|
+
@property
|
22
|
+
def config(self) -> Optional[AbstractFileBasedSpec]:
|
23
|
+
return self._config
|
24
|
+
|
25
|
+
@config.setter
|
26
|
+
@abstractmethod
|
27
|
+
def config(self, value: AbstractFileBasedSpec) -> None:
|
28
|
+
"""
|
29
|
+
FileBasedSource reads the config from disk and parses it, and once parsed, the source sets the config on its StreamReader.
|
30
|
+
|
31
|
+
Note: FileBasedSource only requires the keys defined in the abstract config, whereas concrete implementations of StreamReader
|
32
|
+
will require keys that (for example) allow it to authenticate with the 3rd party.
|
33
|
+
|
34
|
+
Therefore, concrete implementations of AbstractFileBasedStreamPermissionsReader's's config setter should assert that `value` is of the correct
|
35
|
+
config type for that type of StreamReader.
|
36
|
+
"""
|
37
|
+
...
|
38
|
+
|
39
|
+
@abstractmethod
|
40
|
+
def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger) -> Dict[str, Any]:
|
41
|
+
"""
|
42
|
+
This function should return the allow list for a given file, i.e. the list of all identities and their permission levels associated with it
|
43
|
+
|
44
|
+
e.g.
|
45
|
+
def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger):
|
46
|
+
api_conn = some_api.conn(credentials=SOME_CREDENTIALS)
|
47
|
+
result = api_conn.get_file_permissions_info(file.id)
|
48
|
+
return MyPermissionsModel(
|
49
|
+
id=result["id"],
|
50
|
+
access_control_list = result["access_control_list"],
|
51
|
+
is_public = result["is_public"],
|
52
|
+
).dict()
|
53
|
+
"""
|
54
|
+
...
|
55
|
+
|
56
|
+
@abstractmethod
|
57
|
+
def load_identity_groups(self, logger: logging.Logger) -> Iterable[Dict[str, Any]]:
|
58
|
+
"""
|
59
|
+
This function should return the Identities in a determined "space" or "domain" where the file metadata (ACLs) are fetched and ACLs items (Identities) exists.
|
60
|
+
|
61
|
+
e.g.
|
62
|
+
def load_identity_groups(self, logger: logging.Logger) -> Iterable[Dict[str, Any]]:
|
63
|
+
api_conn = some_api.conn(credentials=SOME_CREDENTIALS)
|
64
|
+
users_api = api_conn.users()
|
65
|
+
groups_api = api_conn.groups()
|
66
|
+
members_api = self.google_directory_service.members()
|
67
|
+
for user in users_api.list():
|
68
|
+
yield my_identity_model(id=user.id, name=user.name, email_address=user.email, type="user").dict()
|
69
|
+
for group in groups_api.list():
|
70
|
+
group_obj = my_identity_model(id=group.id, name=groups.name, email_address=user.email, type="group").dict()
|
71
|
+
for member in members_api.list(group=group):
|
72
|
+
group_obj.member_email_addresses = group_obj.member_email_addresses or []
|
73
|
+
group_obj.member_email_addresses.append(member.email)
|
74
|
+
yield group_obj.dict()
|
75
|
+
"""
|
76
|
+
...
|
77
|
+
|
78
|
+
@property
|
79
|
+
@abstractmethod
|
80
|
+
def file_permissions_schema(self) -> Dict[str, Any]:
|
81
|
+
"""
|
82
|
+
This function should return the permissions schema for file permissions stream.
|
83
|
+
|
84
|
+
e.g.
|
85
|
+
def file_permissions_schema(self) -> Dict[str, Any]:
|
86
|
+
# you can also follow the pattern we have for python connectors and have a json file and read from there e.g. schemas/identities.json
|
87
|
+
return {
|
88
|
+
"type": "object",
|
89
|
+
"properties": {
|
90
|
+
"id": { "type": "string" },
|
91
|
+
"file_path": { "type": "string" },
|
92
|
+
"access_control_list": {
|
93
|
+
"type": "array",
|
94
|
+
"items": { "type": "string" }
|
95
|
+
},
|
96
|
+
"publicly_accessible": { "type": "boolean" }
|
97
|
+
}
|
98
|
+
}
|
99
|
+
"""
|
100
|
+
...
|
101
|
+
|
102
|
+
@property
|
103
|
+
@abstractmethod
|
104
|
+
def identities_schema(self) -> Dict[str, Any]:
|
105
|
+
"""
|
106
|
+
This function should return the identities schema for file identity stream.
|
107
|
+
|
108
|
+
e.g.
|
109
|
+
def identities_schema(self) -> Dict[str, Any]:
|
110
|
+
# you can also follow the pattern we have for python connectors and have a json file and read from there e.g. schemas/identities.json
|
111
|
+
return {
|
112
|
+
"type": "object",
|
113
|
+
"properties": {
|
114
|
+
"id": { "type": "string" },
|
115
|
+
"remote_id": { "type": "string" },
|
116
|
+
"name": { "type": ["null", "string"] },
|
117
|
+
"email_address": { "type": ["null", "string"] },
|
118
|
+
"member_email_addresses": { "type": ["null", "array"] },
|
119
|
+
"type": { "type": "string" },
|
120
|
+
}
|
121
|
+
}
|
122
|
+
"""
|
123
|
+
...
|
@@ -184,97 +184,3 @@ class AbstractFileBasedStreamReader(ABC):
|
|
184
184
|
makedirs(path.dirname(local_file_path), exist_ok=True)
|
185
185
|
absolute_file_path = path.abspath(local_file_path)
|
186
186
|
return [file_relative_path, local_file_path, absolute_file_path]
|
187
|
-
|
188
|
-
@abstractmethod
|
189
|
-
def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger) -> Dict[str, Any]:
|
190
|
-
"""
|
191
|
-
This function should return the allow list for a given file, i.e. the list of all identities and their permission levels associated with it
|
192
|
-
|
193
|
-
e.g.
|
194
|
-
def get_file_acl_permissions(self, file: RemoteFile, logger: logging.Logger):
|
195
|
-
api_conn = some_api.conn(credentials=SOME_CREDENTIALS)
|
196
|
-
result = api_conn.get_file_permissions_info(file.id)
|
197
|
-
return MyPermissionsModel(
|
198
|
-
id=result["id"],
|
199
|
-
access_control_list = result["access_control_list"],
|
200
|
-
is_public = result["is_public"],
|
201
|
-
).dict()
|
202
|
-
"""
|
203
|
-
raise NotImplementedError(
|
204
|
-
f"{self.__class__.__name__} does not implement get_file_acl_permissions(). To support ACL permissions, implement this method and update file_permissions_schema."
|
205
|
-
)
|
206
|
-
|
207
|
-
@abstractmethod
|
208
|
-
def load_identity_groups(self, logger: logging.Logger) -> Iterable[Dict[str, Any]]:
|
209
|
-
"""
|
210
|
-
This function should return the Identities in a determined "space" or "domain" where the file metadata (ACLs) are fetched and ACLs items (Identities) exists.
|
211
|
-
|
212
|
-
e.g.
|
213
|
-
def load_identity_groups(self, logger: logging.Logger) -> Dict[str, Any]:
|
214
|
-
api_conn = some_api.conn(credentials=SOME_CREDENTIALS)
|
215
|
-
users_api = api_conn.users()
|
216
|
-
groups_api = api_conn.groups()
|
217
|
-
members_api = self.google_directory_service.members()
|
218
|
-
for user in users_api.list():
|
219
|
-
yield my_identity_model(id=user.id, name=user.name, email_address=user.email, type="user").dict()
|
220
|
-
for group in groups_api.list():
|
221
|
-
group_obj = my_identity_model(id=group.id, name=groups.name, email_address=user.email, type="group").dict()
|
222
|
-
for member in members_api.list(group=group):
|
223
|
-
group_obj.member_email_addresses = group_obj.member_email_addresses or []
|
224
|
-
group_obj.member_email_addresses.append(member.email)
|
225
|
-
yield group_obj.dict()
|
226
|
-
"""
|
227
|
-
raise NotImplementedError(
|
228
|
-
f"{self.__class__.__name__} does not implement load_identity_groups(). To support identities, implement this method and update identities_schema."
|
229
|
-
)
|
230
|
-
|
231
|
-
@property
|
232
|
-
@abstractmethod
|
233
|
-
def file_permissions_schema(self) -> Dict[str, Any]:
|
234
|
-
"""
|
235
|
-
This function should return the permissions schema for file permissions stream.
|
236
|
-
|
237
|
-
e.g.
|
238
|
-
def file_permissions_schema(self) -> Dict[str, Any]:
|
239
|
-
# you can also follow the patter we have for python connectors and have a json file and read from there e.g. schemas/identities.json
|
240
|
-
return {
|
241
|
-
"type": "object",
|
242
|
-
"properties": {
|
243
|
-
"id": { "type": "string" },
|
244
|
-
"file_path": { "type": "string" },
|
245
|
-
"access_control_list": {
|
246
|
-
"type": "array",
|
247
|
-
"items": { "type": "string" }
|
248
|
-
},
|
249
|
-
"publicly_accessible": { "type": "boolean" }
|
250
|
-
}
|
251
|
-
}
|
252
|
-
"""
|
253
|
-
raise NotImplementedError(
|
254
|
-
f"{self.__class__.__name__} does not implement file_permissions_schema, please return json schema for your permissions streams."
|
255
|
-
)
|
256
|
-
|
257
|
-
@property
|
258
|
-
@abstractmethod
|
259
|
-
def identities_schema(self) -> Dict[str, Any]:
|
260
|
-
"""
|
261
|
-
This function should return the identities schema for file identity stream.
|
262
|
-
|
263
|
-
e.g.
|
264
|
-
def identities_schema(self) -> Dict[str, Any]:
|
265
|
-
# you can also follow the patter we have for python connectors and have a json file and read from there e.g. schemas/identities.json
|
266
|
-
return {
|
267
|
-
"type": "object",
|
268
|
-
"properties": {
|
269
|
-
"id": { "type": "string" },
|
270
|
-
"remote_id": { "type": "string" },
|
271
|
-
"name": { "type": ["null", "string"] },
|
272
|
-
"email_address": { "type": ["null", "string"] },
|
273
|
-
"member_email_addresses": { "type": ["null", "array"] },
|
274
|
-
"type": { "type": "string" },
|
275
|
-
}
|
276
|
-
}
|
277
|
-
"""
|
278
|
-
raise NotImplementedError(
|
279
|
-
f"{self.__class__.__name__} does not implement identities_schema, please return json schema for your identities stream."
|
280
|
-
)
|
@@ -356,10 +356,7 @@ class DefaultFileBasedStream(AbstractFileBasedStream, IncrementalMixin):
|
|
356
356
|
if "null" not in v:
|
357
357
|
schema[k] = ["null"] + v
|
358
358
|
elif v != "null":
|
359
|
-
|
360
|
-
schema[k] = ["null", v]
|
361
|
-
else:
|
362
|
-
DefaultFileBasedStream._fill_nulls(v)
|
359
|
+
schema[k] = ["null", v]
|
363
360
|
else:
|
364
361
|
DefaultFileBasedStream._fill_nulls(v)
|
365
362
|
elif isinstance(schema, list):
|
@@ -8,7 +8,9 @@ from typing import Any, Dict, Iterable, Mapping, MutableMapping, Optional
|
|
8
8
|
from airbyte_cdk.sources.file_based.config.file_based_stream_config import PrimaryKeyType
|
9
9
|
from airbyte_cdk.sources.file_based.discovery_policy import AbstractDiscoveryPolicy
|
10
10
|
from airbyte_cdk.sources.file_based.exceptions import FileBasedErrorsCollector
|
11
|
-
from airbyte_cdk.sources.file_based.
|
11
|
+
from airbyte_cdk.sources.file_based.file_based_stream_permissions_reader import (
|
12
|
+
AbstractFileBasedStreamPermissionsReader,
|
13
|
+
)
|
12
14
|
from airbyte_cdk.sources.streams.core import JsonSchema
|
13
15
|
from airbyte_cdk.sources.streams.permissions.identities_stream import IdentitiesStream
|
14
16
|
|
@@ -24,13 +26,13 @@ class FileIdentitiesStream(IdentitiesStream):
|
|
24
26
|
def __init__(
|
25
27
|
self,
|
26
28
|
catalog_schema: Optional[Mapping[str, Any]],
|
27
|
-
|
29
|
+
stream_permissions_reader: AbstractFileBasedStreamPermissionsReader,
|
28
30
|
discovery_policy: AbstractDiscoveryPolicy,
|
29
31
|
errors_collector: FileBasedErrorsCollector,
|
30
32
|
) -> None:
|
31
33
|
super().__init__()
|
32
34
|
self.catalog_schema = catalog_schema
|
33
|
-
self.
|
35
|
+
self.stream_permissions_reader = stream_permissions_reader
|
34
36
|
self._discovery_policy = discovery_policy
|
35
37
|
self.errors_collector = errors_collector
|
36
38
|
self._cursor: MutableMapping[str, Any] = {}
|
@@ -40,8 +42,8 @@ class FileIdentitiesStream(IdentitiesStream):
|
|
40
42
|
return None
|
41
43
|
|
42
44
|
def load_identity_groups(self) -> Iterable[Dict[str, Any]]:
|
43
|
-
return self.
|
45
|
+
return self.stream_permissions_reader.load_identity_groups(logger=self.logger)
|
44
46
|
|
45
47
|
@cache
|
46
48
|
def get_json_schema(self) -> JsonSchema:
|
47
|
-
return self.
|
49
|
+
return self.stream_permissions_reader.identities_schema
|
@@ -7,6 +7,9 @@ from typing import Any, Dict, Iterable
|
|
7
7
|
|
8
8
|
from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, Level
|
9
9
|
from airbyte_cdk.models import Type as MessageType
|
10
|
+
from airbyte_cdk.sources.file_based.file_based_stream_permissions_reader import (
|
11
|
+
AbstractFileBasedStreamPermissionsReader,
|
12
|
+
)
|
10
13
|
from airbyte_cdk.sources.file_based.stream import DefaultFileBasedStream
|
11
14
|
from airbyte_cdk.sources.file_based.types import StreamSlice
|
12
15
|
from airbyte_cdk.sources.streams.core import JsonSchema
|
@@ -26,10 +29,16 @@ class PermissionsFileBasedStream(DefaultFileBasedStream):
|
|
26
29
|
and schema definition, while this class handles the streaming interface.
|
27
30
|
"""
|
28
31
|
|
32
|
+
def __init__(
|
33
|
+
self, stream_permissions_reader: AbstractFileBasedStreamPermissionsReader, **kwargs: Any
|
34
|
+
):
|
35
|
+
super().__init__(**kwargs)
|
36
|
+
self.stream_permissions_reader = stream_permissions_reader
|
37
|
+
|
29
38
|
def _filter_schema_invalid_properties(
|
30
39
|
self, configured_catalog_json_schema: Dict[str, Any]
|
31
40
|
) -> Dict[str, Any]:
|
32
|
-
return self.
|
41
|
+
return self.stream_permissions_reader.file_permissions_schema
|
33
42
|
|
34
43
|
def read_records_from_slice(self, stream_slice: StreamSlice) -> Iterable[AirbyteMessage]:
|
35
44
|
"""
|
@@ -40,7 +49,7 @@ class PermissionsFileBasedStream(DefaultFileBasedStream):
|
|
40
49
|
no_permissions = False
|
41
50
|
file_datetime_string = file.last_modified.strftime(self.DATE_TIME_FORMAT)
|
42
51
|
try:
|
43
|
-
permissions_record = self.
|
52
|
+
permissions_record = self.stream_permissions_reader.get_file_acl_permissions(
|
44
53
|
file, logger=self.logger
|
45
54
|
)
|
46
55
|
if not permissions_record:
|
@@ -82,4 +91,4 @@ class PermissionsFileBasedStream(DefaultFileBasedStream):
|
|
82
91
|
Returns:
|
83
92
|
The file permissions schema that defines the structure of permission records
|
84
93
|
"""
|
85
|
-
return self.
|
94
|
+
return self.stream_permissions_reader.file_permissions_schema
|