airbyte-cdk 6.45.3__tar.gz → 6.45.4.post13.dev14543731901__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.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/PKG-INFO +3 -2
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/models/__init__.py +1 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/models/airbyte_protocol.py +1 -3
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +1 -1
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/oauth.py +2 -2
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +8 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +36 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/record_selector.py +6 -1
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +31 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +65 -3
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +10 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/sources/declarative/retrievers/file_uploader.py +93 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +9 -4
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +41 -16
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/sources/file_based/file_record_data.py +23 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +8 -15
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/schema_helpers.py +11 -1
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +3 -12
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +15 -38
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +1 -3
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/default_stream.py +3 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +28 -11
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +4 -27
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/types.py +11 -2
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/sources/utils/files_directory.py +15 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/record_helper.py +8 -8
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/entrypoint_wrapper.py +4 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/mock_http/response_builder.py +8 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/__init__.py +46 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/_job_runner.py +159 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/connector_base.py +148 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/declarative_sources.py +92 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/destination_base.py +16 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/models/__init__.py +7 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/models/scenario.py +74 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/pytest_hooks.py +61 -0
- airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/test/standard_tests/source_base.py +140 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/pyproject.toml +7 -2
- airbyte_cdk-6.45.3/airbyte_cdk/models/file_transfer_record_message.py +0 -13
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/LICENSE.txt +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/README.md +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.45.3 → airbyte_cdk-6.45.4.post13.dev14543731901}/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.45.
|
3
|
+
Version: 6.45.4.post13.dev14543731901
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -22,10 +22,11 @@ Provides-Extra: sql
|
|
22
22
|
Provides-Extra: vector-db-based
|
23
23
|
Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
|
24
24
|
Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
|
25
|
-
Requires-Dist: airbyte-protocol-models-dataclasses (>=0.
|
25
|
+
Requires-Dist: airbyte-protocol-models-dataclasses (>=0.15,<0.16)
|
26
26
|
Requires-Dist: anyascii (>=0.3.2,<0.4.0)
|
27
27
|
Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
|
28
28
|
Requires-Dist: backoff
|
29
|
+
Requires-Dist: boltons (>=25.0.0,<26.0.0)
|
29
30
|
Requires-Dist: cachetools
|
30
31
|
Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
|
31
32
|
Requires-Dist: cryptography (>=44.0.0,<45.0.0)
|
@@ -8,8 +8,6 @@ from typing import Annotated, Any, Dict, List, Mapping, Optional, Union
|
|
8
8
|
from airbyte_protocol_dataclasses.models import * # noqa: F403 # Allow '*'
|
9
9
|
from serpyco_rs.metadata import Alias
|
10
10
|
|
11
|
-
from airbyte_cdk.models.file_transfer_record_message import AirbyteFileTransferRecordMessage
|
12
|
-
|
13
11
|
# ruff: noqa: F405 # ignore fuzzy import issues with 'import *'
|
14
12
|
|
15
13
|
|
@@ -84,7 +82,7 @@ class AirbyteMessage:
|
|
84
82
|
spec: Optional[ConnectorSpecification] = None # type: ignore [name-defined]
|
85
83
|
connectionStatus: Optional[AirbyteConnectionStatus] = None # type: ignore [name-defined]
|
86
84
|
catalog: Optional[AirbyteCatalog] = None # type: ignore [name-defined]
|
87
|
-
record: Optional[
|
85
|
+
record: Optional[AirbyteRecordMessage] = None # type: ignore [name-defined]
|
88
86
|
state: Optional[AirbyteStateMessage] = None
|
89
87
|
trace: Optional[AirbyteTraceMessage] = None # type: ignore [name-defined]
|
90
88
|
control: Optional[AirbyteControlMessage] = None # type: ignore [name-defined]
|
@@ -149,7 +149,7 @@ class ConcurrentReadProcessor:
|
|
149
149
|
message = stream_data_to_airbyte_message(
|
150
150
|
stream_name=record.stream_name,
|
151
151
|
data_or_message=record.data,
|
152
|
-
|
152
|
+
file_reference=record.file_reference,
|
153
153
|
)
|
154
154
|
stream = self._stream_name_to_instance[record.stream_name]
|
155
155
|
|
@@ -239,8 +239,8 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
|
|
239
239
|
def _has_access_token_been_initialized(self) -> bool:
|
240
240
|
return self._access_token is not None
|
241
241
|
|
242
|
-
def set_token_expiry_date(self, value:
|
243
|
-
self._token_expiry_date =
|
242
|
+
def set_token_expiry_date(self, value: AirbyteDateTime) -> None:
|
243
|
+
self._token_expiry_date = value
|
244
244
|
|
245
245
|
def get_assertion_name(self) -> str:
|
246
246
|
return self.assertion_name
|
@@ -25,6 +25,7 @@ from airbyte_cdk.sources.declarative.incremental.per_partition_with_global impor
|
|
25
25
|
PerPartitionWithGlobalCursor,
|
26
26
|
)
|
27
27
|
from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource
|
28
|
+
from airbyte_cdk.sources.declarative.models import FileUploader
|
28
29
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
29
30
|
ConcurrencyLevel as ConcurrencyLevelModel,
|
30
31
|
)
|
@@ -206,6 +207,10 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
206
207
|
# these legacy Python streams the way we do low-code streams to determine if they are concurrent compatible,
|
207
208
|
# so we need to treat them as synchronous
|
208
209
|
|
210
|
+
supports_file_transfer = (
|
211
|
+
"file_uploader" in name_to_stream_mapping[declarative_stream.name]
|
212
|
+
)
|
213
|
+
|
209
214
|
if (
|
210
215
|
isinstance(declarative_stream, DeclarativeStream)
|
211
216
|
and name_to_stream_mapping[declarative_stream.name]["type"]
|
@@ -322,6 +327,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
322
327
|
else None,
|
323
328
|
logger=self.logger,
|
324
329
|
cursor=cursor,
|
330
|
+
supports_file_transfer=supports_file_transfer,
|
325
331
|
)
|
326
332
|
)
|
327
333
|
elif (
|
@@ -353,6 +359,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
353
359
|
cursor_field=None,
|
354
360
|
logger=self.logger,
|
355
361
|
cursor=final_state_cursor,
|
362
|
+
supports_file_transfer=supports_file_transfer,
|
356
363
|
)
|
357
364
|
)
|
358
365
|
elif (
|
@@ -406,6 +413,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
|
|
406
413
|
cursor_field=perpartition_cursor.cursor_field.cursor_field_key,
|
407
414
|
logger=self.logger,
|
408
415
|
cursor=perpartition_cursor,
|
416
|
+
supports_file_transfer=supports_file_transfer,
|
409
417
|
)
|
410
418
|
)
|
411
419
|
else:
|
@@ -1448,6 +1448,42 @@ definitions:
|
|
1448
1448
|
- "$ref": "#/definitions/LegacyToPerPartitionStateMigration"
|
1449
1449
|
- "$ref": "#/definitions/CustomStateMigration"
|
1450
1450
|
default: []
|
1451
|
+
file_uploader:
|
1452
|
+
title: File Uploader
|
1453
|
+
description: (experimental) Describes how to fetch a file
|
1454
|
+
type: object
|
1455
|
+
required:
|
1456
|
+
- type
|
1457
|
+
- requester
|
1458
|
+
- download_target_extractor
|
1459
|
+
properties:
|
1460
|
+
type:
|
1461
|
+
type: string
|
1462
|
+
enum: [ FileUploader ]
|
1463
|
+
requester:
|
1464
|
+
description: Requester component that describes how to prepare HTTP requests to send to the source API.
|
1465
|
+
anyOf:
|
1466
|
+
- "$ref": "#/definitions/CustomRequester"
|
1467
|
+
- "$ref": "#/definitions/HttpRequester"
|
1468
|
+
download_target_extractor:
|
1469
|
+
description: Responsible for fetching the url where the file is located. This is applied on each records and not on the HTTP response
|
1470
|
+
anyOf:
|
1471
|
+
- "$ref": "#/definitions/CustomRecordExtractor"
|
1472
|
+
- "$ref": "#/definitions/DpathExtractor"
|
1473
|
+
file_extractor:
|
1474
|
+
description: Responsible for fetching the content of the file. If not defined, the assumption is that the whole response body is the file content
|
1475
|
+
anyOf:
|
1476
|
+
- "$ref": "#/definitions/CustomRecordExtractor"
|
1477
|
+
- "$ref": "#/definitions/DpathExtractor"
|
1478
|
+
filename_extractor:
|
1479
|
+
description: Defines the name to store the file. Stream name is automatically added to the file path. File unique ID can be used to avoid overwriting files. Random UUID will be used if the extractor is not provided.
|
1480
|
+
type: string
|
1481
|
+
interpolation_context:
|
1482
|
+
- config
|
1483
|
+
- record
|
1484
|
+
examples:
|
1485
|
+
- "{{ record.id }}/{{ record.file_name }}/"
|
1486
|
+
- "{{ record.id }}_{{ record.file_name }}/"
|
1451
1487
|
$parameters:
|
1452
1488
|
type: object
|
1453
1489
|
additional_properties: true
|
@@ -15,6 +15,7 @@ from airbyte_cdk.sources.declarative.extractors.type_transformer import (
|
|
15
15
|
)
|
16
16
|
from airbyte_cdk.sources.declarative.interpolation import InterpolatedString
|
17
17
|
from airbyte_cdk.sources.declarative.models import SchemaNormalization
|
18
|
+
from airbyte_cdk.sources.declarative.retrievers.file_uploader import FileUploader
|
18
19
|
from airbyte_cdk.sources.declarative.transformations import RecordTransformation
|
19
20
|
from airbyte_cdk.sources.types import Config, Record, StreamSlice, StreamState
|
20
21
|
from airbyte_cdk.sources.utils.transform import TypeTransformer
|
@@ -42,6 +43,7 @@ class RecordSelector(HttpSelector):
|
|
42
43
|
record_filter: Optional[RecordFilter] = None
|
43
44
|
transformations: List[RecordTransformation] = field(default_factory=lambda: [])
|
44
45
|
transform_before_filtering: bool = False
|
46
|
+
file_uploader: Optional[FileUploader] = None
|
45
47
|
|
46
48
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
47
49
|
self._parameters = parameters
|
@@ -117,7 +119,10 @@ class RecordSelector(HttpSelector):
|
|
117
119
|
transformed_filtered_data, schema=records_schema
|
118
120
|
)
|
119
121
|
for data in normalized_data:
|
120
|
-
|
122
|
+
record = Record(data=data, stream_name=self.name, associated_slice=stream_slice)
|
123
|
+
if self.file_uploader:
|
124
|
+
self.file_uploader.upload(record)
|
125
|
+
yield record
|
121
126
|
|
122
127
|
def _normalize_by_schema(
|
123
128
|
self, records: Iterable[Mapping[str, Any]], schema: Optional[Mapping[str, Any]]
|
@@ -2066,6 +2066,31 @@ class SelectiveAuthenticator(BaseModel):
|
|
2066
2066
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
2067
2067
|
|
2068
2068
|
|
2069
|
+
class FileUploader(BaseModel):
|
2070
|
+
type: Literal["FileUploader"]
|
2071
|
+
requester: Union[CustomRequester, HttpRequester] = Field(
|
2072
|
+
...,
|
2073
|
+
description="Requester component that describes how to prepare HTTP requests to send to the source API.",
|
2074
|
+
)
|
2075
|
+
download_target_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
|
2076
|
+
...,
|
2077
|
+
description="Responsible for fetching the url where the file is located. This is applied on each records and not on the HTTP response",
|
2078
|
+
)
|
2079
|
+
file_extractor: Optional[Union[CustomRecordExtractor, DpathExtractor]] = Field(
|
2080
|
+
None,
|
2081
|
+
description="Responsible for fetching the content of the file. If not defined, the assumption is that the whole response body is the file content",
|
2082
|
+
)
|
2083
|
+
filename_extractor: Optional[str] = Field(
|
2084
|
+
None,
|
2085
|
+
description="Defines the name to store the file. Stream name is automatically added to the file path. File unique ID can be used to avoid overwriting files. Random UUID will be used if the extractor is not provided.",
|
2086
|
+
examples=[
|
2087
|
+
"{{ record.id }}/{{ record.file_name }}/",
|
2088
|
+
"{{ record.id }}_{{ record.file_name }}/",
|
2089
|
+
],
|
2090
|
+
)
|
2091
|
+
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
2092
|
+
|
2093
|
+
|
2069
2094
|
class DeclarativeStream(BaseModel):
|
2070
2095
|
class Config:
|
2071
2096
|
extra = Extra.allow
|
@@ -2124,6 +2149,11 @@ class DeclarativeStream(BaseModel):
|
|
2124
2149
|
description="Array of state migrations to be applied on the input state",
|
2125
2150
|
title="State Migrations",
|
2126
2151
|
)
|
2152
|
+
file_uploader: Optional[FileUploader] = Field(
|
2153
|
+
None,
|
2154
|
+
description="(experimental) Describes how to fetch a file",
|
2155
|
+
title="File Uploader",
|
2156
|
+
)
|
2127
2157
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
2128
2158
|
|
2129
2159
|
|
@@ -2617,6 +2647,7 @@ CompositeErrorHandler.update_forward_refs()
|
|
2617
2647
|
DeclarativeSource1.update_forward_refs()
|
2618
2648
|
DeclarativeSource2.update_forward_refs()
|
2619
2649
|
SelectiveAuthenticator.update_forward_refs()
|
2650
|
+
FileUploader.update_forward_refs()
|
2620
2651
|
DeclarativeStream.update_forward_refs()
|
2621
2652
|
SessionTokenAuthenticator.update_forward_refs()
|
2622
2653
|
DynamicSchemaLoader.update_forward_refs()
|
@@ -106,7 +106,6 @@ from airbyte_cdk.sources.declarative.migrations.legacy_to_per_partition_state_mi
|
|
106
106
|
)
|
107
107
|
from airbyte_cdk.sources.declarative.models import (
|
108
108
|
CustomStateMigration,
|
109
|
-
GzipDecoder,
|
110
109
|
)
|
111
110
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
112
111
|
AddedFieldDefinition as AddedFieldDefinitionModel,
|
@@ -228,6 +227,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
228
227
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
229
228
|
ExponentialBackoffStrategy as ExponentialBackoffStrategyModel,
|
230
229
|
)
|
230
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
231
|
+
FileUploader as FileUploaderModel,
|
232
|
+
)
|
231
233
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
232
234
|
FixedWindowCallRatePolicy as FixedWindowCallRatePolicyModel,
|
233
235
|
)
|
@@ -479,6 +481,7 @@ from airbyte_cdk.sources.declarative.retrievers import (
|
|
479
481
|
SimpleRetriever,
|
480
482
|
SimpleRetrieverTestReadDecorator,
|
481
483
|
)
|
484
|
+
from airbyte_cdk.sources.declarative.retrievers.file_uploader import FileUploader
|
482
485
|
from airbyte_cdk.sources.declarative.schema import (
|
483
486
|
ComplexFieldType,
|
484
487
|
DefaultSchemaLoader,
|
@@ -676,6 +679,7 @@ class ModelToComponentFactory:
|
|
676
679
|
ComponentMappingDefinitionModel: self.create_components_mapping_definition,
|
677
680
|
ZipfileDecoderModel: self.create_zipfile_decoder,
|
678
681
|
HTTPAPIBudgetModel: self.create_http_api_budget,
|
682
|
+
FileUploaderModel: self.create_file_uploader,
|
679
683
|
FixedWindowCallRatePolicyModel: self.create_fixed_window_call_rate_policy,
|
680
684
|
MovingWindowCallRatePolicyModel: self.create_moving_window_call_rate_policy,
|
681
685
|
UnlimitedCallRatePolicyModel: self.create_unlimited_call_rate_policy,
|
@@ -1838,6 +1842,11 @@ class ModelToComponentFactory:
|
|
1838
1842
|
transformations.append(
|
1839
1843
|
self._create_component_from_model(model=transformation_model, config=config)
|
1840
1844
|
)
|
1845
|
+
file_uploader = None
|
1846
|
+
if model.file_uploader:
|
1847
|
+
file_uploader = self._create_component_from_model(
|
1848
|
+
model=model.file_uploader, config=config
|
1849
|
+
)
|
1841
1850
|
|
1842
1851
|
retriever = self._create_component_from_model(
|
1843
1852
|
model=model.retriever,
|
@@ -1849,6 +1858,7 @@ class ModelToComponentFactory:
|
|
1849
1858
|
stop_condition_on_cursor=stop_condition_on_cursor,
|
1850
1859
|
client_side_incremental_sync=client_side_incremental_sync,
|
1851
1860
|
transformations=transformations,
|
1861
|
+
file_uploader=file_uploader,
|
1852
1862
|
incremental_sync=model.incremental_sync,
|
1853
1863
|
)
|
1854
1864
|
cursor_field = model.incremental_sync.cursor_field if model.incremental_sync else None
|
@@ -2066,6 +2076,7 @@ class ModelToComponentFactory:
|
|
2066
2076
|
config: Config,
|
2067
2077
|
*,
|
2068
2078
|
url_base: str,
|
2079
|
+
extractor_model: Optional[Union[CustomRecordExtractorModel, DpathExtractorModel]] = None,
|
2069
2080
|
decoder: Optional[Decoder] = None,
|
2070
2081
|
cursor_used_for_stop_condition: Optional[DeclarativeCursor] = None,
|
2071
2082
|
) -> Union[DefaultPaginator, PaginatorTestReadDecorator]:
|
@@ -2087,7 +2098,10 @@ class ModelToComponentFactory:
|
|
2087
2098
|
else None
|
2088
2099
|
)
|
2089
2100
|
pagination_strategy = self._create_component_from_model(
|
2090
|
-
model=model.pagination_strategy,
|
2101
|
+
model=model.pagination_strategy,
|
2102
|
+
config=config,
|
2103
|
+
decoder=decoder_to_use,
|
2104
|
+
extractor_model=extractor_model,
|
2091
2105
|
)
|
2092
2106
|
if cursor_used_for_stop_condition:
|
2093
2107
|
pagination_strategy = StopConditionPaginationStrategyDecorator(
|
@@ -2584,7 +2598,12 @@ class ModelToComponentFactory:
|
|
2584
2598
|
)
|
2585
2599
|
|
2586
2600
|
def create_offset_increment(
|
2587
|
-
self,
|
2601
|
+
self,
|
2602
|
+
model: OffsetIncrementModel,
|
2603
|
+
config: Config,
|
2604
|
+
decoder: Decoder,
|
2605
|
+
extractor_model: Optional[Union[CustomRecordExtractorModel, DpathExtractorModel]] = None,
|
2606
|
+
**kwargs: Any,
|
2588
2607
|
) -> OffsetIncrement:
|
2589
2608
|
if isinstance(decoder, PaginationDecoderDecorator):
|
2590
2609
|
inner_decoder = decoder.decoder
|
@@ -2599,10 +2618,24 @@ class ModelToComponentFactory:
|
|
2599
2618
|
self._UNSUPPORTED_DECODER_ERROR.format(decoder_type=type(inner_decoder))
|
2600
2619
|
)
|
2601
2620
|
|
2621
|
+
# Ideally we would instantiate the runtime extractor from highest most level (in this case the SimpleRetriever)
|
2622
|
+
# so that it can be shared by OffSetIncrement and RecordSelector. However, due to how we instantiate the
|
2623
|
+
# decoder with various decorators here, but not in create_record_selector, it is simpler to retain existing
|
2624
|
+
# behavior by having two separate extractors with identical behavior since they use the same extractor model.
|
2625
|
+
# When we have more time to investigate we can look into reusing the same component.
|
2626
|
+
extractor = (
|
2627
|
+
self._create_component_from_model(
|
2628
|
+
model=extractor_model, config=config, decoder=decoder_to_use
|
2629
|
+
)
|
2630
|
+
if extractor_model
|
2631
|
+
else None
|
2632
|
+
)
|
2633
|
+
|
2602
2634
|
return OffsetIncrement(
|
2603
2635
|
page_size=model.page_size,
|
2604
2636
|
config=config,
|
2605
2637
|
decoder=decoder_to_use,
|
2638
|
+
extractor=extractor,
|
2606
2639
|
inject_on_first_request=model.inject_on_first_request or False,
|
2607
2640
|
parameters=model.parameters or {},
|
2608
2641
|
)
|
@@ -2771,6 +2804,7 @@ class ModelToComponentFactory:
|
|
2771
2804
|
transformations: List[RecordTransformation] | None = None,
|
2772
2805
|
decoder: Decoder | None = None,
|
2773
2806
|
client_side_incremental_sync: Dict[str, Any] | None = None,
|
2807
|
+
file_uploader: Optional[FileUploader] = None,
|
2774
2808
|
**kwargs: Any,
|
2775
2809
|
) -> RecordSelector:
|
2776
2810
|
extractor = self._create_component_from_model(
|
@@ -2808,6 +2842,7 @@ class ModelToComponentFactory:
|
|
2808
2842
|
config=config,
|
2809
2843
|
record_filter=record_filter,
|
2810
2844
|
transformations=transformations or [],
|
2845
|
+
file_uploader=file_uploader,
|
2811
2846
|
schema_normalization=schema_normalization,
|
2812
2847
|
parameters=model.parameters or {},
|
2813
2848
|
transform_before_filtering=transform_before_filtering,
|
@@ -2865,6 +2900,7 @@ class ModelToComponentFactory:
|
|
2865
2900
|
stop_condition_on_cursor: bool = False,
|
2866
2901
|
client_side_incremental_sync: Optional[Dict[str, Any]] = None,
|
2867
2902
|
transformations: List[RecordTransformation],
|
2903
|
+
file_uploader: Optional[FileUploader] = None,
|
2868
2904
|
incremental_sync: Optional[
|
2869
2905
|
Union[
|
2870
2906
|
IncrementingCountCursorModel, DatetimeBasedCursorModel, CustomIncrementalSyncModel
|
@@ -2885,6 +2921,7 @@ class ModelToComponentFactory:
|
|
2885
2921
|
decoder=decoder,
|
2886
2922
|
transformations=transformations,
|
2887
2923
|
client_side_incremental_sync=client_side_incremental_sync,
|
2924
|
+
file_uploader=file_uploader,
|
2888
2925
|
)
|
2889
2926
|
|
2890
2927
|
query_properties: Optional[QueryProperties] = None
|
@@ -2966,6 +3003,7 @@ class ModelToComponentFactory:
|
|
2966
3003
|
model=model.paginator,
|
2967
3004
|
config=config,
|
2968
3005
|
url_base=url_base,
|
3006
|
+
extractor_model=model.record_selector.extractor,
|
2969
3007
|
decoder=decoder,
|
2970
3008
|
cursor_used_for_stop_condition=cursor_used_for_stop_condition,
|
2971
3009
|
)
|
@@ -3550,6 +3588,30 @@ class ModelToComponentFactory:
|
|
3550
3588
|
matchers=matchers,
|
3551
3589
|
)
|
3552
3590
|
|
3591
|
+
def create_file_uploader(
|
3592
|
+
self, model: FileUploaderModel, config: Config, **kwargs: Any
|
3593
|
+
) -> FileUploader:
|
3594
|
+
name = "File Uploader"
|
3595
|
+
requester = self._create_component_from_model(
|
3596
|
+
model=model.requester,
|
3597
|
+
config=config,
|
3598
|
+
name=name,
|
3599
|
+
**kwargs,
|
3600
|
+
)
|
3601
|
+
download_target_extractor = self._create_component_from_model(
|
3602
|
+
model=model.download_target_extractor,
|
3603
|
+
config=config,
|
3604
|
+
name=name,
|
3605
|
+
**kwargs,
|
3606
|
+
)
|
3607
|
+
return FileUploader(
|
3608
|
+
requester=requester,
|
3609
|
+
download_target_extractor=download_target_extractor,
|
3610
|
+
config=config,
|
3611
|
+
parameters=model.parameters or {},
|
3612
|
+
filename_extractor=model.filename_extractor if model.filename_extractor else None,
|
3613
|
+
)
|
3614
|
+
|
3553
3615
|
def create_moving_window_call_rate_policy(
|
3554
3616
|
self, model: MovingWindowCallRatePolicyModel, config: Config, **kwargs: Any
|
3555
3617
|
) -> MovingWindowCallRatePolicy:
|
@@ -12,6 +12,7 @@ from airbyte_cdk.sources.declarative.decoders import (
|
|
12
12
|
JsonDecoder,
|
13
13
|
PaginationDecoderDecorator,
|
14
14
|
)
|
15
|
+
from airbyte_cdk.sources.declarative.extractors.dpath_extractor import RecordExtractor
|
15
16
|
from airbyte_cdk.sources.declarative.interpolation import InterpolatedString
|
16
17
|
from airbyte_cdk.sources.declarative.requesters.paginators.strategies.pagination_strategy import (
|
17
18
|
PaginationStrategy,
|
@@ -46,6 +47,7 @@ class OffsetIncrement(PaginationStrategy):
|
|
46
47
|
config: Config
|
47
48
|
page_size: Optional[Union[str, int]]
|
48
49
|
parameters: InitVar[Mapping[str, Any]]
|
50
|
+
extractor: Optional[RecordExtractor]
|
49
51
|
decoder: Decoder = field(
|
50
52
|
default_factory=lambda: PaginationDecoderDecorator(decoder=JsonDecoder(parameters={}))
|
51
53
|
)
|
@@ -75,6 +77,14 @@ class OffsetIncrement(PaginationStrategy):
|
|
75
77
|
) -> Optional[Any]:
|
76
78
|
decoded_response = next(self.decoder.decode(response))
|
77
79
|
|
80
|
+
if self.extractor:
|
81
|
+
page_size_from_response = len(list(self.extractor.extract_records(response=response)))
|
82
|
+
# The extractor could return 0 records which is valid, but evaluates to False. Our fallback in other
|
83
|
+
# cases as the best effort option is to use the incoming last_page_size
|
84
|
+
last_page_size = (
|
85
|
+
page_size_from_response if page_size_from_response is not None else last_page_size
|
86
|
+
)
|
87
|
+
|
78
88
|
# Stop paginating when there are fewer records than the page size or the current page has no records
|
79
89
|
if (
|
80
90
|
self._page_size
|
airbyte_cdk-6.45.4.post13.dev14543731901/airbyte_cdk/sources/declarative/retrievers/file_uploader.py
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
3
|
+
#
|
4
|
+
|
5
|
+
import json
|
6
|
+
import logging
|
7
|
+
import uuid
|
8
|
+
from dataclasses import InitVar, dataclass, field
|
9
|
+
from pathlib import Path
|
10
|
+
from typing import Any, Mapping, Optional, Union
|
11
|
+
|
12
|
+
from airbyte_cdk.models import AirbyteRecordMessageFileReference
|
13
|
+
from airbyte_cdk.sources.declarative.extractors.record_extractor import RecordExtractor
|
14
|
+
from airbyte_cdk.sources.declarative.interpolation.interpolated_string import (
|
15
|
+
InterpolatedString,
|
16
|
+
)
|
17
|
+
from airbyte_cdk.sources.declarative.partition_routers.substream_partition_router import (
|
18
|
+
SafeResponse,
|
19
|
+
)
|
20
|
+
from airbyte_cdk.sources.declarative.requesters import Requester
|
21
|
+
from airbyte_cdk.sources.declarative.types import Record, StreamSlice
|
22
|
+
from airbyte_cdk.sources.types import Config
|
23
|
+
from airbyte_cdk.sources.utils.files_directory import get_files_directory
|
24
|
+
|
25
|
+
logger = logging.getLogger("airbyte")
|
26
|
+
|
27
|
+
|
28
|
+
@dataclass
|
29
|
+
class FileUploader:
|
30
|
+
requester: Requester
|
31
|
+
download_target_extractor: RecordExtractor
|
32
|
+
config: Config
|
33
|
+
parameters: InitVar[Mapping[str, Any]]
|
34
|
+
|
35
|
+
filename_extractor: Optional[Union[InterpolatedString, str]] = None
|
36
|
+
content_extractor: Optional[RecordExtractor] = None
|
37
|
+
|
38
|
+
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
39
|
+
if self.filename_extractor:
|
40
|
+
self.filename_extractor = InterpolatedString.create(
|
41
|
+
self.filename_extractor,
|
42
|
+
parameters=parameters,
|
43
|
+
)
|
44
|
+
|
45
|
+
def upload(self, record: Record) -> None:
|
46
|
+
mocked_response = SafeResponse()
|
47
|
+
mocked_response.content = json.dumps(record.data).encode()
|
48
|
+
download_targets = list(self.download_target_extractor.extract_records(mocked_response))
|
49
|
+
if not download_targets:
|
50
|
+
raise ValueError("No download targets found")
|
51
|
+
|
52
|
+
download_target = download_targets[0] # we just expect one download target
|
53
|
+
if not isinstance(download_target, str):
|
54
|
+
raise ValueError(
|
55
|
+
f"download_target is expected to be a str but was {type(download_target)}: {download_target}"
|
56
|
+
)
|
57
|
+
|
58
|
+
response = self.requester.send_request(
|
59
|
+
stream_slice=StreamSlice(
|
60
|
+
partition={}, cursor_slice={}, extra_fields={"download_target": download_target}
|
61
|
+
),
|
62
|
+
)
|
63
|
+
|
64
|
+
if self.content_extractor:
|
65
|
+
raise NotImplementedError("TODO")
|
66
|
+
else:
|
67
|
+
files_directory = Path(get_files_directory())
|
68
|
+
|
69
|
+
file_name = (
|
70
|
+
self.filename_extractor.eval(self.config, record=record)
|
71
|
+
if self.filename_extractor
|
72
|
+
else str(uuid.uuid4())
|
73
|
+
)
|
74
|
+
file_name = file_name.lstrip("/")
|
75
|
+
file_relative_path = Path(record.stream_name) / Path(file_name)
|
76
|
+
|
77
|
+
full_path = files_directory / file_relative_path
|
78
|
+
full_path.parent.mkdir(parents=True, exist_ok=True)
|
79
|
+
|
80
|
+
with open(str(full_path), "wb") as f:
|
81
|
+
f.write(response.content)
|
82
|
+
file_size_bytes = full_path.stat().st_size
|
83
|
+
|
84
|
+
logger.info("File uploaded successfully")
|
85
|
+
logger.info(f"File url: {str(full_path)}")
|
86
|
+
logger.info(f"File size: {file_size_bytes / 1024} KB")
|
87
|
+
logger.info(f"File relative path: {str(file_relative_path)}")
|
88
|
+
|
89
|
+
record.file_reference = AirbyteRecordMessageFileReference(
|
90
|
+
staging_file_url=str(full_path),
|
91
|
+
source_file_relative_path=str(file_relative_path),
|
92
|
+
file_size_bytes=file_size_bytes,
|
93
|
+
)
|
@@ -58,11 +58,16 @@ class DeclarativePartition(Partition):
|
|
58
58
|
def read(self) -> Iterable[Record]:
|
59
59
|
for stream_data in self._retriever.read_records(self._json_schema, self._stream_slice):
|
60
60
|
if isinstance(stream_data, Mapping):
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
record = (
|
62
|
+
stream_data
|
63
|
+
if isinstance(stream_data, Record)
|
64
|
+
else Record(
|
65
|
+
data=stream_data,
|
66
|
+
stream_name=self.stream_name(),
|
67
|
+
associated_slice=self._stream_slice,
|
68
|
+
)
|
65
69
|
)
|
70
|
+
yield record
|
66
71
|
else:
|
67
72
|
self._message_repository.emit_message(stream_data)
|
68
73
|
|
@@ -8,16 +8,18 @@ from datetime import datetime
|
|
8
8
|
from enum import Enum
|
9
9
|
from io import IOBase
|
10
10
|
from os import makedirs, path
|
11
|
-
from typing import Any,
|
11
|
+
from typing import Any, Callable, Iterable, List, MutableMapping, Optional, Set, Tuple
|
12
12
|
|
13
13
|
from wcmatch.glob import GLOBSTAR, globmatch
|
14
14
|
|
15
|
+
from airbyte_cdk.models import AirbyteRecordMessageFileReference
|
15
16
|
from airbyte_cdk.sources.file_based.config.abstract_file_based_spec import AbstractFileBasedSpec
|
16
17
|
from airbyte_cdk.sources.file_based.config.validate_config_transfer_modes import (
|
17
18
|
include_identities_stream,
|
18
19
|
preserve_directory_structure,
|
19
20
|
use_file_transfer,
|
20
21
|
)
|
22
|
+
from airbyte_cdk.sources.file_based.file_record_data import FileRecordData
|
21
23
|
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
|
22
24
|
|
23
25
|
|
@@ -28,6 +30,10 @@ class FileReadMode(Enum):
|
|
28
30
|
|
29
31
|
class AbstractFileBasedStreamReader(ABC):
|
30
32
|
DATE_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
|
33
|
+
FILE_RELATIVE_PATH = "file_relative_path"
|
34
|
+
FILE_NAME = "file_name"
|
35
|
+
LOCAL_FILE_PATH = "local_file_path"
|
36
|
+
FILE_FOLDER = "file_folder"
|
31
37
|
|
32
38
|
def __init__(self) -> None:
|
33
39
|
self._config = None
|
@@ -148,9 +154,9 @@ class AbstractFileBasedStreamReader(ABC):
|
|
148
154
|
return False
|
149
155
|
|
150
156
|
@abstractmethod
|
151
|
-
def
|
157
|
+
def upload(
|
152
158
|
self, file: RemoteFile, local_directory: str, logger: logging.Logger
|
153
|
-
) ->
|
159
|
+
) -> Tuple[FileRecordData, AirbyteRecordMessageFileReference]:
|
154
160
|
"""
|
155
161
|
This is required for connectors that will support writing to
|
156
162
|
files. It will handle the logic to download,get,read,acquire or
|
@@ -162,25 +168,44 @@ class AbstractFileBasedStreamReader(ABC):
|
|
162
168
|
logger (logging.Logger): Logger for logging information and errors.
|
163
169
|
|
164
170
|
Returns:
|
165
|
-
|
166
|
-
-
|
167
|
-
-
|
168
|
-
-
|
169
|
-
this a mounted volume in the pod container.
|
170
|
-
|
171
|
+
AirbyteRecordMessageFileReference: A file reference object containing:
|
172
|
+
- staging_file_url (str): The absolute path to the referenced file in the staging area.
|
173
|
+
- file_size_bytes (int): The size of the referenced file in bytes.
|
174
|
+
- source_file_relative_path (str): The relative path to the referenced file in source.
|
171
175
|
"""
|
172
176
|
...
|
173
177
|
|
174
|
-
def _get_file_transfer_paths(
|
178
|
+
def _get_file_transfer_paths(
|
179
|
+
self, source_file_relative_path: str, staging_directory: str
|
180
|
+
) -> MutableMapping[str, Any]:
|
181
|
+
"""
|
182
|
+
This method is used to get the file transfer paths for a given source file relative path and local directory.
|
183
|
+
It returns a dictionary with the following keys:
|
184
|
+
- FILE_RELATIVE_PATH: The relative path to file in reference to the staging directory.
|
185
|
+
- LOCAL_FILE_PATH: The absolute path to the file.
|
186
|
+
- FILE_NAME: The name of the referenced file.
|
187
|
+
- FILE_FOLDER: The folder of the referenced file.
|
188
|
+
"""
|
189
|
+
if not path.exists(staging_directory):
|
190
|
+
raise ValueError(f"Staging directory '{staging_directory}' does not exist")
|
191
|
+
|
175
192
|
preserve_directory_structure = self.preserve_directory_structure()
|
193
|
+
|
194
|
+
file_name = path.basename(source_file_relative_path)
|
195
|
+
file_folder = path.dirname(source_file_relative_path)
|
176
196
|
if preserve_directory_structure:
|
177
197
|
# Remove left slashes from source path format to make relative path for writing locally
|
178
|
-
file_relative_path =
|
198
|
+
file_relative_path = source_file_relative_path.lstrip("/")
|
179
199
|
else:
|
180
|
-
file_relative_path =
|
181
|
-
local_file_path = path.join(
|
182
|
-
|
200
|
+
file_relative_path = file_name
|
201
|
+
local_file_path = path.join(staging_directory, file_relative_path)
|
183
202
|
# Ensure the local directory exists
|
184
203
|
makedirs(path.dirname(local_file_path), exist_ok=True)
|
185
|
-
|
186
|
-
|
204
|
+
|
205
|
+
file_paths = {
|
206
|
+
self.FILE_RELATIVE_PATH: file_relative_path,
|
207
|
+
self.LOCAL_FILE_PATH: local_file_path,
|
208
|
+
self.FILE_NAME: file_name,
|
209
|
+
self.FILE_FOLDER: file_folder,
|
210
|
+
}
|
211
|
+
return file_paths
|