airbyte-cdk 0.62.2__tar.gz → 0.63.1__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/PKG-INFO +1 -1
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/abstract_source.py +34 -13
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +3 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/traced_exception.py +16 -1
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/PKG-INFO +1 -1
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/setup.py +1 -1
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_abstract_source.py +173 -29
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_integration_source.py +25 -8
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_source_read.py +1 -1
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/LICENSE.txt +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/README.md +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/logger.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/py.typed +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/create_partial.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/class_types_registry.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_action.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_status.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/stream_slicers/cartesian_product_stream_slicer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/deprecated/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/deprecated/base_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/deprecated/client.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_noop_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/singer/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/singer/singer_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/singer/source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/record.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/core.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/oauth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/token.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/utils/stream_helper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/catalog_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/schema_models.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/SOURCES.txt +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/dependency_links.txt +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/requires.txt +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/top_level.txt +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/pyproject.toml +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/setup.cfg +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/source_declarative_manifest/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/source_declarative_manifest/main.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/test_connector_builder_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/test_message_grouper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/destinations/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/destinations/test_destination.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/singer/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/singer/test_singer_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/singer/test_singer_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/concurrent_source/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/concurrent_source/test_concurrent_source_adapter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_oauth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_selective_authenticator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_session_token_auth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_token_auth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_token_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/checks/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/checks/test_check_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/decoders/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/decoders/test_json_decoder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/external_component.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/test_record_filter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/test_record_selector.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/test_datetime_based_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor_integration.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_filters.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_mapping.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_nested_mapping.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_string.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_jinja.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_macros.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/testing_components.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/test_list_partition_router.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/test_single_partition_router.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/test_substream_partition_router.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_constant_backoff.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_exponential_backoff.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_header_helper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_time_from_header.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_until_time_from_header.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_composite_error_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_default_error_handler.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_http_response_filter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_response_status.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_cursor_pagination_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_no_paginator.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_request_option.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/test_http_requester.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/test_interpolated_request_input_provider.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/source_test/SourceTest.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/source_test/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/test_default_schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/test_inline_schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/test_json_file_schema_loader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/states/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/stream_slicers/test_cartesian_product_stream_slicer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_create_partial.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_declarative_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_manifest_declarative_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_yaml_declarative_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/test_abstract_file_based_spec.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/test_csv_format.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/test_file_based_stream_config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/discovery_policy/test_default_discovery_policy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_avro_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_csv_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_jsonl_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_parquet_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_unstructured_parser.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/in_memory_files_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/avro_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/check_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/concurrent_incremental_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/csv_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/file_based_source_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/incremental_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/jsonl_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/parquet_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/scenario_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/unstructured_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/user_input_schema_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/validation_policy_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/concurrent/test_adapters.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/concurrent/test_file_based_concurrent_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/test_default_file_based_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/test_default_file_based_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_file_based_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_file_based_stream_reader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_schema_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/fixtures/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/fixtures/source_test_fixture.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/message/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/message/test_repository.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/incremental_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/test_concurrent_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_scenarios.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_source_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_adapters.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_concurrent_read_processor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_cursor.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_datetime_state_converter.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_default_stream.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_partition_enqueuer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_partition_reader.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_thread_pool_manager.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/auth/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/auth/test_auth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/test_availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/test_http.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_availability_strategy.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_call_rate.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_stream_read.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_streams_core.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_concurrent_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_config.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_connector_state_manager.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_http_logger.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_source.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_matcher.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_mocker.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_request.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_response_builder.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/test_entrypoint_wrapper.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/__init__.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_datetime_format_inferrer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_mapping_helpers.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_rate_limiting.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_schema_inferrer.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_secret_utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_stream_status_utils.py +0 -0
- {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_traced_exception.py +0 -0
@@ -14,7 +14,9 @@ from airbyte_cdk.models import (
|
|
14
14
|
AirbyteStreamStatus,
|
15
15
|
ConfiguredAirbyteCatalog,
|
16
16
|
ConfiguredAirbyteStream,
|
17
|
+
FailureType,
|
17
18
|
Status,
|
19
|
+
StreamDescriptor,
|
18
20
|
SyncMode,
|
19
21
|
)
|
20
22
|
from airbyte_cdk.models import Type as MessageType
|
@@ -27,6 +29,7 @@ from airbyte_cdk.sources.streams.http.http import HttpStream
|
|
27
29
|
from airbyte_cdk.sources.utils.record_helper import stream_data_to_airbyte_message
|
28
30
|
from airbyte_cdk.sources.utils.schema_helpers import InternalConfig, split_config
|
29
31
|
from airbyte_cdk.sources.utils.slice_logger import DebugSliceLogger, SliceLogger
|
32
|
+
from airbyte_cdk.utils.airbyte_secrets_utils import filter_secrets
|
30
33
|
from airbyte_cdk.utils.event_timing import create_timer
|
31
34
|
from airbyte_cdk.utils.stream_status_utils import as_airbyte_message as stream_status_as_airbyte_message
|
32
35
|
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
@@ -133,11 +136,16 @@ class AbstractSource(Source, ABC):
|
|
133
136
|
logger.info(f"Marking stream {configured_stream.stream.name} as STOPPED")
|
134
137
|
yield stream_status_as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.COMPLETE)
|
135
138
|
except AirbyteTracedException as e:
|
139
|
+
logger.exception(f"Encountered an exception while reading stream {configured_stream.stream.name}")
|
140
|
+
logger.info(f"Marking stream {configured_stream.stream.name} as STOPPED")
|
136
141
|
yield stream_status_as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.INCOMPLETE)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
142
|
+
yield e.as_sanitized_airbyte_message(stream_descriptor=StreamDescriptor(name=configured_stream.stream.name))
|
143
|
+
stream_name_to_exception[stream_instance.name] = e
|
144
|
+
if self.stop_sync_on_stream_failure:
|
145
|
+
logger.info(
|
146
|
+
f"Stopping sync on error from stream {configured_stream.stream.name} because {self.name} does not support continuing syncs on error."
|
147
|
+
)
|
148
|
+
break
|
141
149
|
except Exception as e:
|
142
150
|
yield from self._emit_queued_messages()
|
143
151
|
logger.exception(f"Encountered an exception while reading stream {configured_stream.stream.name}")
|
@@ -145,15 +153,28 @@ class AbstractSource(Source, ABC):
|
|
145
153
|
yield stream_status_as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.INCOMPLETE)
|
146
154
|
display_message = stream_instance.get_error_display_message(e)
|
147
155
|
if display_message:
|
148
|
-
|
149
|
-
|
156
|
+
traced_exception = AirbyteTracedException.from_exception(e, message=display_message)
|
157
|
+
else:
|
158
|
+
traced_exception = AirbyteTracedException.from_exception(e)
|
159
|
+
yield traced_exception.as_sanitized_airbyte_message(
|
160
|
+
stream_descriptor=StreamDescriptor(name=configured_stream.stream.name)
|
161
|
+
)
|
162
|
+
stream_name_to_exception[stream_instance.name] = traced_exception
|
163
|
+
if self.stop_sync_on_stream_failure:
|
164
|
+
logger.info(f"{self.name} does not support continuing syncs on error from stream {configured_stream.stream.name}")
|
165
|
+
break
|
150
166
|
finally:
|
151
167
|
timer.finish_event()
|
152
168
|
logger.info(f"Finished syncing {configured_stream.stream.name}")
|
153
169
|
logger.info(timer.report())
|
154
170
|
|
155
|
-
if
|
156
|
-
|
171
|
+
if len(stream_name_to_exception) > 0:
|
172
|
+
error_message = self._generate_failed_streams_error_message(stream_name_to_exception)
|
173
|
+
logger.info(error_message)
|
174
|
+
# We still raise at least one exception when a stream raises an exception because the platform currently relies
|
175
|
+
# on a non-zero exit code to determine if a sync attempt has failed. We also raise the exception as a config_error
|
176
|
+
# type because this combined error isn't actionable, but rather the previously emitted individual errors.
|
177
|
+
raise AirbyteTracedException(message=error_message, failure_type=FailureType.config_error)
|
157
178
|
logger.info(f"Finished syncing {self.name}")
|
158
179
|
|
159
180
|
@property
|
@@ -282,17 +303,17 @@ class AbstractSource(Source, ABC):
|
|
282
303
|
return _default_message_repository
|
283
304
|
|
284
305
|
@property
|
285
|
-
def
|
306
|
+
def stop_sync_on_stream_failure(self) -> bool:
|
286
307
|
"""
|
287
308
|
WARNING: This function is in-development which means it is subject to change. Use at your own risk.
|
288
309
|
|
289
|
-
By default, a source
|
290
|
-
|
291
|
-
|
310
|
+
By default, when a source encounters an exception while syncing a stream, it will emit an error trace message and then
|
311
|
+
continue syncing the next stream. This can be overwritten on a per-source basis so that the source will stop the sync
|
312
|
+
on the first error seen and emit a single error trace message for that stream.
|
292
313
|
"""
|
293
314
|
return False
|
294
315
|
|
295
316
|
@staticmethod
|
296
317
|
def _generate_failed_streams_error_message(stream_failures: Mapping[str, AirbyteTracedException]) -> str:
|
297
|
-
failures = ", ".join([f"{stream}: {exception.__repr__()}" for stream, exception in stream_failures.items()])
|
318
|
+
failures = ", ".join([f"{stream}: {filter_secrets(exception.__repr__())}" for stream, exception in stream_failures.items()])
|
298
319
|
return f"During the sync, the following streams did not sync successfully: {failures}"
|
@@ -243,6 +243,9 @@ class FileBasedStreamPartition(Partition):
|
|
243
243
|
data_to_return = dict(record_data)
|
244
244
|
self._stream.transformer.transform(data_to_return, self._stream.get_json_schema())
|
245
245
|
yield Record(data_to_return, self.stream_name())
|
246
|
+
elif isinstance(record_data, AirbyteMessage) and record_data.type == Type.RECORD:
|
247
|
+
# `AirbyteMessage`s of type `Record` should also be yielded so they are enqueued
|
248
|
+
yield Record(record_data.record.data, self.stream_name())
|
246
249
|
else:
|
247
250
|
self._message_repository.emit_message(record_data)
|
248
251
|
except Exception as e:
|
@@ -13,6 +13,7 @@ from airbyte_cdk.models import (
|
|
13
13
|
AirbyteTraceMessage,
|
14
14
|
FailureType,
|
15
15
|
Status,
|
16
|
+
StreamDescriptor,
|
16
17
|
TraceType,
|
17
18
|
)
|
18
19
|
from airbyte_cdk.models import Type as MessageType
|
@@ -43,7 +44,7 @@ class AirbyteTracedException(Exception):
|
|
43
44
|
self._exception = exception
|
44
45
|
super().__init__(internal_message)
|
45
46
|
|
46
|
-
def as_airbyte_message(self) -> AirbyteMessage:
|
47
|
+
def as_airbyte_message(self, stream_descriptor: StreamDescriptor = None) -> AirbyteMessage:
|
47
48
|
"""
|
48
49
|
Builds an AirbyteTraceMessage from the exception
|
49
50
|
"""
|
@@ -60,6 +61,7 @@ class AirbyteTracedException(Exception):
|
|
60
61
|
internal_message=self.internal_message,
|
61
62
|
failure_type=self.failure_type,
|
62
63
|
stack_trace=stack_trace_str,
|
64
|
+
stream_descriptor=stream_descriptor,
|
63
65
|
),
|
64
66
|
)
|
65
67
|
|
@@ -88,3 +90,16 @@ class AirbyteTracedException(Exception):
|
|
88
90
|
:param exc: the exception that caused the error
|
89
91
|
"""
|
90
92
|
return cls(internal_message=str(exc), exception=exc, *args, **kwargs) # type: ignore # ignoring because of args and kwargs
|
93
|
+
|
94
|
+
def as_sanitized_airbyte_message(self, stream_descriptor: StreamDescriptor = None) -> AirbyteMessage:
|
95
|
+
"""
|
96
|
+
Builds an AirbyteTraceMessage from the exception and sanitizes any secrets from the message body
|
97
|
+
"""
|
98
|
+
error_message = self.as_airbyte_message(stream_descriptor=stream_descriptor)
|
99
|
+
if error_message.trace.error.message:
|
100
|
+
error_message.trace.error.message = filter_secrets(error_message.trace.error.message)
|
101
|
+
if error_message.trace.error.internal_message:
|
102
|
+
error_message.trace.error.internal_message = filter_secrets(error_message.trace.error.internal_message)
|
103
|
+
if error_message.trace.error.stack_trace:
|
104
|
+
error_message.trace.error.stack_trace = filter_secrets(error_message.trace.error.stack_trace)
|
105
|
+
return error_message
|
@@ -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.63.1",
|
40
40
|
description="A framework for writing Airbyte Connectors.",
|
41
41
|
long_description=README,
|
42
42
|
long_description_content_type="text/markdown",
|
@@ -13,6 +13,7 @@ import pytest
|
|
13
13
|
from airbyte_cdk.models import (
|
14
14
|
AirbyteCatalog,
|
15
15
|
AirbyteConnectionStatus,
|
16
|
+
AirbyteErrorTraceMessage,
|
16
17
|
AirbyteLogMessage,
|
17
18
|
AirbyteMessage,
|
18
19
|
AirbyteRecordMessage,
|
@@ -27,6 +28,7 @@ from airbyte_cdk.models import (
|
|
27
28
|
ConfiguredAirbyteCatalog,
|
28
29
|
ConfiguredAirbyteStream,
|
29
30
|
DestinationSyncMode,
|
31
|
+
FailureType,
|
30
32
|
Level,
|
31
33
|
Status,
|
32
34
|
StreamDescriptor,
|
@@ -40,6 +42,7 @@ from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
|
|
40
42
|
from airbyte_cdk.sources.message import MessageRepository
|
41
43
|
from airbyte_cdk.sources.streams import IncrementalMixin, Stream
|
42
44
|
from airbyte_cdk.sources.utils.record_helper import stream_data_to_airbyte_message
|
45
|
+
from airbyte_cdk.utils.airbyte_secrets_utils import update_secrets
|
43
46
|
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
44
47
|
from pytest import fixture
|
45
48
|
|
@@ -54,12 +57,14 @@ class MockSource(AbstractSource):
|
|
54
57
|
per_stream: bool = True,
|
55
58
|
message_repository: MessageRepository = None,
|
56
59
|
exception_on_missing_stream: bool = True,
|
60
|
+
stop_sync_on_stream_failure: bool = False,
|
57
61
|
):
|
58
62
|
self._streams = streams
|
59
63
|
self.check_lambda = check_lambda
|
60
64
|
self.per_stream = per_stream
|
61
65
|
self.exception_on_missing_stream = exception_on_missing_stream
|
62
66
|
self._message_repository = message_repository
|
67
|
+
self._stop_sync_on_stream_failure = stop_sync_on_stream_failure
|
63
68
|
|
64
69
|
def check_connection(self, logger: logging.Logger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]:
|
65
70
|
if self.check_lambda:
|
@@ -84,6 +89,12 @@ class MockSource(AbstractSource):
|
|
84
89
|
return self._message_repository
|
85
90
|
|
86
91
|
|
92
|
+
class MockSourceWithStopSyncFalseOverride(MockSource):
|
93
|
+
@property
|
94
|
+
def stop_sync_on_stream_failure(self) -> bool:
|
95
|
+
return False
|
96
|
+
|
97
|
+
|
87
98
|
class StreamNoStateMethod(Stream):
|
88
99
|
name = "managers"
|
89
100
|
primary_key = None
|
@@ -115,8 +126,11 @@ class StreamRaisesException(Stream):
|
|
115
126
|
name = "lamentations"
|
116
127
|
primary_key = None
|
117
128
|
|
129
|
+
def __init__(self, exception_to_raise):
|
130
|
+
self._exception_to_raise = exception_to_raise
|
131
|
+
|
118
132
|
def read_records(self, *args, **kwargs) -> Iterable[Mapping[str, Any]]:
|
119
|
-
raise
|
133
|
+
raise self._exception_to_raise
|
120
134
|
|
121
135
|
|
122
136
|
MESSAGE_FROM_REPOSITORY = Mock()
|
@@ -291,7 +305,7 @@ def test_read_stream_emits_repository_message_on_error(mocker, message_repositor
|
|
291
305
|
|
292
306
|
source = MockSource(streams=[stream], message_repository=message_repository)
|
293
307
|
|
294
|
-
with pytest.raises(
|
308
|
+
with pytest.raises(AirbyteTracedException):
|
295
309
|
messages = list(source.read(logger, {}, ConfiguredAirbyteCatalog(streams=[_configured_stream(stream, SyncMode.full_refresh)])))
|
296
310
|
assert MESSAGE_FROM_REPOSITORY in messages
|
297
311
|
|
@@ -306,14 +320,14 @@ def test_read_stream_with_error_gets_display_message(mocker):
|
|
306
320
|
catalog = ConfiguredAirbyteCatalog(streams=[_configured_stream(stream, SyncMode.full_refresh)])
|
307
321
|
|
308
322
|
# without get_error_display_message
|
309
|
-
with pytest.raises(
|
323
|
+
with pytest.raises(AirbyteTracedException):
|
310
324
|
list(source.read(logger, {}, catalog))
|
311
325
|
|
312
326
|
mocker.patch.object(MockStream, "get_error_display_message", return_value="my message")
|
313
327
|
|
314
|
-
with pytest.raises(AirbyteTracedException
|
328
|
+
with pytest.raises(AirbyteTracedException) as exc:
|
315
329
|
list(source.read(logger, {}, catalog))
|
316
|
-
assert exc.value.message
|
330
|
+
assert "oh no!" in exc.value.message
|
317
331
|
|
318
332
|
|
319
333
|
GLOBAL_EMITTED_AT = 1
|
@@ -358,6 +372,22 @@ def _as_state(state_data: Dict[str, Any], stream_name: str = "", per_stream_stat
|
|
358
372
|
return AirbyteMessage(type=Type.STATE, state=AirbyteStateMessage(data=state_data))
|
359
373
|
|
360
374
|
|
375
|
+
def _as_error_trace(stream: str, error_message: str, internal_message: Optional[str], failure_type: Optional[FailureType], stack_trace: Optional[str]) -> AirbyteMessage:
|
376
|
+
trace_message = AirbyteTraceMessage(
|
377
|
+
emitted_at=datetime.datetime.now().timestamp() * 1000.0,
|
378
|
+
type=TraceType.ERROR,
|
379
|
+
error=AirbyteErrorTraceMessage(
|
380
|
+
stream_descriptor=StreamDescriptor(name=stream),
|
381
|
+
message=error_message,
|
382
|
+
internal_message=internal_message,
|
383
|
+
failure_type=failure_type,
|
384
|
+
stack_trace=stack_trace,
|
385
|
+
),
|
386
|
+
)
|
387
|
+
|
388
|
+
return AirbyteMessage(type=MessageType.TRACE, trace=trace_message)
|
389
|
+
|
390
|
+
|
361
391
|
def _configured_stream(stream: Stream, sync_mode: SyncMode):
|
362
392
|
return ConfiguredAirbyteStream(
|
363
393
|
stream=stream.as_airbyte_stream(),
|
@@ -1174,21 +1204,27 @@ def test_checkpoint_state_from_stream_instance():
|
|
1174
1204
|
)
|
1175
1205
|
|
1176
1206
|
|
1177
|
-
|
1207
|
+
@pytest.mark.parametrize(
|
1208
|
+
"exception_to_raise,expected_error_message,expected_internal_message",
|
1209
|
+
[
|
1210
|
+
pytest.param(AirbyteTracedException(message="I was born only to crash like Icarus"), "I was born only to crash like Icarus", None, id="test_raises_traced_exception"),
|
1211
|
+
pytest.param(Exception("Generic connector error message"), "Something went wrong in the connector. See the logs for more details.", "Generic connector error message", id="test_raises_generic_exception"),
|
1212
|
+
]
|
1213
|
+
)
|
1214
|
+
def test_continue_sync_with_failed_streams(mocker, exception_to_raise, expected_error_message, expected_internal_message):
|
1178
1215
|
"""
|
1179
|
-
Tests that running a sync for a connector with multiple streams
|
1180
|
-
|
1216
|
+
Tests that running a sync for a connector with multiple streams will continue syncing when one stream fails
|
1217
|
+
with an error. This source does not override the default behavior defined in the AbstractSource class.
|
1181
1218
|
"""
|
1182
1219
|
stream_output = [{"k1": "v1"}, {"k2": "v2"}]
|
1183
1220
|
s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
|
1184
|
-
s2 = StreamRaisesException()
|
1221
|
+
s2 = StreamRaisesException(exception_to_raise=exception_to_raise)
|
1185
1222
|
s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
|
1186
1223
|
|
1187
1224
|
mocker.patch.object(MockStream, "get_json_schema", return_value={})
|
1188
1225
|
mocker.patch.object(StreamRaisesException, "get_json_schema", return_value={})
|
1189
1226
|
|
1190
1227
|
src = MockSource(streams=[s1, s2, s3])
|
1191
|
-
mocker.patch.object(MockSource, "continue_sync_on_stream_failure", return_value=True)
|
1192
1228
|
catalog = ConfiguredAirbyteCatalog(
|
1193
1229
|
streams=[
|
1194
1230
|
_configured_stream(s1, SyncMode.full_refresh),
|
@@ -1205,6 +1241,7 @@ def test_continue_sync_with_failed_streams(mocker):
|
|
1205
1241
|
_as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
|
1206
1242
|
_as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
|
1207
1243
|
_as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
|
1244
|
+
_as_error_trace("lamentations", expected_error_message, expected_internal_message, FailureType.system_error, None),
|
1208
1245
|
_as_stream_status("s3", AirbyteStreamStatus.STARTED),
|
1209
1246
|
_as_stream_status("s3", AirbyteStreamStatus.RUNNING),
|
1210
1247
|
*_as_records("s3", stream_output),
|
@@ -1212,26 +1249,75 @@ def test_continue_sync_with_failed_streams(mocker):
|
|
1212
1249
|
]
|
1213
1250
|
)
|
1214
1251
|
|
1215
|
-
messages = []
|
1216
1252
|
with pytest.raises(AirbyteTracedException) as exc:
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1253
|
+
messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
|
1254
|
+
messages = _fix_emitted_at(messages)
|
1255
|
+
|
1256
|
+
assert expected == messages
|
1221
1257
|
|
1222
|
-
messages = _fix_emitted_at(messages)
|
1223
|
-
assert expected == messages
|
1224
1258
|
assert "lamentations" in exc.value.message
|
1259
|
+
assert exc.value.failure_type == FailureType.config_error
|
1225
1260
|
|
1226
1261
|
|
1227
|
-
def
|
1262
|
+
def test_continue_sync_source_override_false(mocker):
|
1228
1263
|
"""
|
1229
|
-
Tests that running a sync for a connector
|
1230
|
-
|
1264
|
+
Tests that running a sync for a connector explicitly overriding the default AbstractSource.stop_sync_on_stream_failure
|
1265
|
+
property to be False which will continue syncing stream even if one encountered an exception.
|
1231
1266
|
"""
|
1267
|
+
update_secrets(["API_KEY_VALUE"])
|
1268
|
+
|
1232
1269
|
stream_output = [{"k1": "v1"}, {"k2": "v2"}]
|
1233
1270
|
s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
|
1234
|
-
s2 = StreamRaisesException()
|
1271
|
+
s2 = StreamRaisesException(exception_to_raise=AirbyteTracedException(message="I was born only to crash like Icarus"))
|
1272
|
+
s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
|
1273
|
+
|
1274
|
+
mocker.patch.object(MockStream, "get_json_schema", return_value={})
|
1275
|
+
mocker.patch.object(StreamRaisesException, "get_json_schema", return_value={})
|
1276
|
+
|
1277
|
+
src = MockSourceWithStopSyncFalseOverride(streams=[s1, s2, s3])
|
1278
|
+
catalog = ConfiguredAirbyteCatalog(
|
1279
|
+
streams=[
|
1280
|
+
_configured_stream(s1, SyncMode.full_refresh),
|
1281
|
+
_configured_stream(s2, SyncMode.full_refresh),
|
1282
|
+
_configured_stream(s3, SyncMode.full_refresh),
|
1283
|
+
]
|
1284
|
+
)
|
1285
|
+
|
1286
|
+
expected = _fix_emitted_at(
|
1287
|
+
[
|
1288
|
+
_as_stream_status("s1", AirbyteStreamStatus.STARTED),
|
1289
|
+
_as_stream_status("s1", AirbyteStreamStatus.RUNNING),
|
1290
|
+
*_as_records("s1", stream_output),
|
1291
|
+
_as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
|
1292
|
+
_as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
|
1293
|
+
_as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
|
1294
|
+
_as_error_trace("lamentations", "I was born only to crash like Icarus", None, FailureType.system_error, None),
|
1295
|
+
_as_stream_status("s3", AirbyteStreamStatus.STARTED),
|
1296
|
+
_as_stream_status("s3", AirbyteStreamStatus.RUNNING),
|
1297
|
+
*_as_records("s3", stream_output),
|
1298
|
+
_as_stream_status("s3", AirbyteStreamStatus.COMPLETE),
|
1299
|
+
]
|
1300
|
+
)
|
1301
|
+
|
1302
|
+
with pytest.raises(AirbyteTracedException) as exc:
|
1303
|
+
messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
|
1304
|
+
messages = _fix_emitted_at(messages)
|
1305
|
+
|
1306
|
+
assert expected == messages
|
1307
|
+
|
1308
|
+
assert "lamentations" in exc.value.message
|
1309
|
+
assert exc.value.failure_type == FailureType.config_error
|
1310
|
+
|
1311
|
+
|
1312
|
+
def test_sync_error_trace_messages_obfuscate_secrets(mocker):
|
1313
|
+
"""
|
1314
|
+
Tests that exceptions emitted as trace messages by a source have secrets properly sanitized
|
1315
|
+
"""
|
1316
|
+
update_secrets(["API_KEY_VALUE"])
|
1317
|
+
|
1318
|
+
stream_output = [{"k1": "v1"}, {"k2": "v2"}]
|
1319
|
+
s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
|
1320
|
+
s2 = StreamRaisesException(exception_to_raise=AirbyteTracedException(message="My api_key value API_KEY_VALUE flew too close to the sun."))
|
1235
1321
|
s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
|
1236
1322
|
|
1237
1323
|
mocker.patch.object(MockStream, "get_json_schema", return_value={})
|
@@ -1254,15 +1340,73 @@ def test_stop_sync_with_failed_streams(mocker):
|
|
1254
1340
|
_as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
|
1255
1341
|
_as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
|
1256
1342
|
_as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
|
1343
|
+
_as_error_trace("lamentations", "My api_key value **** flew too close to the sun.", None, FailureType.system_error, None),
|
1344
|
+
_as_stream_status("s3", AirbyteStreamStatus.STARTED),
|
1345
|
+
_as_stream_status("s3", AirbyteStreamStatus.RUNNING),
|
1346
|
+
*_as_records("s3", stream_output),
|
1347
|
+
_as_stream_status("s3", AirbyteStreamStatus.COMPLETE),
|
1257
1348
|
]
|
1258
1349
|
)
|
1259
1350
|
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
# failed streams and that disrupts parsing the generator into the messages emitted before
|
1264
|
-
for message in src.read(logger, {}, catalog):
|
1265
|
-
messages.append(message)
|
1351
|
+
with pytest.raises(AirbyteTracedException) as exc:
|
1352
|
+
messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
|
1353
|
+
messages = _fix_emitted_at(messages)
|
1266
1354
|
|
1267
|
-
|
1268
|
-
|
1355
|
+
assert expected == messages
|
1356
|
+
|
1357
|
+
assert "lamentations" in exc.value.message
|
1358
|
+
assert exc.value.failure_type == FailureType.config_error
|
1359
|
+
|
1360
|
+
|
1361
|
+
def test_continue_sync_with_failed_streams_with_override_false(mocker):
|
1362
|
+
"""
|
1363
|
+
Tests that running a sync for a connector with multiple streams and stop_sync_on_stream_failure enabled stops
|
1364
|
+
the sync when one stream fails with an error.
|
1365
|
+
"""
|
1366
|
+
stream_output = [{"k1": "v1"}, {"k2": "v2"}]
|
1367
|
+
s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
|
1368
|
+
s2 = StreamRaisesException(AirbyteTracedException(message="I was born only to crash like Icarus"))
|
1369
|
+
s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
|
1370
|
+
|
1371
|
+
mocker.patch.object(MockStream, "get_json_schema", return_value={})
|
1372
|
+
mocker.patch.object(StreamRaisesException, "get_json_schema", return_value={})
|
1373
|
+
|
1374
|
+
src = MockSource(streams=[s1, s2, s3])
|
1375
|
+
mocker.patch.object(MockSource, "stop_sync_on_stream_failure", return_value=True)
|
1376
|
+
catalog = ConfiguredAirbyteCatalog(
|
1377
|
+
streams=[
|
1378
|
+
_configured_stream(s1, SyncMode.full_refresh),
|
1379
|
+
_configured_stream(s2, SyncMode.full_refresh),
|
1380
|
+
_configured_stream(s3, SyncMode.full_refresh),
|
1381
|
+
]
|
1382
|
+
)
|
1383
|
+
|
1384
|
+
expected = _fix_emitted_at(
|
1385
|
+
[
|
1386
|
+
_as_stream_status("s1", AirbyteStreamStatus.STARTED),
|
1387
|
+
_as_stream_status("s1", AirbyteStreamStatus.RUNNING),
|
1388
|
+
*_as_records("s1", stream_output),
|
1389
|
+
_as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
|
1390
|
+
_as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
|
1391
|
+
_as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
|
1392
|
+
_as_error_trace("lamentations", "I was born only to crash like Icarus", None, FailureType.system_error, None),
|
1393
|
+
]
|
1394
|
+
)
|
1395
|
+
|
1396
|
+
with pytest.raises(AirbyteTracedException) as exc:
|
1397
|
+
messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
|
1398
|
+
messages = _fix_emitted_at(messages)
|
1399
|
+
|
1400
|
+
assert expected == messages
|
1401
|
+
|
1402
|
+
assert "lamentations" in exc.value.message
|
1403
|
+
assert exc.value.failure_type == FailureType.config_error
|
1404
|
+
|
1405
|
+
|
1406
|
+
def _remove_stack_trace(message: AirbyteMessage) -> AirbyteMessage:
|
1407
|
+
"""
|
1408
|
+
Helper method that removes the stack trace from Airbyte trace messages to make asserting against expected records easier
|
1409
|
+
"""
|
1410
|
+
if message.trace and message.trace.error and message.trace.error.stack_trace:
|
1411
|
+
message.trace.error.stack_trace = None
|
1412
|
+
return message
|
@@ -2,7 +2,9 @@
|
|
2
2
|
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
3
3
|
#
|
4
4
|
|
5
|
+
import json
|
5
6
|
import os
|
7
|
+
from typing import Any, List, Mapping
|
6
8
|
from unittest import mock
|
7
9
|
from unittest.mock import patch
|
8
10
|
|
@@ -22,9 +24,9 @@ from unit_tests.sources.fixtures.source_test_fixture import (
|
|
22
24
|
"deployment_mode, url_base, expected_records, expected_error",
|
23
25
|
[
|
24
26
|
pytest.param("CLOUD", "https://airbyte.com/api/v1/", [], None, id="test_cloud_read_with_public_endpoint"),
|
25
|
-
pytest.param("CLOUD", "http://unsecured.com/api/v1/", [],
|
26
|
-
pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [],
|
27
|
-
pytest.param("CLOUD", "https://localhost:80/api/v1/", [],
|
27
|
+
pytest.param("CLOUD", "http://unsecured.com/api/v1/", [], "system_error", id="test_cloud_read_with_unsecured_url"),
|
28
|
+
pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [], "config_error", id="test_cloud_read_with_private_endpoint"),
|
29
|
+
pytest.param("CLOUD", "https://localhost:80/api/v1/", [], "config_error", id="test_cloud_read_with_localhost"),
|
28
30
|
pytest.param("OSS", "https://airbyte.com/api/v1/", [], None, id="test_oss_read_with_public_endpoint"),
|
29
31
|
pytest.param("OSS", "https://172.20.105.99/api/v1/", [], None, id="test_oss_read_with_private_endpoint"),
|
30
32
|
],
|
@@ -37,8 +39,10 @@ def test_external_request_source(capsys, deployment_mode, url_base, expected_rec
|
|
37
39
|
with mock.patch.object(HttpTestStream, "url_base", url_base):
|
38
40
|
args = ["read", "--config", "config.json", "--catalog", "configured_catalog.json"]
|
39
41
|
if expected_error:
|
40
|
-
with pytest.raises(
|
42
|
+
with pytest.raises(AirbyteTracedException):
|
41
43
|
launch(source, args)
|
44
|
+
messages = [json.loads(line) for line in capsys.readouterr().out.splitlines()]
|
45
|
+
assert contains_error_trace_message(messages, expected_error)
|
42
46
|
else:
|
43
47
|
launch(source, args)
|
44
48
|
|
@@ -47,14 +51,14 @@ def test_external_request_source(capsys, deployment_mode, url_base, expected_rec
|
|
47
51
|
"deployment_mode, token_refresh_url, expected_records, expected_error",
|
48
52
|
[
|
49
53
|
pytest.param("CLOUD", "https://airbyte.com/api/v1/", [], None, id="test_cloud_read_with_public_endpoint"),
|
50
|
-
pytest.param("CLOUD", "http://unsecured.com/api/v1/", [],
|
51
|
-
pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [],
|
54
|
+
pytest.param("CLOUD", "http://unsecured.com/api/v1/", [], "system_error", id="test_cloud_read_with_unsecured_url"),
|
55
|
+
pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [], "config_error", id="test_cloud_read_with_private_endpoint"),
|
52
56
|
pytest.param("OSS", "https://airbyte.com/api/v1/", [], None, id="test_oss_read_with_public_endpoint"),
|
53
57
|
pytest.param("OSS", "https://172.20.105.99/api/v1/", [], None, id="test_oss_read_with_private_endpoint"),
|
54
58
|
],
|
55
59
|
)
|
56
60
|
@patch.object(requests.Session, "send", fixture_mock_send)
|
57
|
-
def test_external_oauth_request_source(deployment_mode, token_refresh_url, expected_records, expected_error):
|
61
|
+
def test_external_oauth_request_source(capsys, deployment_mode, token_refresh_url, expected_records, expected_error):
|
58
62
|
oauth_authenticator = SourceFixtureOauthAuthenticator(
|
59
63
|
client_id="nora", client_secret="hae_sung", refresh_token="arthur", token_refresh_endpoint=token_refresh_url
|
60
64
|
)
|
@@ -63,7 +67,20 @@ def test_external_oauth_request_source(deployment_mode, token_refresh_url, expec
|
|
63
67
|
with mock.patch.dict(os.environ, {"DEPLOYMENT_MODE": deployment_mode}, clear=False): # clear=True clears the existing os.environ dict
|
64
68
|
args = ["read", "--config", "config.json", "--catalog", "configured_catalog.json"]
|
65
69
|
if expected_error:
|
66
|
-
with pytest.raises(
|
70
|
+
with pytest.raises(AirbyteTracedException):
|
67
71
|
launch(source, args)
|
72
|
+
messages = [json.loads(line) for line in capsys.readouterr().out.splitlines()]
|
73
|
+
assert contains_error_trace_message(messages, expected_error)
|
68
74
|
else:
|
69
75
|
launch(source, args)
|
76
|
+
|
77
|
+
|
78
|
+
def contains_error_trace_message(messages: List[Mapping[str, Any]], expected_error: str) -> bool:
|
79
|
+
for message in messages:
|
80
|
+
if message.get("type") != "TRACE":
|
81
|
+
continue
|
82
|
+
elif message.get("trace").get("type") != "ERROR":
|
83
|
+
continue
|
84
|
+
elif message.get("trace").get("error").get("failure_type") == expected_error:
|
85
|
+
return True
|
86
|
+
return False
|
@@ -343,7 +343,7 @@ def test_concurrent_source_yields_the_same_messages_as_abstract_source_when_an_e
|
|
343
343
|
source, concurrent_source = _init_sources([stream_slice_to_partition], state, logger)
|
344
344
|
config = {}
|
345
345
|
catalog = _create_configured_catalog(source._streams)
|
346
|
-
messages_from_abstract_source = _read_from_source(source, logger, config, catalog, state,
|
346
|
+
messages_from_abstract_source = _read_from_source(source, logger, config, catalog, state, AirbyteTracedException)
|
347
347
|
messages_from_concurrent_source = _read_from_source(concurrent_source, logger, config, catalog, state, RuntimeError)
|
348
348
|
|
349
349
|
expected_messages = [
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/connector_builder_handler.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/__init__.py
RENAMED
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/config.py
RENAMED
File without changes
|
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/embedder.py
RENAMED
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/indexer.py
RENAMED
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py
RENAMED
File without changes
|
File without changes
|
{airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/writer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|