airbyte-cdk 0.68.4__tar.gz → 0.69.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/PKG-INFO +1 -1
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/entrypoint.py +27 -7
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/connector_state_manager.py +0 -1
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_based_source.py +4 -2
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +2 -2
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +2 -2
- airbyte-cdk-0.68.4/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_noop_cursor.py → airbyte-cdk-0.69.1/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +21 -6
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +2 -2
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +27 -3
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +7 -3
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/entrypoint_wrapper.py +1 -1
- airbyte-cdk-0.69.1/airbyte_cdk/utils/message_utils.py +17 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/PKG-INFO +1 -1
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/SOURCES.txt +3 -1
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/setup.py +1 -1
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/concurrent_source/test_concurrent_source_adapter.py +2 -2
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/csv_scenarios.py +128 -37
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/concurrent/test_adapters.py +3 -3
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_file_based_scenarios.py +13 -6
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_scenarios.py +32 -3
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_builder.py +2 -2
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_scenarios.py +16 -14
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_source_builder.py +5 -4
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_default_stream.py +8 -6
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_stream_read.py +3 -2
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_concurrent_source.py +7 -5
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_source_read.py +2 -3
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/test_entrypoint_wrapper.py +9 -6
- airbyte-cdk-0.69.1/unit_tests/utils/test_message_utils.py +91 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/LICENSE.txt +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/README.md +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/logger.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/py.typed +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/create_partial.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/class_types_registry.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_action.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_status.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/stream_slicers/cartesian_product_stream_slicer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/deprecated/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/deprecated/base_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/deprecated/client.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/singer/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/singer/singer_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/singer/source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/record.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/core.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/oauth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/token.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/utils/stream_helper.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/catalog_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/schema_models.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/traced_exception.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/dependency_links.txt +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/requires.txt +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/top_level.txt +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/pyproject.toml +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/setup.cfg +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/source_declarative_manifest/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/source_declarative_manifest/main.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/test_connector_builder_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/test_message_grouper.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/destinations/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/destinations/test_destination.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/singer/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/singer/test_singer_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/singer/test_singer_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/concurrent_source/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_oauth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_selective_authenticator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_session_token_auth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_token_auth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_token_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/checks/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/checks/test_check_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/decoders/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/decoders/test_json_decoder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/external_component.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/test_record_filter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/test_record_selector.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/test_datetime_based_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor_integration.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_filters.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_mapping.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_nested_mapping.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_string.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_jinja.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_macros.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/testing_components.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/test_list_partition_router.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/test_single_partition_router.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/test_substream_partition_router.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_constant_backoff.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_exponential_backoff.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_header_helper.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_time_from_header.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_until_time_from_header.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_composite_error_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_default_error_handler.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_http_response_filter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_response_status.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_cursor_pagination_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_no_paginator.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_request_option.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/test_http_requester.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/test_interpolated_request_input_provider.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/source_test/SourceTest.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/source_test/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/test_default_schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/test_inline_schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/test_json_file_schema_loader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/states/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/stream_slicers/test_cartesian_product_stream_slicer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_create_partial.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_declarative_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_manifest_declarative_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_types.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_yaml_declarative_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/test_abstract_file_based_spec.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/test_csv_format.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/test_file_based_stream_config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/discovery_policy/test_default_discovery_policy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_avro_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_csv_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_jsonl_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_parquet_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_unstructured_parser.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/in_memory_files_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/avro_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/check_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/concurrent_incremental_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/file_based_source_builder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/incremental_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/jsonl_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/parquet_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/scenario_builder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/unstructured_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/user_input_schema_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/validation_policy_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/concurrent/test_file_based_concurrent_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/test_default_file_based_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/test_default_file_based_stream.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_file_based_stream_reader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_schema_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/fixtures/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/fixtures/source_test_fixture.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/message/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/message/test_repository.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/incremental_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/test_concurrent_scenarios.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_adapters.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_concurrent_read_processor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_cursor.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_datetime_state_converter.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_partition_enqueuer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_partition_reader.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_thread_pool_manager.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/auth/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/auth/test_auth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/test_availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/test_http.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_availability_strategy.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_call_rate.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_streams_core.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_abstract_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_config.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_connector_state_manager.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_http_logger.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_integration_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_source.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_matcher.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_mocker.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_request.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_response_builder.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/__init__.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_datetime_format_inferrer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_mapping_helpers.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_rate_limiting.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_schema_inferrer.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_secret_utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_stream_status_utils.py +0 -0
- {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_traced_exception.py +0 -0
@@ -10,23 +10,24 @@ import os.path
|
|
10
10
|
import socket
|
11
11
|
import sys
|
12
12
|
import tempfile
|
13
|
+
from collections import defaultdict
|
13
14
|
from functools import wraps
|
14
|
-
from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Union
|
15
|
+
from typing import Any, DefaultDict, Iterable, List, Mapping, MutableMapping, Optional, Union
|
15
16
|
from urllib.parse import urlparse
|
16
17
|
|
17
18
|
import requests
|
18
19
|
from airbyte_cdk.connector import TConfig
|
19
20
|
from airbyte_cdk.exception_handler import init_uncaught_exception_handler
|
20
21
|
from airbyte_cdk.logger import init_logger
|
21
|
-
from airbyte_cdk.models import AirbyteMessage, Status, Type
|
22
|
-
from airbyte_cdk.models.airbyte_protocol import ConnectorSpecification # type: ignore [attr-defined]
|
22
|
+
from airbyte_cdk.models import AirbyteMessage, FailureType, Status, Type
|
23
|
+
from airbyte_cdk.models.airbyte_protocol import AirbyteStateStats, ConnectorSpecification # type: ignore [attr-defined]
|
23
24
|
from airbyte_cdk.sources import Source
|
25
|
+
from airbyte_cdk.sources.connector_state_manager import HashableStreamDescriptor
|
24
26
|
from airbyte_cdk.sources.utils.schema_helpers import check_config_against_spec_or_exit, split_config
|
25
|
-
from airbyte_cdk.utils import is_cloud_environment
|
27
|
+
from airbyte_cdk.utils import is_cloud_environment, message_utils
|
26
28
|
from airbyte_cdk.utils.airbyte_secrets_utils import get_secrets, update_secrets
|
27
29
|
from airbyte_cdk.utils.constants import ENV_REQUEST_CACHE_PATH
|
28
30
|
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
29
|
-
from airbyte_protocol.models import FailureType
|
30
31
|
from requests import PreparedRequest, Response, Session
|
31
32
|
|
32
33
|
logger = init_logger("airbyte")
|
@@ -160,8 +161,27 @@ class AirbyteEntrypoint(object):
|
|
160
161
|
if self.source.check_config_against_spec:
|
161
162
|
self.validate_connection(source_spec, config)
|
162
163
|
|
163
|
-
|
164
|
-
|
164
|
+
stream_message_counter: DefaultDict[HashableStreamDescriptor, int] = defaultdict(int)
|
165
|
+
for message in self.source.read(self.logger, config, catalog, state):
|
166
|
+
yield self.handle_record_counts(message, stream_message_counter)
|
167
|
+
for message in self._emit_queued_messages(self.source):
|
168
|
+
yield self.handle_record_counts(message, stream_message_counter)
|
169
|
+
|
170
|
+
@staticmethod
|
171
|
+
def handle_record_counts(message: AirbyteMessage, stream_message_count: DefaultDict[HashableStreamDescriptor, int]) -> AirbyteMessage:
|
172
|
+
if message.type == Type.RECORD:
|
173
|
+
stream_message_count[message_utils.get_stream_descriptor(message)] += 1
|
174
|
+
|
175
|
+
elif message.type == Type.STATE:
|
176
|
+
stream_descriptor = message_utils.get_stream_descriptor(message)
|
177
|
+
|
178
|
+
# Set record count from the counter onto the state message
|
179
|
+
message.state.sourceStats = message.state.sourceStats or AirbyteStateStats()
|
180
|
+
message.state.sourceStats.recordCount = stream_message_count.get(stream_descriptor, 0)
|
181
|
+
|
182
|
+
# Reset the counter
|
183
|
+
stream_message_count[stream_descriptor] = 0
|
184
|
+
return message
|
165
185
|
|
166
186
|
@staticmethod
|
167
187
|
def validate_connection(source_spec: ConnectorSpecification, config: TConfig) -> None:
|
@@ -82,7 +82,6 @@ class ConnectorStateManager:
|
|
82
82
|
Generates an AirbyteMessage using the current per-stream state of a specified stream in either the per-stream or legacy format
|
83
83
|
:param stream_name: The name of the stream for the message that is being created
|
84
84
|
:param namespace: The namespace of the stream for the message that is being created
|
85
|
-
:param send_per_stream_state: Decides which state format the message should be generated as
|
86
85
|
:return: The Airbyte state message to be emitted by the connector during a sync
|
87
86
|
"""
|
88
87
|
hashable_descriptor = HashableStreamDescriptor(name=stream_name, namespace=namespace)
|
{airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_based_source.py
RENAMED
@@ -36,7 +36,7 @@ from airbyte_cdk.sources.file_based.stream.concurrent.adapters import FileBasedS
|
|
36
36
|
from airbyte_cdk.sources.file_based.stream.concurrent.cursor import (
|
37
37
|
AbstractConcurrentFileBasedCursor,
|
38
38
|
FileBasedConcurrentCursor,
|
39
|
-
|
39
|
+
FileBasedFinalStateCursor,
|
40
40
|
)
|
41
41
|
from airbyte_cdk.sources.file_based.stream.cursor import AbstractFileBasedCursor
|
42
42
|
from airbyte_cdk.sources.message.repository import InMemoryMessageRepository, MessageRepository
|
@@ -170,7 +170,9 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
|
|
170
170
|
sync_mode = self._get_sync_mode_from_catalog(stream_config.name)
|
171
171
|
|
172
172
|
if sync_mode == SyncMode.full_refresh and hasattr(self, "_concurrency_level") and self._concurrency_level is not None:
|
173
|
-
cursor =
|
173
|
+
cursor = FileBasedFinalStateCursor(
|
174
|
+
stream_config=stream_config, stream_namespace=None, message_repository=self.message_repository
|
175
|
+
)
|
174
176
|
stream = FileBasedStreamFacade.create_from_stream(
|
175
177
|
self._make_default_stream(stream_config, cursor), self, self.logger, stream_state, cursor
|
176
178
|
)
|
@@ -18,7 +18,7 @@ from airbyte_cdk.sources.file_based.config.file_based_stream_config import Prima
|
|
18
18
|
from airbyte_cdk.sources.file_based.file_types.file_type_parser import FileTypeParser
|
19
19
|
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
|
20
20
|
from airbyte_cdk.sources.file_based.stream import AbstractFileBasedStream
|
21
|
-
from airbyte_cdk.sources.file_based.stream.concurrent.cursor import
|
21
|
+
from airbyte_cdk.sources.file_based.stream.concurrent.cursor import FileBasedFinalStateCursor
|
22
22
|
from airbyte_cdk.sources.file_based.stream.cursor import AbstractFileBasedCursor
|
23
23
|
from airbyte_cdk.sources.file_based.types import StreamSlice
|
24
24
|
from airbyte_cdk.sources.message import MessageRepository
|
@@ -71,7 +71,7 @@ class FileBasedStreamFacade(AbstractStreamFacade[DefaultStream], AbstractFileBas
|
|
71
71
|
partition_generator=FileBasedStreamPartitionGenerator(
|
72
72
|
stream,
|
73
73
|
message_repository,
|
74
|
-
SyncMode.full_refresh if isinstance(cursor,
|
74
|
+
SyncMode.full_refresh if isinstance(cursor, FileBasedFinalStateCursor) else SyncMode.incremental,
|
75
75
|
[cursor_field] if cursor_field is not None else None,
|
76
76
|
state,
|
77
77
|
cursor,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
from .abstract_concurrent_file_based_cursor import AbstractConcurrentFileBasedCursor
|
2
2
|
from .file_based_concurrent_cursor import FileBasedConcurrentCursor
|
3
|
-
from .
|
3
|
+
from .file_based_final_state_cursor import FileBasedFinalStateCursor
|
4
4
|
|
5
|
-
__all__ = ["AbstractConcurrentFileBasedCursor", "FileBasedConcurrentCursor", "
|
5
|
+
__all__ = ["AbstractConcurrentFileBasedCursor", "FileBasedConcurrentCursor", "FileBasedFinalStateCursor"]
|
@@ -4,12 +4,15 @@
|
|
4
4
|
|
5
5
|
import logging
|
6
6
|
from datetime import datetime
|
7
|
-
from typing import TYPE_CHECKING, Any, Iterable, List, MutableMapping
|
7
|
+
from typing import TYPE_CHECKING, Any, Iterable, List, MutableMapping, Optional
|
8
8
|
|
9
|
+
from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
|
9
10
|
from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileBasedStreamConfig
|
10
11
|
from airbyte_cdk.sources.file_based.remote_file import RemoteFile
|
11
12
|
from airbyte_cdk.sources.file_based.stream.concurrent.cursor.abstract_concurrent_file_based_cursor import AbstractConcurrentFileBasedCursor
|
12
13
|
from airbyte_cdk.sources.file_based.types import StreamState
|
14
|
+
from airbyte_cdk.sources.message import MessageRepository
|
15
|
+
from airbyte_cdk.sources.streams import FULL_REFRESH_SENTINEL_STATE_KEY
|
13
16
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
|
14
17
|
from airbyte_cdk.sources.streams.concurrent.partitions.record import Record
|
15
18
|
|
@@ -17,13 +20,23 @@ if TYPE_CHECKING:
|
|
17
20
|
from airbyte_cdk.sources.file_based.stream.concurrent.adapters import FileBasedStreamPartition
|
18
21
|
|
19
22
|
|
20
|
-
class
|
21
|
-
|
22
|
-
|
23
|
+
class FileBasedFinalStateCursor(AbstractConcurrentFileBasedCursor):
|
24
|
+
"""Cursor that is used to guarantee at least one state message is emitted for a concurrent file-based stream."""
|
25
|
+
|
26
|
+
def __init__(
|
27
|
+
self, stream_config: FileBasedStreamConfig, message_repository: MessageRepository, stream_namespace: Optional[str], **kwargs: Any
|
28
|
+
):
|
29
|
+
self._stream_name = stream_config.name
|
30
|
+
self._stream_namespace = stream_namespace
|
31
|
+
self._message_repository = message_repository
|
32
|
+
# Normally the connector state manager operates at the source-level. However, we only need it to write the sentinel
|
33
|
+
# state message rather than manage overall source state. This is also only temporary as we move to the resumable
|
34
|
+
# full refresh world where every stream uses a FileBasedConcurrentCursor with incremental state.
|
35
|
+
self._connector_state_manager = ConnectorStateManager(stream_instance_map={})
|
23
36
|
|
24
37
|
@property
|
25
38
|
def state(self) -> MutableMapping[str, Any]:
|
26
|
-
return {}
|
39
|
+
return {FULL_REFRESH_SENTINEL_STATE_KEY: True}
|
27
40
|
|
28
41
|
def observe(self, record: Record) -> None:
|
29
42
|
pass
|
@@ -53,4 +66,6 @@ class FileBasedNoopCursor(AbstractConcurrentFileBasedCursor):
|
|
53
66
|
pass
|
54
67
|
|
55
68
|
def ensure_at_least_one_state_emitted(self) -> None:
|
56
|
-
|
69
|
+
self._connector_state_manager.update_state_for_stream(self._stream_name, self._stream_namespace, self.state)
|
70
|
+
state_message = self._connector_state_manager.create_state_message(self._stream_name, self._stream_namespace)
|
71
|
+
self._message_repository.emit_message(state_message)
|
{airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/adapters.py
RENAMED
@@ -21,7 +21,7 @@ from airbyte_cdk.sources.streams.concurrent.availability_strategy import (
|
|
21
21
|
StreamAvailable,
|
22
22
|
StreamUnavailable,
|
23
23
|
)
|
24
|
-
from airbyte_cdk.sources.streams.concurrent.cursor import Cursor,
|
24
|
+
from airbyte_cdk.sources.streams.concurrent.cursor import Cursor, FinalStateCursor
|
25
25
|
from airbyte_cdk.sources.streams.concurrent.default_stream import DefaultStream
|
26
26
|
from airbyte_cdk.sources.streams.concurrent.exceptions import ExceptionWithDisplayMessage
|
27
27
|
from airbyte_cdk.sources.streams.concurrent.helpers import get_cursor_field_from_stream, get_primary_key_from_stream
|
@@ -77,7 +77,7 @@ class StreamFacade(AbstractStreamFacade[DefaultStream], Stream):
|
|
77
77
|
partition_generator=StreamPartitionGenerator(
|
78
78
|
stream,
|
79
79
|
message_repository,
|
80
|
-
SyncMode.full_refresh if isinstance(cursor,
|
80
|
+
SyncMode.full_refresh if isinstance(cursor, FinalStateCursor) else SyncMode.incremental,
|
81
81
|
[cursor_field] if cursor_field is not None else None,
|
82
82
|
state,
|
83
83
|
cursor,
|
@@ -8,6 +8,7 @@ from typing import Any, List, Mapping, MutableMapping, Optional, Protocol, Tuple
|
|
8
8
|
|
9
9
|
from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
|
10
10
|
from airbyte_cdk.sources.message import MessageRepository
|
11
|
+
from airbyte_cdk.sources.streams import FULL_REFRESH_SENTINEL_STATE_KEY
|
11
12
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
|
12
13
|
from airbyte_cdk.sources.streams.concurrent.partitions.record import Record
|
13
14
|
from airbyte_cdk.sources.streams.concurrent.state_converters.abstract_stream_state_converter import AbstractStreamStateConverter
|
@@ -65,10 +66,27 @@ class Cursor(ABC):
|
|
65
66
|
raise NotImplementedError()
|
66
67
|
|
67
68
|
|
68
|
-
class
|
69
|
+
class FinalStateCursor(Cursor):
|
70
|
+
"""Cursor that is used to guarantee at least one state message is emitted for a concurrent stream."""
|
71
|
+
|
72
|
+
def __init__(
|
73
|
+
self,
|
74
|
+
stream_name: str,
|
75
|
+
stream_namespace: Optional[str],
|
76
|
+
message_repository: MessageRepository,
|
77
|
+
) -> None:
|
78
|
+
self._stream_name = stream_name
|
79
|
+
self._stream_namespace = stream_namespace
|
80
|
+
self._message_repository = message_repository
|
81
|
+
# Normally the connector state manager operates at the source-level. However, we only need it to write the sentinel
|
82
|
+
# state message rather than manage overall source state. This is also only temporary as we move to the resumable
|
83
|
+
# full refresh world where every stream uses a FileBasedConcurrentCursor with incremental state.
|
84
|
+
self._connector_state_manager = ConnectorStateManager(stream_instance_map={})
|
85
|
+
self._has_closed_at_least_one_slice = False
|
86
|
+
|
69
87
|
@property
|
70
88
|
def state(self) -> MutableMapping[str, Any]:
|
71
|
-
return {}
|
89
|
+
return {FULL_REFRESH_SENTINEL_STATE_KEY: True}
|
72
90
|
|
73
91
|
def observe(self, record: Record) -> None:
|
74
92
|
pass
|
@@ -77,7 +95,13 @@ class NoopCursor(Cursor):
|
|
77
95
|
pass
|
78
96
|
|
79
97
|
def ensure_at_least_one_state_emitted(self) -> None:
|
80
|
-
|
98
|
+
"""
|
99
|
+
Used primarily for full refresh syncs that do not have a valid cursor value to emit at the end of a sync
|
100
|
+
"""
|
101
|
+
|
102
|
+
self._connector_state_manager.update_state_for_stream(self._stream_name, self._stream_namespace, self.state)
|
103
|
+
state_message = self._connector_state_manager.create_state_message(self._stream_name, self._stream_namespace)
|
104
|
+
self._message_repository.emit_message(state_message)
|
81
105
|
|
82
106
|
|
83
107
|
class ConcurrentCursor(Cursor):
|
{airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py
RENAMED
@@ -9,7 +9,7 @@ from typing import Any, Iterable, List, Mapping, Optional
|
|
9
9
|
from airbyte_cdk.models import AirbyteStream, SyncMode
|
10
10
|
from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream
|
11
11
|
from airbyte_cdk.sources.streams.concurrent.availability_strategy import AbstractAvailabilityStrategy, StreamAvailability
|
12
|
-
from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
|
12
|
+
from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
|
13
13
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
|
14
14
|
from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator
|
15
15
|
|
@@ -24,7 +24,7 @@ class DefaultStream(AbstractStream):
|
|
24
24
|
primary_key: List[str],
|
25
25
|
cursor_field: Optional[str],
|
26
26
|
logger: Logger,
|
27
|
-
cursor:
|
27
|
+
cursor: Cursor,
|
28
28
|
namespace: Optional[str] = None,
|
29
29
|
) -> None:
|
30
30
|
self._stream_partition_generator = partition_generator
|
@@ -34,7 +34,7 @@ class DefaultStream(AbstractStream):
|
|
34
34
|
self._primary_key = primary_key
|
35
35
|
self._cursor_field = cursor_field
|
36
36
|
self._logger = logger
|
37
|
-
self._cursor = cursor
|
37
|
+
self._cursor = cursor
|
38
38
|
self._namespace = namespace
|
39
39
|
|
40
40
|
def generate_partitions(self) -> Iterable[Partition]:
|
@@ -44,6 +44,10 @@ class DefaultStream(AbstractStream):
|
|
44
44
|
def name(self) -> str:
|
45
45
|
return self._name
|
46
46
|
|
47
|
+
@property
|
48
|
+
def namespace(self) -> Optional[str]:
|
49
|
+
return self._namespace
|
50
|
+
|
47
51
|
def check_availability(self) -> StreamAvailability:
|
48
52
|
return self._availability_strategy.check_availability(self._logger)
|
49
53
|
|
@@ -74,7 +74,7 @@ class EntrypointOutput:
|
|
74
74
|
state_messages = self._get_message_by_types([Type.STATE])
|
75
75
|
if not state_messages:
|
76
76
|
raise ValueError("Can't provide most recent state as there are no state messages")
|
77
|
-
return state_messages[-1].state.
|
77
|
+
return state_messages[-1].state.stream
|
78
78
|
|
79
79
|
@property
|
80
80
|
def logs(self) -> List[AirbyteMessage]:
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
|
2
|
+
|
3
|
+
from airbyte_cdk.sources.connector_state_manager import HashableStreamDescriptor
|
4
|
+
from airbyte_protocol.models import AirbyteMessage, Type
|
5
|
+
|
6
|
+
|
7
|
+
def get_stream_descriptor(message: AirbyteMessage) -> HashableStreamDescriptor:
|
8
|
+
if message.type == Type.RECORD:
|
9
|
+
return HashableStreamDescriptor(name=message.record.stream, namespace=message.record.namespace)
|
10
|
+
elif message.type == Type.STATE:
|
11
|
+
if not message.state.stream or not message.state.stream.stream_descriptor:
|
12
|
+
raise ValueError("State message was not in per-stream state format, which is required for record counts.")
|
13
|
+
return HashableStreamDescriptor(
|
14
|
+
name=message.state.stream.stream_descriptor.name, namespace=message.state.stream.stream_descriptor.namespace
|
15
|
+
)
|
16
|
+
else:
|
17
|
+
raise NotImplementedError(f"get_stream_descriptor is not implemented for message type '{message.type}'.")
|
@@ -199,7 +199,7 @@ airbyte_cdk/sources/file_based/stream/concurrent/adapters.py
|
|
199
199
|
airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py
|
200
200
|
airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py
|
201
201
|
airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py
|
202
|
-
airbyte_cdk/sources/file_based/stream/concurrent/cursor/
|
202
|
+
airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py
|
203
203
|
airbyte_cdk/sources/file_based/stream/cursor/__init__.py
|
204
204
|
airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py
|
205
205
|
airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py
|
@@ -274,6 +274,7 @@ airbyte_cdk/utils/datetime_format_inferrer.py
|
|
274
274
|
airbyte_cdk/utils/event_timing.py
|
275
275
|
airbyte_cdk/utils/is_cloud_environment.py
|
276
276
|
airbyte_cdk/utils/mapping_helpers.py
|
277
|
+
airbyte_cdk/utils/message_utils.py
|
277
278
|
airbyte_cdk/utils/oneof_option_config.py
|
278
279
|
airbyte_cdk/utils/schema_inferrer.py
|
279
280
|
airbyte_cdk/utils/spec_schema_transformations.py
|
@@ -461,6 +462,7 @@ unit_tests/test/mock_http/test_response_builder.py
|
|
461
462
|
unit_tests/utils/__init__.py
|
462
463
|
unit_tests/utils/test_datetime_format_inferrer.py
|
463
464
|
unit_tests/utils/test_mapping_helpers.py
|
465
|
+
unit_tests/utils/test_message_utils.py
|
464
466
|
unit_tests/utils/test_rate_limiting.py
|
465
467
|
unit_tests/utils/test_schema_inferrer.py
|
466
468
|
unit_tests/utils/test_secret_utils.py
|
@@ -36,7 +36,7 @@ setup(
|
|
36
36
|
name="airbyte-cdk",
|
37
37
|
# The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be
|
38
38
|
# updated if our semver format changes such as using release candidate versions.
|
39
|
-
version="0.
|
39
|
+
version="0.69.1",
|
40
40
|
description="A framework for writing Airbyte Connectors.",
|
41
41
|
long_description=README,
|
42
42
|
long_description_content_type="text/markdown",
|
@@ -20,7 +20,7 @@ from airbyte_cdk.sources.concurrent_source.concurrent_source_adapter import Conc
|
|
20
20
|
from airbyte_cdk.sources.message import InMemoryMessageRepository
|
21
21
|
from airbyte_cdk.sources.streams import Stream
|
22
22
|
from airbyte_cdk.sources.streams.concurrent.adapters import StreamFacade
|
23
|
-
from airbyte_cdk.sources.streams.concurrent.cursor import
|
23
|
+
from airbyte_cdk.sources.streams.concurrent.cursor import FinalStateCursor
|
24
24
|
|
25
25
|
|
26
26
|
class _MockSource(ConcurrentSourceAdapter):
|
@@ -36,7 +36,7 @@ class _MockSource(ConcurrentSourceAdapter):
|
|
36
36
|
|
37
37
|
def streams(self, config: Mapping[str, Any]) -> List[Stream]:
|
38
38
|
return [
|
39
|
-
StreamFacade.create_from_stream(s, self, self._logger, None,
|
39
|
+
StreamFacade.create_from_stream(s, self, self._logger, None, FinalStateCursor(stream_name=s.name, stream_namespace=s.namespace, message_repository=InMemoryMessageRepository())) if is_concurrent else s
|
40
40
|
for s, is_concurrent in self._streams_to_is_concurrent.items()
|
41
41
|
]
|
42
42
|
|
{airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/csv_scenarios.py
RENAMED
@@ -467,30 +467,24 @@ single_csv_scenario: TestScenario[InMemoryFilesSource] = (
|
|
467
467
|
)
|
468
468
|
).build()
|
469
469
|
|
470
|
-
|
470
|
+
csv_analytics_scenario: TestScenario[InMemoryFilesSource] = (
|
471
471
|
TestScenarioBuilder[InMemoryFilesSource]()
|
472
|
-
.set_name("
|
472
|
+
.set_name("csv_analytics")
|
473
473
|
.set_config(
|
474
474
|
{
|
475
475
|
"streams": [
|
476
476
|
{
|
477
477
|
"name": "stream1",
|
478
478
|
"format": {"filetype": "csv"},
|
479
|
-
"globs": ["
|
479
|
+
"globs": ["a.csv"],
|
480
480
|
"validation_policy": "Emit Record",
|
481
481
|
},
|
482
482
|
{
|
483
483
|
"name": "stream2",
|
484
484
|
"format": {"filetype": "csv"},
|
485
|
-
"globs": ["
|
486
|
-
"validation_policy": "Emit Record",
|
487
|
-
},
|
488
|
-
{
|
489
|
-
"name": "stream3",
|
490
|
-
"format": {"filetype": "jsonl"},
|
491
|
-
"globs": ["file3.jsonl"],
|
485
|
+
"globs": ["b.csv"],
|
492
486
|
"validation_policy": "Emit Record",
|
493
|
-
}
|
487
|
+
}
|
494
488
|
]
|
495
489
|
}
|
496
490
|
)
|
@@ -498,17 +492,21 @@ multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
|
|
498
492
|
FileBasedSourceBuilder()
|
499
493
|
.set_files(
|
500
494
|
{
|
501
|
-
"
|
502
|
-
"contents": [
|
495
|
+
"a.csv": {
|
496
|
+
"contents": [
|
497
|
+
("col1", "col2"),
|
498
|
+
("val11a", "val12a"),
|
499
|
+
("val21a", "val22a"),
|
500
|
+
],
|
503
501
|
"last_modified": "2023-06-05T03:54:07.000Z",
|
504
502
|
},
|
505
|
-
"
|
506
|
-
"contents": [
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
"last_modified": "2023-06-
|
503
|
+
"b.csv": {
|
504
|
+
"contents": [
|
505
|
+
("col1", "col2", "col3"),
|
506
|
+
("val11b", "val12b", "val13b"),
|
507
|
+
("val21b", "val22b", "val23b"),
|
508
|
+
],
|
509
|
+
"last_modified": "2023-06-05T03:54:07.000Z",
|
512
510
|
},
|
513
511
|
}
|
514
512
|
)
|
@@ -521,7 +519,12 @@ multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
|
|
521
519
|
"default_cursor_field": ["_ab_source_file_last_modified"],
|
522
520
|
"json_schema": {
|
523
521
|
"type": "object",
|
524
|
-
"properties": {
|
522
|
+
"properties": {
|
523
|
+
"col1": {"type": ["null", "string"]},
|
524
|
+
"col2": {"type": ["null", "string"]},
|
525
|
+
"_ab_source_file_last_modified": {"type": "string"},
|
526
|
+
"_ab_source_file_url": {"type": "string"},
|
527
|
+
},
|
525
528
|
},
|
526
529
|
"name": "stream1",
|
527
530
|
"source_defined_cursor": True,
|
@@ -531,30 +534,64 @@ multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
|
|
531
534
|
"default_cursor_field": ["_ab_source_file_last_modified"],
|
532
535
|
"json_schema": {
|
533
536
|
"type": "object",
|
534
|
-
"properties": {
|
537
|
+
"properties": {
|
538
|
+
"col1": {"type": ["null", "string"]},
|
539
|
+
"col2": {"type": ["null", "string"]},
|
540
|
+
"col3": {"type": ["null", "string"]},
|
541
|
+
"_ab_source_file_last_modified": {"type": "string"},
|
542
|
+
"_ab_source_file_url": {"type": "string"},
|
543
|
+
},
|
535
544
|
},
|
536
545
|
"name": "stream2",
|
537
546
|
"source_defined_cursor": True,
|
538
547
|
"supported_sync_modes": ["full_refresh", "incremental"],
|
539
|
-
}
|
540
|
-
{
|
541
|
-
"default_cursor_field": ["_ab_source_file_last_modified"],
|
542
|
-
"json_schema": {
|
543
|
-
"type": "object",
|
544
|
-
"properties": {},
|
545
|
-
},
|
546
|
-
"name": "stream3",
|
547
|
-
"source_defined_cursor": True,
|
548
|
-
"supported_sync_modes": ["full_refresh", "incremental"],
|
549
|
-
},
|
548
|
+
}
|
550
549
|
]
|
551
550
|
}
|
552
551
|
)
|
553
|
-
.set_expected_records([
|
552
|
+
.set_expected_records([
|
553
|
+
{
|
554
|
+
"data": {
|
555
|
+
"col1": "val11a",
|
556
|
+
"col2": "val12a",
|
557
|
+
"_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
|
558
|
+
"_ab_source_file_url": "a.csv",
|
559
|
+
},
|
560
|
+
"stream": "stream1",
|
561
|
+
},
|
562
|
+
{
|
563
|
+
"data": {
|
564
|
+
"col1": "val21a",
|
565
|
+
"col2": "val22a",
|
566
|
+
"_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
|
567
|
+
"_ab_source_file_url": "a.csv",
|
568
|
+
},
|
569
|
+
"stream": "stream1",
|
570
|
+
},
|
571
|
+
{
|
572
|
+
"data": {
|
573
|
+
"col1": "val11b",
|
574
|
+
"col2": "val12b",
|
575
|
+
"col3": "val13b",
|
576
|
+
"_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
|
577
|
+
"_ab_source_file_url": "b.csv",
|
578
|
+
},
|
579
|
+
"stream": "stream2",
|
580
|
+
},
|
581
|
+
{
|
582
|
+
"data": {
|
583
|
+
"col1": "val21b",
|
584
|
+
"col2": "val22b",
|
585
|
+
"col3": "val23b",
|
586
|
+
"_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
|
587
|
+
"_ab_source_file_url": "b.csv",
|
588
|
+
},
|
589
|
+
"stream": "stream2",
|
590
|
+
},
|
591
|
+
])
|
554
592
|
.set_expected_analytics(
|
555
593
|
[
|
556
594
|
AirbyteAnalyticsTraceMessage(type="file-cdk-csv-stream-count", value="2"),
|
557
|
-
AirbyteAnalyticsTraceMessage(type="file-cdk-jsonl-stream-count", value="1"),
|
558
595
|
]
|
559
596
|
)
|
560
597
|
).build()
|
@@ -1450,7 +1487,6 @@ empty_schema_inference_scenario: TestScenario[InMemoryFilesSource] = (
|
|
1450
1487
|
}
|
1451
1488
|
)
|
1452
1489
|
.set_expected_discover_error(AirbyteTracedException, FileBasedSourceError.SCHEMA_INFERENCE_ERROR.value)
|
1453
|
-
.set_expected_records([])
|
1454
1490
|
).build()
|
1455
1491
|
|
1456
1492
|
schemaless_csv_scenario: TestScenario[InMemoryFilesSource] = (
|
@@ -3009,6 +3045,61 @@ earlier_csv_scenario: TestScenario[InMemoryFilesSource] = (
|
|
3009
3045
|
]
|
3010
3046
|
}
|
3011
3047
|
)
|
3012
|
-
.set_expected_records([])
|
3013
3048
|
.set_expected_discover_error(AirbyteTracedException, FileBasedSourceError.SCHEMA_INFERENCE_ERROR.value)
|
3014
3049
|
).build()
|
3050
|
+
|
3051
|
+
csv_no_records_scenario: TestScenario[InMemoryFilesSource] = (
|
3052
|
+
TestScenarioBuilder[InMemoryFilesSource]()
|
3053
|
+
.set_name("csv_empty_no_records")
|
3054
|
+
.set_config(
|
3055
|
+
{
|
3056
|
+
"streams": [
|
3057
|
+
{
|
3058
|
+
"name": "stream1",
|
3059
|
+
"globs": ["*"],
|
3060
|
+
"validation_policy": "Emit Record",
|
3061
|
+
"input_schema": '{"col1": "boolean", "col2": "string"}',
|
3062
|
+
"format": {
|
3063
|
+
"filetype": "csv",
|
3064
|
+
"null_values": ["null"],
|
3065
|
+
},
|
3066
|
+
}
|
3067
|
+
],
|
3068
|
+
"start_date": "2023-06-04T03:54:07.000000Z",
|
3069
|
+
}
|
3070
|
+
)
|
3071
|
+
.set_source_builder(
|
3072
|
+
FileBasedSourceBuilder()
|
3073
|
+
.set_files(
|
3074
|
+
{
|
3075
|
+
"a.csv": {
|
3076
|
+
"contents": [("col1", "col2")], # column headers, but no data rows
|
3077
|
+
"last_modified": "2023-06-05T03:54:07.000Z",
|
3078
|
+
}
|
3079
|
+
}
|
3080
|
+
)
|
3081
|
+
.set_file_type("csv")
|
3082
|
+
)
|
3083
|
+
.set_expected_catalog(
|
3084
|
+
{
|
3085
|
+
"streams": [
|
3086
|
+
{
|
3087
|
+
"default_cursor_field": ["_ab_source_file_last_modified"],
|
3088
|
+
"json_schema": {
|
3089
|
+
"type": "object",
|
3090
|
+
"properties": {
|
3091
|
+
"col1": {"type": "boolean"},
|
3092
|
+
"col2": {"type": "string"},
|
3093
|
+
"_ab_source_file_last_modified": {"type": "string"},
|
3094
|
+
"_ab_source_file_url": {"type": "string"},
|
3095
|
+
},
|
3096
|
+
},
|
3097
|
+
"name": "stream1",
|
3098
|
+
"source_defined_cursor": True,
|
3099
|
+
"supported_sync_modes": ["full_refresh", "incremental"],
|
3100
|
+
}
|
3101
|
+
]
|
3102
|
+
}
|
3103
|
+
)
|
3104
|
+
.set_expected_records([])
|
3105
|
+
).build()
|
@@ -23,7 +23,7 @@ from airbyte_cdk.sources.file_based.stream.concurrent.adapters import (
|
|
23
23
|
FileBasedStreamPartition,
|
24
24
|
FileBasedStreamPartitionGenerator,
|
25
25
|
)
|
26
|
-
from airbyte_cdk.sources.file_based.stream.concurrent.cursor import
|
26
|
+
from airbyte_cdk.sources.file_based.stream.concurrent.cursor import FileBasedFinalStateCursor
|
27
27
|
from airbyte_cdk.sources.message import InMemoryMessageRepository
|
28
28
|
from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
|
29
29
|
from airbyte_cdk.sources.streams.concurrent.exceptions import ExceptionWithDisplayMessage
|
@@ -36,7 +36,7 @@ _ANY_SYNC_MODE = SyncMode.full_refresh
|
|
36
36
|
_ANY_STATE = {"state_key": "state_value"}
|
37
37
|
_ANY_CURSOR_FIELD = ["a", "cursor", "key"]
|
38
38
|
_STREAM_NAME = "stream"
|
39
|
-
_ANY_CURSOR = Mock(spec=
|
39
|
+
_ANY_CURSOR = Mock(spec=FileBasedFinalStateCursor)
|
40
40
|
|
41
41
|
|
42
42
|
@pytest.mark.parametrize(
|
@@ -165,7 +165,7 @@ class StreamFacadeTest(unittest.TestCase):
|
|
165
165
|
supported_sync_modes=[SyncMode.full_refresh],
|
166
166
|
)
|
167
167
|
self._legacy_stream = DefaultFileBasedStream(
|
168
|
-
cursor=
|
168
|
+
cursor=FileBasedFinalStateCursor(stream_config=MagicMock(), stream_namespace=None, message_repository=Mock()),
|
169
169
|
config=FileBasedStreamConfig(name="stream", format=CsvFormat()),
|
170
170
|
catalog_schema={},
|
171
171
|
stream_reader=MagicMock(),
|