airbyte-cdk 7.3.2__tar.gz → 7.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/PKG-INFO +1 -1
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +35 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +1 -1
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +29 -1
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +63 -13
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +6 -6
- airbyte_cdk-7.3.3/airbyte_cdk/sources/declarative/retrievers/pagination_tracker.py +64 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +81 -62
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/cursor.py +51 -2
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +1 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/http_client.py +6 -0
- airbyte_cdk-7.3.3/airbyte_cdk/sources/streams/http/pagination_reset_exception.py +2 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/response_builder.py +45 -8
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/pyproject.toml +1 -1
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/LICENSE.txt +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/LICENSE_SHORT +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_connector.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_image.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_manifest.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_secrets.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_version.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/manifest_migration.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migration_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/registry.yaml +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations_registry.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/Dockerfile +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/capabilities.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/dicts.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/manifest.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/app.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_common.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_info.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_openapi.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_start.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/run.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/command_processor/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/command_processor/processor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/command_processor/utils.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/helpers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/helpers/auth.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/helpers/tracing.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/main.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/openapi.yaml +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/capabilities.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/health.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/manifest.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/connector_metadata.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/per_partition_request_option_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/composite_schema_loader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/add_fields.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/config_transformation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/remap_field.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/remove_fields.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/dpath_validator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/predicate_validator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/validate_adheres_to_schema.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/validation_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/validator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/message/concurrent_repository.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/files_directory.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/models/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/models/outcome.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/models/scenario.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/_job_runner.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/connector_base.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/declarative_sources.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/docker_base.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/util.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/connector_paths.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/docker.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -2279,12 +2279,14 @@ definitions:
|
|
2279
2279
|
- FAIL
|
2280
2280
|
- RETRY
|
2281
2281
|
- IGNORE
|
2282
|
+
- RESET_PAGINATION
|
2282
2283
|
- RATE_LIMITED
|
2283
2284
|
examples:
|
2284
2285
|
- SUCCESS
|
2285
2286
|
- FAIL
|
2286
2287
|
- RETRY
|
2287
2288
|
- IGNORE
|
2289
|
+
- RESET_PAGINATION
|
2288
2290
|
- RATE_LIMITED
|
2289
2291
|
failure_type:
|
2290
2292
|
title: Failure Type
|
@@ -3707,6 +3709,9 @@ definitions:
|
|
3707
3709
|
anyOf:
|
3708
3710
|
- "$ref": "#/definitions/DefaultPaginator"
|
3709
3711
|
- "$ref": "#/definitions/NoPagination"
|
3712
|
+
pagination_reset:
|
3713
|
+
description: Describes what triggers pagination reset and how to handle it.
|
3714
|
+
"$ref": "#/definitions/PaginationReset"
|
3710
3715
|
ignore_stream_slicer_parameters_on_paginated_requests:
|
3711
3716
|
description: If true, the partition router and incremental request options will be ignored when paginating requests. Request options set directly on the requester will not be ignored.
|
3712
3717
|
type: boolean
|
@@ -3730,6 +3735,36 @@ definitions:
|
|
3730
3735
|
$parameters:
|
3731
3736
|
type: object
|
3732
3737
|
additionalProperties: true
|
3738
|
+
PaginationReset:
|
3739
|
+
title: Pagination Reset
|
3740
|
+
description: Describes what triggers pagination reset and how to handle it. If SPLIT_USING_CURSOR, the connector developer is accountable for ensuring that the records are returned in ascending order.
|
3741
|
+
type: object
|
3742
|
+
required:
|
3743
|
+
- type
|
3744
|
+
- action
|
3745
|
+
properties:
|
3746
|
+
type:
|
3747
|
+
type: string
|
3748
|
+
enum: [ PaginationReset ]
|
3749
|
+
action:
|
3750
|
+
type: string
|
3751
|
+
enum:
|
3752
|
+
- SPLIT_USING_CURSOR
|
3753
|
+
- RESET
|
3754
|
+
limits:
|
3755
|
+
"$ref": "#/definitions/PaginationResetLimits"
|
3756
|
+
PaginationResetLimits:
|
3757
|
+
title: Pagination Reset Limits
|
3758
|
+
description: Describes the limits that trigger pagination reset
|
3759
|
+
type: object
|
3760
|
+
required:
|
3761
|
+
- type
|
3762
|
+
properties:
|
3763
|
+
type:
|
3764
|
+
type: string
|
3765
|
+
enum: [ PaginationResetLimits ]
|
3766
|
+
number_of_records:
|
3767
|
+
type: integer
|
3733
3768
|
GzipDecoder:
|
3734
3769
|
title: gzip
|
3735
3770
|
description: Select 'gzip' for response data that is compressed with gzip. Requires specifying an inner data type/decoder to parse the decompressed data.
|
@@ -151,7 +151,7 @@ class ConcurrentPerPartitionCursor(Cursor):
|
|
151
151
|
self._connector_state_converter = connector_state_converter
|
152
152
|
self._cursor_field = cursor_field
|
153
153
|
|
154
|
-
self._cursor_factory = cursor_factory
|
154
|
+
self._cursor_factory = cursor_factory # self._cursor_factory is flagged as private but is used in model_to_component_factory to ease pagination reset instantiation
|
155
155
|
self._partition_router = partition_router
|
156
156
|
|
157
157
|
# The dict is ordered to ensure that once the maximum number of partitions is reached,
|
@@ -539,6 +539,7 @@ class Action(Enum):
|
|
539
539
|
FAIL = "FAIL"
|
540
540
|
RETRY = "RETRY"
|
541
541
|
IGNORE = "IGNORE"
|
542
|
+
RESET_PAGINATION = "RESET_PAGINATION"
|
542
543
|
RATE_LIMITED = "RATE_LIMITED"
|
543
544
|
|
544
545
|
|
@@ -553,7 +554,14 @@ class HttpResponseFilter(BaseModel):
|
|
553
554
|
action: Optional[Action] = Field(
|
554
555
|
None,
|
555
556
|
description="Action to execute if a response matches the filter.",
|
556
|
-
examples=[
|
557
|
+
examples=[
|
558
|
+
"SUCCESS",
|
559
|
+
"FAIL",
|
560
|
+
"RETRY",
|
561
|
+
"IGNORE",
|
562
|
+
"RESET_PAGINATION",
|
563
|
+
"RATE_LIMITED",
|
564
|
+
],
|
557
565
|
title="Action",
|
558
566
|
)
|
559
567
|
failure_type: Optional[FailureType] = Field(
|
@@ -1173,6 +1181,16 @@ class LegacySessionTokenAuthenticator(BaseModel):
|
|
1173
1181
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
1174
1182
|
|
1175
1183
|
|
1184
|
+
class Action1(Enum):
|
1185
|
+
SPLIT_USING_CURSOR = "SPLIT_USING_CURSOR"
|
1186
|
+
RESET = "RESET"
|
1187
|
+
|
1188
|
+
|
1189
|
+
class PaginationResetLimits(BaseModel):
|
1190
|
+
type: Literal["PaginationResetLimits"]
|
1191
|
+
number_of_records: Optional[int] = None
|
1192
|
+
|
1193
|
+
|
1176
1194
|
class CsvDecoder(BaseModel):
|
1177
1195
|
type: Literal["CsvDecoder"]
|
1178
1196
|
encoding: Optional[str] = "utf-8"
|
@@ -2054,6 +2072,12 @@ class RecordSelector(BaseModel):
|
|
2054
2072
|
parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
|
2055
2073
|
|
2056
2074
|
|
2075
|
+
class PaginationReset(BaseModel):
|
2076
|
+
type: Literal["PaginationReset"]
|
2077
|
+
action: Action1
|
2078
|
+
limits: Optional[PaginationResetLimits] = None
|
2079
|
+
|
2080
|
+
|
2057
2081
|
class GzipDecoder(BaseModel):
|
2058
2082
|
type: Literal["GzipDecoder"]
|
2059
2083
|
decoder: Union[CsvDecoder, GzipDecoder, JsonDecoder, JsonlDecoder]
|
@@ -2822,6 +2846,10 @@ class SimpleRetriever(BaseModel):
|
|
2822
2846
|
None,
|
2823
2847
|
description="Paginator component that describes how to navigate through the API's pages.",
|
2824
2848
|
)
|
2849
|
+
pagination_reset: Optional[PaginationReset] = Field(
|
2850
|
+
None,
|
2851
|
+
description="Describes what triggers pagination reset and how to handle it.",
|
2852
|
+
)
|
2825
2853
|
ignore_stream_slicer_parameters_on_paginated_requests: Optional[bool] = Field(
|
2826
2854
|
False,
|
2827
2855
|
description="If true, the partition router and incremental request options will be ignored when paginating requests. Request options set directly on the requester will not be ignored.",
|
@@ -116,11 +116,15 @@ from airbyte_cdk.sources.declarative.migrations.legacy_to_per_partition_state_mi
|
|
116
116
|
)
|
117
117
|
from airbyte_cdk.sources.declarative.models import (
|
118
118
|
CustomStateMigration,
|
119
|
+
PaginationResetLimits,
|
119
120
|
)
|
120
121
|
from airbyte_cdk.sources.declarative.models.base_model_with_deprecations import (
|
121
122
|
DEPRECATION_LOGS_TAG,
|
122
123
|
BaseModelWithDeprecations,
|
123
124
|
)
|
125
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
126
|
+
Action1 as PaginationResetActionModel,
|
127
|
+
)
|
124
128
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
125
129
|
AddedFieldDefinition as AddedFieldDefinitionModel,
|
126
130
|
)
|
@@ -358,6 +362,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
358
362
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
359
363
|
PageIncrement as PageIncrementModel,
|
360
364
|
)
|
365
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
366
|
+
PaginationReset as PaginationResetModel,
|
367
|
+
)
|
361
368
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
362
369
|
ParametrizedComponentsResolver as ParametrizedComponentsResolverModel,
|
363
370
|
)
|
@@ -529,6 +536,7 @@ from airbyte_cdk.sources.declarative.retrievers.file_uploader import (
|
|
529
536
|
LocalFileSystemFileWriter,
|
530
537
|
NoopFileWriter,
|
531
538
|
)
|
539
|
+
from airbyte_cdk.sources.declarative.retrievers.pagination_tracker import PaginationTracker
|
532
540
|
from airbyte_cdk.sources.declarative.schema import (
|
533
541
|
ComplexFieldType,
|
534
542
|
DefaultSchemaLoader,
|
@@ -644,6 +652,8 @@ _NO_STREAM_SLICING = SinglePartitionRouter(parameters={})
|
|
644
652
|
# this would be a circular import
|
645
653
|
MAX_SLICES = 5
|
646
654
|
|
655
|
+
LOGGER = logging.getLogger(f"airbyte.model_to_component_factory")
|
656
|
+
|
647
657
|
|
648
658
|
class ModelToComponentFactory:
|
649
659
|
EPOCH_DATETIME_FORMAT = "%s"
|
@@ -2043,6 +2053,7 @@ class ModelToComponentFactory:
|
|
2043
2053
|
if isinstance(concurrent_cursor, FinalStateCursor)
|
2044
2054
|
else concurrent_cursor
|
2045
2055
|
)
|
2056
|
+
|
2046
2057
|
retriever = self._create_component_from_model(
|
2047
2058
|
model=model.retriever,
|
2048
2059
|
config=config,
|
@@ -2051,12 +2062,9 @@ class ModelToComponentFactory:
|
|
2051
2062
|
request_options_provider=request_options_provider,
|
2052
2063
|
stream_slicer=stream_slicer,
|
2053
2064
|
partition_router=partition_router,
|
2054
|
-
|
2055
|
-
|
2056
|
-
|
2057
|
-
client_side_incremental_sync={"cursor": concurrent_cursor}
|
2058
|
-
if self._is_client_side_filtering_enabled(model)
|
2059
|
-
else None,
|
2065
|
+
has_stop_condition_cursor=self._is_stop_condition_on_cursor(model),
|
2066
|
+
is_client_side_incremental_sync=self._is_client_side_filtering_enabled(model),
|
2067
|
+
cursor=concurrent_cursor,
|
2060
2068
|
transformations=transformations,
|
2061
2069
|
file_uploader=file_uploader,
|
2062
2070
|
incremental_sync=model.incremental_sync,
|
@@ -3049,7 +3057,7 @@ class ModelToComponentFactory:
|
|
3049
3057
|
name: str,
|
3050
3058
|
transformations: List[RecordTransformation] | None = None,
|
3051
3059
|
decoder: Decoder | None = None,
|
3052
|
-
|
3060
|
+
client_side_incremental_sync_cursor: Optional[Cursor] = None,
|
3053
3061
|
file_uploader: Optional[DefaultFileUploader] = None,
|
3054
3062
|
**kwargs: Any,
|
3055
3063
|
) -> RecordSelector:
|
@@ -3065,14 +3073,14 @@ class ModelToComponentFactory:
|
|
3065
3073
|
transform_before_filtering = (
|
3066
3074
|
False if model.transform_before_filtering is None else model.transform_before_filtering
|
3067
3075
|
)
|
3068
|
-
if
|
3076
|
+
if client_side_incremental_sync_cursor:
|
3069
3077
|
record_filter = ClientSideIncrementalRecordFilterDecorator(
|
3070
3078
|
config=config,
|
3071
3079
|
parameters=model.parameters,
|
3072
3080
|
condition=model.record_filter.condition
|
3073
3081
|
if (model.record_filter and hasattr(model.record_filter, "condition"))
|
3074
3082
|
else None,
|
3075
|
-
|
3083
|
+
cursor=client_side_incremental_sync_cursor,
|
3076
3084
|
)
|
3077
3085
|
transform_before_filtering = (
|
3078
3086
|
True
|
@@ -3150,8 +3158,9 @@ class ModelToComponentFactory:
|
|
3150
3158
|
name: str,
|
3151
3159
|
primary_key: Optional[Union[str, List[str], List[List[str]]]],
|
3152
3160
|
request_options_provider: Optional[RequestOptionsProvider] = None,
|
3153
|
-
|
3154
|
-
|
3161
|
+
cursor: Optional[Cursor] = None,
|
3162
|
+
has_stop_condition_cursor: bool = False,
|
3163
|
+
is_client_side_incremental_sync: bool = False,
|
3155
3164
|
transformations: List[RecordTransformation],
|
3156
3165
|
file_uploader: Optional[DefaultFileUploader] = None,
|
3157
3166
|
incremental_sync: Optional[
|
@@ -3181,6 +3190,9 @@ class ModelToComponentFactory:
|
|
3181
3190
|
|
3182
3191
|
return _url or _url_base
|
3183
3192
|
|
3193
|
+
if cursor is None:
|
3194
|
+
cursor = FinalStateCursor(name, None, self._message_repository)
|
3195
|
+
|
3184
3196
|
decoder = (
|
3185
3197
|
self._create_component_from_model(model=model.decoder, config=config)
|
3186
3198
|
if model.decoder
|
@@ -3192,7 +3204,7 @@ class ModelToComponentFactory:
|
|
3192
3204
|
config=config,
|
3193
3205
|
decoder=decoder,
|
3194
3206
|
transformations=transformations,
|
3195
|
-
|
3207
|
+
client_side_incremental_sync_cursor=cursor if is_client_side_incremental_sync else None,
|
3196
3208
|
file_uploader=file_uploader,
|
3197
3209
|
)
|
3198
3210
|
|
@@ -3280,7 +3292,7 @@ class ModelToComponentFactory:
|
|
3280
3292
|
url_base=_get_url(requester),
|
3281
3293
|
extractor_model=model.record_selector.extractor,
|
3282
3294
|
decoder=decoder,
|
3283
|
-
cursor_used_for_stop_condition=
|
3295
|
+
cursor_used_for_stop_condition=cursor if has_stop_condition_cursor else None,
|
3284
3296
|
)
|
3285
3297
|
if model.paginator
|
3286
3298
|
else NoPagination(parameters={})
|
@@ -3329,6 +3341,13 @@ class ModelToComponentFactory:
|
|
3329
3341
|
parameters=model.parameters or {},
|
3330
3342
|
)
|
3331
3343
|
|
3344
|
+
if (
|
3345
|
+
model.record_selector.record_filter
|
3346
|
+
and model.pagination_reset
|
3347
|
+
and model.pagination_reset.limits
|
3348
|
+
):
|
3349
|
+
raise ValueError("PaginationResetLimits are not supported while having record filter.")
|
3350
|
+
|
3332
3351
|
return SimpleRetriever(
|
3333
3352
|
name=name,
|
3334
3353
|
paginator=paginator,
|
@@ -3342,9 +3361,40 @@ class ModelToComponentFactory:
|
|
3342
3361
|
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
3343
3362
|
additional_query_properties=query_properties,
|
3344
3363
|
log_formatter=self._get_log_formatter(log_formatter, name),
|
3364
|
+
pagination_tracker_factory=self._create_pagination_tracker_factory(
|
3365
|
+
model.pagination_reset, cursor
|
3366
|
+
),
|
3345
3367
|
parameters=model.parameters or {},
|
3346
3368
|
)
|
3347
3369
|
|
3370
|
+
def _create_pagination_tracker_factory(
|
3371
|
+
self, model: Optional[PaginationResetModel], cursor: Cursor
|
3372
|
+
) -> Callable[[], PaginationTracker]:
|
3373
|
+
if model is None:
|
3374
|
+
return lambda: PaginationTracker()
|
3375
|
+
|
3376
|
+
# Until we figure out a way to use any cursor for PaginationTracker, we will have to have this cursor selector logic
|
3377
|
+
cursor_factory: Callable[[], Optional[ConcurrentCursor]] = lambda: None
|
3378
|
+
if model.action == PaginationResetActionModel.RESET:
|
3379
|
+
# in that case, we will let cursor_factory to return None even if the stream has a cursor
|
3380
|
+
pass
|
3381
|
+
elif model.action == PaginationResetActionModel.SPLIT_USING_CURSOR:
|
3382
|
+
if isinstance(cursor, ConcurrentCursor):
|
3383
|
+
cursor_factory = lambda: cursor.copy_without_state() # type: ignore # the if condition validates that it is a ConcurrentCursor
|
3384
|
+
elif isinstance(cursor, ConcurrentPerPartitionCursor):
|
3385
|
+
cursor_factory = lambda: cursor._cursor_factory.create( # type: ignore # if this becomes a problem, we would need to extract the cursor_factory instantiation logic and make it accessible here
|
3386
|
+
{}, datetime.timedelta(0)
|
3387
|
+
)
|
3388
|
+
elif not isinstance(cursor, FinalStateCursor):
|
3389
|
+
LOGGER.warning(
|
3390
|
+
"Unknown cursor for PaginationTracker. Pagination resets might not work properly"
|
3391
|
+
)
|
3392
|
+
else:
|
3393
|
+
raise ValueError(f"Unknown PaginationReset action: {model.action}")
|
3394
|
+
|
3395
|
+
limit = model.limits.number_of_records if model and model.limits else None
|
3396
|
+
return lambda: PaginationTracker(cursor_factory(), limit)
|
3397
|
+
|
3348
3398
|
def _get_log_formatter(
|
3349
3399
|
self, log_formatter: Callable[[Response], Any] | None, name: str
|
3350
3400
|
) -> Callable[[Response], Any] | None:
|
@@ -66,14 +66,14 @@ class CompositeErrorHandler(ErrorHandler):
|
|
66
66
|
if not isinstance(matched_error_resolution, ErrorResolution):
|
67
67
|
continue
|
68
68
|
|
69
|
-
if matched_error_resolution.response_action
|
69
|
+
if matched_error_resolution.response_action in [
|
70
|
+
ResponseAction.SUCCESS,
|
71
|
+
ResponseAction.RETRY,
|
72
|
+
ResponseAction.IGNORE,
|
73
|
+
ResponseAction.RESET_PAGINATION,
|
74
|
+
]:
|
70
75
|
return matched_error_resolution
|
71
76
|
|
72
|
-
if (
|
73
|
-
matched_error_resolution.response_action == ResponseAction.RETRY
|
74
|
-
or matched_error_resolution.response_action == ResponseAction.IGNORE
|
75
|
-
):
|
76
|
-
return matched_error_resolution
|
77
77
|
if matched_error_resolution:
|
78
78
|
return matched_error_resolution
|
79
79
|
|
@@ -0,0 +1,64 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from airbyte_cdk.sources.declarative.models import FailureType
|
4
|
+
from airbyte_cdk.sources.declarative.types import Record, StreamSlice
|
5
|
+
from airbyte_cdk.sources.streams.concurrent.cursor import ConcurrentCursor
|
6
|
+
from airbyte_cdk.utils.traced_exception import AirbyteTracedException
|
7
|
+
|
8
|
+
|
9
|
+
class PaginationTracker:
|
10
|
+
_record_count: int
|
11
|
+
_number_of_attempt_with_same_slice: int
|
12
|
+
|
13
|
+
def __init__(
|
14
|
+
self, cursor: Optional[ConcurrentCursor] = None, max_number_of_records: Optional[int] = None
|
15
|
+
) -> None:
|
16
|
+
"""
|
17
|
+
Ideally, we would have passed the `Cursor` interface here instead of `ConcurrentCursor` but not all
|
18
|
+
implementations of `Cursor` can support this use case. For example, if the `ConcurrentPerPartitionCursor`
|
19
|
+
switch to global state, we stop keeping track of the state per partition and therefore can't get an accurate
|
20
|
+
view for a specific stream_slice. In order to solve that, we decided to scope this feature to use only
|
21
|
+
ConcurrentCursor which is the only "leaf" cursor that actually emits stream slices with `cursor_partition`.
|
22
|
+
"""
|
23
|
+
self._cursor = cursor
|
24
|
+
self._limit = max_number_of_records
|
25
|
+
self._reset()
|
26
|
+
|
27
|
+
"""
|
28
|
+
Given we have a cursor, we do not allow for the same slice to be processed twice because we assume we will
|
29
|
+
always process the same slice.
|
30
|
+
|
31
|
+
Given no cursor, we assume that the pagination reset is for retrying purposes and we allow to retry once.
|
32
|
+
"""
|
33
|
+
self._allowed_number_of_attempt_with_same_slice = 1 if self._cursor else 2
|
34
|
+
self._number_of_attempt_with_same_slice = 0
|
35
|
+
|
36
|
+
def observe(self, record: Record) -> None:
|
37
|
+
self._record_count += 1
|
38
|
+
if self._cursor:
|
39
|
+
self._cursor.observe(record)
|
40
|
+
|
41
|
+
def has_reached_limit(self) -> bool:
|
42
|
+
return self._limit is not None and self._record_count >= self._limit
|
43
|
+
|
44
|
+
def _reset(self) -> None:
|
45
|
+
self._record_count = 0
|
46
|
+
|
47
|
+
def reduce_slice_range_if_possible(self, stream_slice: StreamSlice) -> StreamSlice:
|
48
|
+
new_slice = self._cursor.reduce_slice_range(stream_slice) if self._cursor else stream_slice
|
49
|
+
|
50
|
+
if new_slice == stream_slice:
|
51
|
+
self._number_of_attempt_with_same_slice += 1
|
52
|
+
if (
|
53
|
+
self._number_of_attempt_with_same_slice
|
54
|
+
>= self._allowed_number_of_attempt_with_same_slice
|
55
|
+
):
|
56
|
+
raise AirbyteTracedException(
|
57
|
+
internal_message=f"There were {self._number_of_attempt_with_same_slice} attempts with the same slice already while the max allowed is {self._allowed_number_of_attempt_with_same_slice}",
|
58
|
+
failure_type=FailureType.system_error,
|
59
|
+
)
|
60
|
+
else:
|
61
|
+
self._number_of_attempt_with_same_slice = 0
|
62
|
+
|
63
|
+
self._reset()
|
64
|
+
return new_slice
|
@@ -3,10 +3,10 @@
|
|
3
3
|
#
|
4
4
|
|
5
5
|
import json
|
6
|
+
import logging
|
6
7
|
from collections import defaultdict
|
7
8
|
from dataclasses import InitVar, dataclass, field
|
8
9
|
from functools import partial
|
9
|
-
from itertools import islice
|
10
10
|
from typing import (
|
11
11
|
Any,
|
12
12
|
Callable,
|
@@ -39,14 +39,20 @@ from airbyte_cdk.sources.declarative.requesters.request_options import (
|
|
39
39
|
RequestOptionsProvider,
|
40
40
|
)
|
41
41
|
from airbyte_cdk.sources.declarative.requesters.requester import Requester
|
42
|
+
from airbyte_cdk.sources.declarative.retrievers.pagination_tracker import PaginationTracker
|
42
43
|
from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
|
43
44
|
from airbyte_cdk.sources.declarative.stream_slicers.stream_slicer import StreamSlicer
|
44
45
|
from airbyte_cdk.sources.source import ExperimentalClassWarning
|
46
|
+
from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
|
45
47
|
from airbyte_cdk.sources.streams.core import StreamData
|
48
|
+
from airbyte_cdk.sources.streams.http.pagination_reset_exception import (
|
49
|
+
PaginationResetRequiredException,
|
50
|
+
)
|
46
51
|
from airbyte_cdk.sources.types import Config, Record, StreamSlice, StreamState
|
47
52
|
from airbyte_cdk.utils.mapping_helpers import combine_mappings
|
48
53
|
|
49
54
|
FULL_REFRESH_SYNC_COMPLETE_KEY = "__ab_full_refresh_sync_complete"
|
55
|
+
LOGGER = logging.getLogger("airbyte")
|
50
56
|
|
51
57
|
|
52
58
|
@dataclass
|
@@ -92,8 +98,14 @@ class SimpleRetriever(Retriever):
|
|
92
98
|
ignore_stream_slicer_parameters_on_paginated_requests: bool = False
|
93
99
|
additional_query_properties: Optional[QueryProperties] = None
|
94
100
|
log_formatter: Optional[Callable[[requests.Response], Any]] = None
|
101
|
+
pagination_tracker_factory: Callable[[], PaginationTracker] = field(
|
102
|
+
default_factory=lambda: lambda: PaginationTracker()
|
103
|
+
)
|
95
104
|
|
96
105
|
def __post_init__(self, parameters: Mapping[str, Any]) -> None:
|
106
|
+
# while changing `ModelToComponentFactory.create_simple_retriever` to accept a cursor, the sources implementing
|
107
|
+
# a CustomRetriever inheriting for SimpleRetriever needed to have the following validation added.
|
108
|
+
self.cursor = None if isinstance(self.cursor, Cursor) else self.cursor
|
97
109
|
self._paginator = self.paginator or NoPagination(parameters=parameters)
|
98
110
|
self._parameters = parameters
|
99
111
|
self._name = (
|
@@ -362,90 +374,97 @@ class SimpleRetriever(Retriever):
|
|
362
374
|
stream_state: Mapping[str, Any],
|
363
375
|
stream_slice: StreamSlice,
|
364
376
|
) -> Iterable[Record]:
|
365
|
-
|
366
|
-
|
367
|
-
next_page_token
|
368
|
-
|
369
|
-
)
|
370
|
-
while not pagination_complete:
|
371
|
-
property_chunks: List[List[str]] = (
|
372
|
-
list(
|
373
|
-
self.additional_query_properties.get_request_property_chunks(
|
374
|
-
stream_slice=stream_slice
|
375
|
-
)
|
376
|
-
)
|
377
|
-
if self.additional_query_properties
|
378
|
-
else [
|
379
|
-
[]
|
380
|
-
] # A single empty property chunk represents the case where property chunking is not configured
|
381
|
-
)
|
382
|
-
|
377
|
+
pagination_tracker = self.pagination_tracker_factory()
|
378
|
+
reset_pagination = False
|
379
|
+
next_page_token = self._get_initial_next_page_token()
|
380
|
+
while True:
|
383
381
|
merged_records: MutableMapping[str, Any] = defaultdict(dict)
|
384
382
|
last_page_size = 0
|
385
383
|
last_record: Optional[Record] = None
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
response = self._fetch_next_page(stream_state, stream_slice, next_page_token)
|
396
|
-
for current_record in records_generator_fn(response):
|
397
|
-
if (
|
398
|
-
current_record
|
399
|
-
and self.additional_query_properties
|
400
|
-
and self.additional_query_properties.property_chunking
|
384
|
+
|
385
|
+
response = None
|
386
|
+
try:
|
387
|
+
if (
|
388
|
+
self.additional_query_properties
|
389
|
+
and self.additional_query_properties.property_chunking
|
390
|
+
):
|
391
|
+
for properties in self.additional_query_properties.get_request_property_chunks(
|
392
|
+
stream_slice=stream_slice
|
401
393
|
):
|
402
|
-
|
403
|
-
|
404
|
-
|
394
|
+
stream_slice = StreamSlice(
|
395
|
+
partition=stream_slice.partition or {},
|
396
|
+
cursor_slice=stream_slice.cursor_slice or {},
|
397
|
+
extra_fields={"query_properties": properties},
|
398
|
+
)
|
399
|
+
response = self._fetch_next_page(
|
400
|
+
stream_state, stream_slice, next_page_token
|
401
|
+
)
|
402
|
+
|
403
|
+
for current_record in records_generator_fn(response):
|
404
|
+
merge_key = (
|
405
|
+
self.additional_query_properties.property_chunking.get_merge_key(
|
406
|
+
current_record
|
407
|
+
)
|
405
408
|
)
|
409
|
+
if merge_key:
|
410
|
+
_deep_merge(merged_records[merge_key], current_record)
|
411
|
+
else:
|
412
|
+
# We should still emit records even if the record did not have a merge key
|
413
|
+
pagination_tracker.observe(current_record)
|
414
|
+
last_page_size += 1
|
415
|
+
last_record = current_record
|
416
|
+
yield current_record
|
417
|
+
|
418
|
+
for merged_record in merged_records.values():
|
419
|
+
record = Record(
|
420
|
+
data=merged_record, stream_name=self.name, associated_slice=stream_slice
|
406
421
|
)
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
422
|
+
pagination_tracker.observe(record)
|
423
|
+
last_page_size += 1
|
424
|
+
last_record = record
|
425
|
+
yield record
|
426
|
+
else:
|
427
|
+
response = self._fetch_next_page(stream_state, stream_slice, next_page_token)
|
428
|
+
for current_record in records_generator_fn(response):
|
429
|
+
pagination_tracker.observe(current_record)
|
415
430
|
last_page_size += 1
|
416
431
|
last_record = current_record
|
417
432
|
yield current_record
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
pagination_complete = True
|
433
|
+
except PaginationResetRequiredException:
|
434
|
+
reset_pagination = True
|
435
|
+
else:
|
436
|
+
if not response:
|
437
|
+
break
|
438
|
+
|
439
|
+
if reset_pagination or pagination_tracker.has_reached_limit():
|
440
|
+
next_page_token = self._get_initial_next_page_token()
|
441
|
+
previous_slice = stream_slice
|
442
|
+
stream_slice = pagination_tracker.reduce_slice_range_if_possible(stream_slice)
|
443
|
+
LOGGER.info(
|
444
|
+
f"Hitting PaginationReset event. StreamSlice used will go from {previous_slice} to {stream_slice}"
|
445
|
+
)
|
446
|
+
reset_pagination = False
|
433
447
|
else:
|
434
448
|
last_page_token_value = (
|
435
449
|
next_page_token.get("next_page_token") if next_page_token else None
|
436
450
|
)
|
437
451
|
next_page_token = self._next_page_token(
|
438
|
-
response=response,
|
452
|
+
response=response, # type:ignore # we are breaking from the loop on the try/else if there are no response so this should be fine
|
439
453
|
last_page_size=last_page_size,
|
440
454
|
last_record=last_record,
|
441
455
|
last_page_token_value=last_page_token_value,
|
442
456
|
)
|
443
457
|
if not next_page_token:
|
444
|
-
|
458
|
+
break
|
445
459
|
|
446
460
|
# Always return an empty generator just in case no records were ever yielded
|
447
461
|
yield from []
|
448
462
|
|
463
|
+
def _get_initial_next_page_token(self) -> Optional[Mapping[str, Any]]:
|
464
|
+
initial_token = self._paginator.get_initial_token()
|
465
|
+
next_page_token = {"next_page_token": initial_token} if initial_token is not None else None
|
466
|
+
return next_page_token
|
467
|
+
|
449
468
|
def _read_single_page(
|
450
469
|
self,
|
451
470
|
records_generator_fn: Callable[[Optional[requests.Response]], Iterable[Record]],
|