airbyte-cdk 7.3.0__tar.gz → 7.3.2.dev0__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.0 → airbyte_cdk-7.3.2.dev0}/PKG-INFO +1 -1
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +35 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +1 -1
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +29 -1
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +54 -13
- airbyte_cdk-7.3.2.dev0/airbyte_cdk/sources/declarative/retrievers/pagination_tracker.py +64 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +82 -62
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/cursor.py +27 -1
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +1 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/http_client.py +6 -0
- airbyte_cdk-7.3.2.dev0/airbyte_cdk/sources/streams/http/pagination_reset_exception.py +2 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/pyproject.toml +1 -1
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/LICENSE.txt +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/LICENSE_SHORT +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/_connector.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/_image.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/_manifest.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/_secrets.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/_version.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/airbyte_cdk/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/legacy/sources/declarative/manifest_declarative_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/manifest_migration.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migration_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migrations/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migrations/registry.yaml +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_migrations/migrations_registry.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/Dockerfile +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/api_models/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/api_models/capabilities.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/api_models/dicts.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/api_models/manifest.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/api_models/stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/app.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/cli/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/cli/_common.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/cli/_info.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/cli/_openapi.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/cli/_start.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/cli/run.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/command_processor/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/command_processor/processor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/command_processor/utils.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/helpers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/helpers/auth.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/helpers/tracing.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/main.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/openapi.yaml +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/routers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/routers/capabilities.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/routers/health.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/manifest_server/routers/manifest.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/models/connector_metadata.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/per_partition_request_option_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/composite_schema_loader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/config_transformations/add_fields.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/config_transformations/config_transformation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/config_transformations/remap_field.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/config_transformations/remove_fields.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/validators/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/validators/dpath_validator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/validators/predicate_validator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/validators/validate_adheres_to_schema.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/validators/validation_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/validators/validator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/message/concurrent_repository.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/files_directory.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/models/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/models/outcome.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/models/scenario.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/_job_runner.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/connector_base.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/declarative_sources.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/docker_base.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/standard_tests/util.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/connector_paths.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/docker.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/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,6 +116,7 @@ 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,
|
@@ -358,6 +359,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
|
|
358
359
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
359
360
|
PageIncrement as PageIncrementModel,
|
360
361
|
)
|
362
|
+
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
363
|
+
PaginationReset as PaginationResetModel,
|
364
|
+
)
|
361
365
|
from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
|
362
366
|
ParametrizedComponentsResolver as ParametrizedComponentsResolverModel,
|
363
367
|
)
|
@@ -529,6 +533,7 @@ from airbyte_cdk.sources.declarative.retrievers.file_uploader import (
|
|
529
533
|
LocalFileSystemFileWriter,
|
530
534
|
NoopFileWriter,
|
531
535
|
)
|
536
|
+
from airbyte_cdk.sources.declarative.retrievers.pagination_tracker import PaginationTracker
|
532
537
|
from airbyte_cdk.sources.declarative.schema import (
|
533
538
|
ComplexFieldType,
|
534
539
|
DefaultSchemaLoader,
|
@@ -644,6 +649,8 @@ _NO_STREAM_SLICING = SinglePartitionRouter(parameters={})
|
|
644
649
|
# this would be a circular import
|
645
650
|
MAX_SLICES = 5
|
646
651
|
|
652
|
+
LOGGER = logging.getLogger(f"airbyte.model_to_component_factory")
|
653
|
+
|
647
654
|
|
648
655
|
class ModelToComponentFactory:
|
649
656
|
EPOCH_DATETIME_FORMAT = "%s"
|
@@ -2043,6 +2050,7 @@ class ModelToComponentFactory:
|
|
2043
2050
|
if isinstance(concurrent_cursor, FinalStateCursor)
|
2044
2051
|
else concurrent_cursor
|
2045
2052
|
)
|
2053
|
+
|
2046
2054
|
retriever = self._create_component_from_model(
|
2047
2055
|
model=model.retriever,
|
2048
2056
|
config=config,
|
@@ -2051,12 +2059,9 @@ class ModelToComponentFactory:
|
|
2051
2059
|
request_options_provider=request_options_provider,
|
2052
2060
|
stream_slicer=stream_slicer,
|
2053
2061
|
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,
|
2062
|
+
has_stop_condition_cursor=self._is_stop_condition_on_cursor(model),
|
2063
|
+
is_client_side_incremental_sync=self._is_client_side_filtering_enabled(model),
|
2064
|
+
cursor=concurrent_cursor,
|
2060
2065
|
transformations=transformations,
|
2061
2066
|
file_uploader=file_uploader,
|
2062
2067
|
incremental_sync=model.incremental_sync,
|
@@ -3050,7 +3055,7 @@ class ModelToComponentFactory:
|
|
3050
3055
|
name: str,
|
3051
3056
|
transformations: List[RecordTransformation] | None = None,
|
3052
3057
|
decoder: Decoder | None = None,
|
3053
|
-
|
3058
|
+
client_side_incremental_sync_cursor: Optional[Cursor] = None,
|
3054
3059
|
file_uploader: Optional[DefaultFileUploader] = None,
|
3055
3060
|
**kwargs: Any,
|
3056
3061
|
) -> RecordSelector:
|
@@ -3066,14 +3071,14 @@ class ModelToComponentFactory:
|
|
3066
3071
|
transform_before_filtering = (
|
3067
3072
|
False if model.transform_before_filtering is None else model.transform_before_filtering
|
3068
3073
|
)
|
3069
|
-
if
|
3074
|
+
if client_side_incremental_sync_cursor:
|
3070
3075
|
record_filter = ClientSideIncrementalRecordFilterDecorator(
|
3071
3076
|
config=config,
|
3072
3077
|
parameters=model.parameters,
|
3073
3078
|
condition=model.record_filter.condition
|
3074
3079
|
if (model.record_filter and hasattr(model.record_filter, "condition"))
|
3075
3080
|
else None,
|
3076
|
-
|
3081
|
+
cursor=client_side_incremental_sync_cursor,
|
3077
3082
|
)
|
3078
3083
|
transform_before_filtering = (
|
3079
3084
|
True
|
@@ -3151,8 +3156,9 @@ class ModelToComponentFactory:
|
|
3151
3156
|
name: str,
|
3152
3157
|
primary_key: Optional[Union[str, List[str], List[List[str]]]],
|
3153
3158
|
request_options_provider: Optional[RequestOptionsProvider] = None,
|
3154
|
-
|
3155
|
-
|
3159
|
+
cursor: Optional[Cursor] = None,
|
3160
|
+
has_stop_condition_cursor: bool = False,
|
3161
|
+
is_client_side_incremental_sync: bool = False,
|
3156
3162
|
transformations: List[RecordTransformation],
|
3157
3163
|
file_uploader: Optional[DefaultFileUploader] = None,
|
3158
3164
|
incremental_sync: Optional[
|
@@ -3182,6 +3188,9 @@ class ModelToComponentFactory:
|
|
3182
3188
|
|
3183
3189
|
return _url or _url_base
|
3184
3190
|
|
3191
|
+
if cursor is None:
|
3192
|
+
cursor = FinalStateCursor(name, None, self._message_repository)
|
3193
|
+
|
3185
3194
|
decoder = (
|
3186
3195
|
self._create_component_from_model(model=model.decoder, config=config)
|
3187
3196
|
if model.decoder
|
@@ -3193,7 +3202,7 @@ class ModelToComponentFactory:
|
|
3193
3202
|
config=config,
|
3194
3203
|
decoder=decoder,
|
3195
3204
|
transformations=transformations,
|
3196
|
-
|
3205
|
+
client_side_incremental_sync_cursor=cursor if is_client_side_incremental_sync else None,
|
3197
3206
|
file_uploader=file_uploader,
|
3198
3207
|
)
|
3199
3208
|
|
@@ -3270,7 +3279,7 @@ class ModelToComponentFactory:
|
|
3270
3279
|
url_base=_get_url(requester),
|
3271
3280
|
extractor_model=model.record_selector.extractor,
|
3272
3281
|
decoder=decoder,
|
3273
|
-
cursor_used_for_stop_condition=
|
3282
|
+
cursor_used_for_stop_condition=cursor if has_stop_condition_cursor else None,
|
3274
3283
|
)
|
3275
3284
|
if model.paginator
|
3276
3285
|
else NoPagination(parameters={})
|
@@ -3319,6 +3328,13 @@ class ModelToComponentFactory:
|
|
3319
3328
|
parameters=model.parameters or {},
|
3320
3329
|
)
|
3321
3330
|
|
3331
|
+
if (
|
3332
|
+
model.record_selector.record_filter
|
3333
|
+
and model.pagination_reset
|
3334
|
+
and model.pagination_reset.limits
|
3335
|
+
):
|
3336
|
+
raise ValueError("PaginationResetLimits are not support while having record filter.")
|
3337
|
+
|
3322
3338
|
return SimpleRetriever(
|
3323
3339
|
name=name,
|
3324
3340
|
paginator=paginator,
|
@@ -3332,9 +3348,34 @@ class ModelToComponentFactory:
|
|
3332
3348
|
ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
|
3333
3349
|
additional_query_properties=query_properties,
|
3334
3350
|
log_formatter=self._get_log_formatter(log_formatter, name),
|
3351
|
+
pagination_tracker_factory=self._create_pagination_tracker_factory(
|
3352
|
+
model.pagination_reset, cursor
|
3353
|
+
),
|
3335
3354
|
parameters=model.parameters or {},
|
3336
3355
|
)
|
3337
3356
|
|
3357
|
+
def _create_pagination_tracker_factory(
|
3358
|
+
self, model: Optional[PaginationResetModel], cursor: Cursor
|
3359
|
+
) -> Callable[[], PaginationTracker]:
|
3360
|
+
if model is None:
|
3361
|
+
return lambda: PaginationTracker()
|
3362
|
+
|
3363
|
+
# Until we figure out a way to use any cursor for PaginationTracker, we will have to have this cursor selector logic
|
3364
|
+
cursor_for_pagination_tracking = None
|
3365
|
+
if isinstance(cursor, ConcurrentCursor):
|
3366
|
+
cursor_for_pagination_tracking = cursor
|
3367
|
+
elif isinstance(cursor, ConcurrentPerPartitionCursor):
|
3368
|
+
cursor_for_pagination_tracking = 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
|
3369
|
+
{}, datetime.timedelta(0)
|
3370
|
+
)
|
3371
|
+
elif not isinstance(cursor, FinalStateCursor):
|
3372
|
+
LOGGER.warning(
|
3373
|
+
"Unknown cursor for PaginationTracker. Pagination resets might not work properly"
|
3374
|
+
)
|
3375
|
+
|
3376
|
+
limit = model.limits.number_of_records if model and model.limits else None
|
3377
|
+
return lambda: PaginationTracker(cursor_for_pagination_tracking, limit)
|
3378
|
+
|
3338
3379
|
def _get_log_formatter(
|
3339
3380
|
self, log_formatter: Callable[[Response], Any] | None, name: str
|
3340
3381
|
) -> Callable[[Response], Any] | None:
|
@@ -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
|
+
self._number_of_attempt_with_same_slice = 0
|
47
|
+
|
48
|
+
def reduce_slice_range_if_possible(self, stream_slice: StreamSlice) -> StreamSlice:
|
49
|
+
new_slice = self._cursor.reduce_slice_range(stream_slice) if self._cursor else stream_slice
|
50
|
+
|
51
|
+
if new_slice == stream_slice:
|
52
|
+
self._number_of_attempt_with_same_slice += 1
|
53
|
+
if (
|
54
|
+
self._number_of_attempt_with_same_slice
|
55
|
+
>= self._allowed_number_of_attempt_with_same_slice
|
56
|
+
):
|
57
|
+
raise AirbyteTracedException(
|
58
|
+
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}",
|
59
|
+
failure_type=FailureType.system_error,
|
60
|
+
)
|
61
|
+
else:
|
62
|
+
self._number_of_attempt_with_same_slice = 0
|
63
|
+
|
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,98 @@ 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
|
-
|
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
|
+
pagination_tracker.reset()
|
441
|
+
next_page_token = self._get_initial_next_page_token()
|
442
|
+
previous_slice = stream_slice
|
443
|
+
stream_slice = pagination_tracker.reduce_slice_range_if_possible(stream_slice)
|
444
|
+
LOGGER.info(
|
445
|
+
f"Hitting PaginationReset event. StreamSlice used will go from {previous_slice} to {stream_slice}"
|
446
|
+
)
|
447
|
+
reset_pagination = False
|
433
448
|
else:
|
434
449
|
last_page_token_value = (
|
435
450
|
next_page_token.get("next_page_token") if next_page_token else None
|
436
451
|
)
|
437
452
|
next_page_token = self._next_page_token(
|
438
|
-
response=response,
|
453
|
+
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
454
|
last_page_size=last_page_size,
|
440
455
|
last_record=last_record,
|
441
456
|
last_page_token_value=last_page_token_value,
|
442
457
|
)
|
443
458
|
if not next_page_token:
|
444
|
-
|
459
|
+
break
|
445
460
|
|
446
461
|
# Always return an empty generator just in case no records were ever yielded
|
447
462
|
yield from []
|
448
463
|
|
464
|
+
def _get_initial_next_page_token(self) -> Optional[Mapping[str, Any]]:
|
465
|
+
initial_token = self._paginator.get_initial_token()
|
466
|
+
next_page_token = {"next_page_token": initial_token} if initial_token is not None else None
|
467
|
+
return next_page_token
|
468
|
+
|
449
469
|
def _read_single_page(
|
450
470
|
self,
|
451
471
|
records_generator_fn: Callable[[Optional[requests.Response]], Iterable[Record]],
|
{airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/concurrent/cursor.py
RENAMED
@@ -41,7 +41,7 @@ class CursorField:
|
|
41
41
|
def __init__(self, cursor_field_key: str) -> None:
|
42
42
|
self.cursor_field_key = cursor_field_key
|
43
43
|
|
44
|
-
def extract_value(self, record: Record) ->
|
44
|
+
def extract_value(self, record: Record) -> Any:
|
45
45
|
cursor_value = record.data.get(self.cursor_field_key)
|
46
46
|
if cursor_value is None:
|
47
47
|
raise ValueError(f"Could not find cursor field {self.cursor_field_key} in record")
|
@@ -174,6 +174,7 @@ class ConcurrentCursor(Cursor):
|
|
174
174
|
# Flag to track if the logger has been triggered (per stream)
|
175
175
|
self._should_be_synced_logger_triggered = False
|
176
176
|
self._clamping_strategy = clamping_strategy
|
177
|
+
self._is_ascending_order = True
|
177
178
|
|
178
179
|
# A lock is required when closing a partition because updating the cursor's concurrent_state is
|
179
180
|
# not thread safe. When multiple partitions are being closed by the cursor at the same time, it is
|
@@ -245,6 +246,8 @@ class ConcurrentCursor(Cursor):
|
|
245
246
|
|
246
247
|
if most_recent_cursor_value is None or most_recent_cursor_value < cursor_value:
|
247
248
|
self._most_recent_cursor_value_per_partition[record.associated_slice] = cursor_value
|
249
|
+
elif most_recent_cursor_value > cursor_value:
|
250
|
+
self._is_ascending_order = False
|
248
251
|
except ValueError:
|
249
252
|
self._log_for_record_without_cursor_value()
|
250
253
|
|
@@ -516,3 +519,26 @@ class ConcurrentCursor(Cursor):
|
|
516
519
|
f"Could not find cursor field `{self.cursor_field.cursor_field_key}` in record for stream {self._stream_name}. The incremental sync will assume it needs to be synced"
|
517
520
|
)
|
518
521
|
self._should_be_synced_logger_triggered = True
|
522
|
+
|
523
|
+
def reduce_slice_range(self, stream_slice: StreamSlice) -> StreamSlice:
|
524
|
+
# In theory, we might be more flexible here meaning that it doesn't need to be in ascending order but it just
|
525
|
+
# needs to be ordered. For now though, we will only support ascending order.
|
526
|
+
if not self._is_ascending_order:
|
527
|
+
LOGGER.warning(
|
528
|
+
"Attempting to reduce slice while records are not returned in incremental order might lead to missing records"
|
529
|
+
)
|
530
|
+
|
531
|
+
return StreamSlice(
|
532
|
+
partition=stream_slice.partition,
|
533
|
+
cursor_slice={
|
534
|
+
self._slice_boundary_fields_wrapper[
|
535
|
+
self._START_BOUNDARY
|
536
|
+
]: self._connector_state_converter.output_format(
|
537
|
+
self._most_recent_cursor_value_per_partition[stream_slice]
|
538
|
+
),
|
539
|
+
self._slice_boundary_fields_wrapper[self._END_BOUNDARY]: stream_slice.cursor_slice[
|
540
|
+
self._slice_boundary_fields_wrapper[self._END_BOUNDARY]
|
541
|
+
],
|
542
|
+
},
|
543
|
+
extra_fields=stream_slice.extra_fields,
|
544
|
+
)
|
{airbyte_cdk-7.3.0 → airbyte_cdk-7.3.2.dev0}/airbyte_cdk/sources/streams/http/http_client.py
RENAMED
@@ -42,6 +42,9 @@ from airbyte_cdk.sources.streams.http.exceptions import (
|
|
42
42
|
RequestBodyException,
|
43
43
|
UserDefinedBackoffException,
|
44
44
|
)
|
45
|
+
from airbyte_cdk.sources.streams.http.pagination_reset_exception import (
|
46
|
+
PaginationResetRequiredException,
|
47
|
+
)
|
45
48
|
from airbyte_cdk.sources.streams.http.rate_limiting import (
|
46
49
|
http_client_default_backoff_handler,
|
47
50
|
rate_limit_default_backoff_handler,
|
@@ -428,6 +431,9 @@ class HttpClient:
|
|
428
431
|
if error_resolution.response_action not in self._ACTIONS_TO_RETRY_ON:
|
429
432
|
self._evict_key(request)
|
430
433
|
|
434
|
+
if error_resolution.response_action == ResponseAction.RESET_PAGINATION:
|
435
|
+
raise PaginationResetRequiredException()
|
436
|
+
|
431
437
|
# Emit stream status RUNNING with the reason RATE_LIMITED to log that the rate limit has been reached
|
432
438
|
if error_resolution.response_action == ResponseAction.RATE_LIMITED:
|
433
439
|
# TODO: Update to handle with message repository when concurrent message repository is ready
|