airbyte-cdk 6.45.10__tar.gz → 6.46.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/PKG-INFO +6 -1
- airbyte_cdk-6.46.1/airbyte_cdk/cli/__init__.py +9 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/__init__.py +86 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/_connector.py +179 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/_image.py +95 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/_manifest.py +24 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/_secrets.py +150 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/_util.py +43 -0
- airbyte_cdk-6.46.1/airbyte_cdk/cli/airbyte_cdk/_version.py +13 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +10 -0
- airbyte_cdk-6.46.1/airbyte_cdk/models/connector_metadata.py +97 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +108 -79
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +122 -45
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +87 -82
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +9 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +2 -2
- airbyte_cdk-6.46.1/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +462 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +2 -2
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +24 -24
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +17 -1
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/connector_base.py +51 -25
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/declarative_sources.py +3 -1
- airbyte_cdk-6.46.1/airbyte_cdk/test/standard_tests/test_resources.py +69 -0
- airbyte_cdk-6.46.1/airbyte_cdk/test/standard_tests/util.py +79 -0
- airbyte_cdk-6.46.1/airbyte_cdk/utils/docker.py +337 -0
- airbyte_cdk-6.46.1/airbyte_cdk/utils/docker_image_templates.py +101 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/pyproject.toml +11 -3
- airbyte_cdk-6.45.10/airbyte_cdk/test/utils/__init__.py +0 -1
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/LICENSE.txt +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/LICENSE_SHORT +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/README.md +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/config_observation.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/README.md +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/main.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/models.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/destination.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/entrypoint.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/exception_handler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/logger.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/models/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/models/well_known_types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/py.typed +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/abstract_source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/config.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/retrievers/file_uploader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/README.md +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/file_based/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/http_config.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/http_logger.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/message/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/message/repository.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/source.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/core.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/casing.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/files_directory.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/transform.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sources/utils/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/_util/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/_util/hashing.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/constants.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/exceptions.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/secrets.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/shared/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/sql/types.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/catalog_builder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/mock_http/request.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/mock_http/response.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/_job_runner.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/models/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/models/scenario.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/state_builder.py +0 -0
- {airbyte_cdk-6.45.10/airbyte_cdk/cli → airbyte_cdk-6.46.1/airbyte_cdk/test/utils}/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/utils/data.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/test/utils/reading.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/__init__.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/analytics_message.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/constants.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/event_timing.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/message_utils.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/print_buffer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/slice_hasher.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
- {airbyte_cdk-6.45.10 → airbyte_cdk-6.46.1}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: airbyte-cdk
|
3
|
-
Version: 6.
|
3
|
+
Version: 6.46.1
|
4
4
|
Summary: A framework for writing Airbyte Connectors.
|
5
5
|
Home-page: https://airbyte.com
|
6
6
|
License: MIT
|
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
18
18
|
Classifier: Topic :: Scientific/Engineering
|
19
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
20
|
+
Provides-Extra: dev
|
20
21
|
Provides-Extra: file-based
|
21
22
|
Provides-Extra: sql
|
22
23
|
Provides-Extra: vector-db-based
|
@@ -28,12 +29,14 @@ Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
|
|
28
29
|
Requires-Dist: backoff
|
29
30
|
Requires-Dist: boltons (>=25.0.0,<26.0.0)
|
30
31
|
Requires-Dist: cachetools
|
32
|
+
Requires-Dist: click (>=8.1.8,<9.0.0)
|
31
33
|
Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
|
32
34
|
Requires-Dist: cryptography (>=44.0.0,<45.0.0)
|
33
35
|
Requires-Dist: dpath (>=2.1.6,<3.0.0)
|
34
36
|
Requires-Dist: dunamai (>=1.22.0,<2.0.0)
|
35
37
|
Requires-Dist: fastavro (>=1.8.0,<1.9.0) ; extra == "file-based"
|
36
38
|
Requires-Dist: genson (==1.3.0)
|
39
|
+
Requires-Dist: google-cloud-secret-manager (>=2.17.0,<3.0.0)
|
37
40
|
Requires-Dist: isodate (>=0.6.1,<0.7.0)
|
38
41
|
Requires-Dist: jsonref (>=0.2,<0.3)
|
39
42
|
Requires-Dist: jsonschema (>=4.17.3,<4.18.0)
|
@@ -54,6 +57,7 @@ Requires-Dist: pydantic (>=2.7,<3.0)
|
|
54
57
|
Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
|
55
58
|
Requires-Dist: pyrate-limiter (>=3.1.0,<3.2.0)
|
56
59
|
Requires-Dist: pytesseract (==0.3.10) ; extra == "file-based"
|
60
|
+
Requires-Dist: pytest (>=7,<8) ; extra == "dev"
|
57
61
|
Requires-Dist: python-calamine (==0.2.3) ; extra == "file-based"
|
58
62
|
Requires-Dist: python-dateutil (>=2.9.0,<3.0.0)
|
59
63
|
Requires-Dist: python-snappy (==0.7.3) ; extra == "file-based"
|
@@ -62,6 +66,7 @@ Requires-Dist: pytz (==2024.2)
|
|
62
66
|
Requires-Dist: rapidfuzz (>=3.10.1,<4.0.0)
|
63
67
|
Requires-Dist: requests
|
64
68
|
Requires-Dist: requests_cache
|
69
|
+
Requires-Dist: rich-click (>=1.8.8,<2.0.0)
|
65
70
|
Requires-Dist: serpyco-rs (>=1.10.2,<2.0.0)
|
66
71
|
Requires-Dist: sqlalchemy (>=2.0,<3.0,!=2.0.36) ; extra == "sql"
|
67
72
|
Requires-Dist: tiktoken (==0.8.0) ; extra == "vector-db-based"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""The `airbyte-cdk.cli` module provides command-line interfaces for the Airbyte CDK.
|
3
|
+
|
4
|
+
As of now, it includes the following CLI entry points:
|
5
|
+
|
6
|
+
- `airbyte-cdk`: Commands for working with connectors.
|
7
|
+
- `source-declarative-manifest`: Directly invoke the declarative manifests connector.
|
8
|
+
|
9
|
+
"""
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""CLI commands for `airbyte-cdk`.
|
3
|
+
|
4
|
+
This CLI interface allows you to interact with your connector, including
|
5
|
+
testing and running commands.
|
6
|
+
|
7
|
+
**Basic Usage:**
|
8
|
+
|
9
|
+
```bash
|
10
|
+
airbyte-cdk --help
|
11
|
+
airbyte-cdk --version
|
12
|
+
airbyte-cdk connector --help
|
13
|
+
airbyte-cdk manifest --help
|
14
|
+
```
|
15
|
+
|
16
|
+
**Running Statelessly:**
|
17
|
+
|
18
|
+
You can run the latest version of this CLI, from any machine, using `pipx` or `uvx`:
|
19
|
+
|
20
|
+
```bash
|
21
|
+
# Run the latest version of the CLI:
|
22
|
+
pipx run airbyte-cdk connector --help
|
23
|
+
uvx airbyte-cdk connector --help
|
24
|
+
|
25
|
+
# Run from a specific CDK version:
|
26
|
+
pipx run airbyte-cdk==6.5.1 connector --help
|
27
|
+
uvx airbyte-cdk==6.5.1 connector --help
|
28
|
+
```
|
29
|
+
|
30
|
+
**Running within your virtualenv:**
|
31
|
+
|
32
|
+
You can also run from your connector's virtualenv:
|
33
|
+
|
34
|
+
```bash
|
35
|
+
poetry run airbyte-cdk connector --help
|
36
|
+
```
|
37
|
+
|
38
|
+
"""
|
39
|
+
|
40
|
+
from typing import cast
|
41
|
+
|
42
|
+
import rich_click as click
|
43
|
+
|
44
|
+
from airbyte_cdk.cli.airbyte_cdk._connector import connector_cli_group
|
45
|
+
from airbyte_cdk.cli.airbyte_cdk._image import image_cli_group
|
46
|
+
from airbyte_cdk.cli.airbyte_cdk._manifest import manifest_cli_group
|
47
|
+
from airbyte_cdk.cli.airbyte_cdk._secrets import secrets_cli_group
|
48
|
+
from airbyte_cdk.cli.airbyte_cdk._version import print_version
|
49
|
+
|
50
|
+
|
51
|
+
@click.group(
|
52
|
+
help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown)
|
53
|
+
invoke_without_command=True,
|
54
|
+
)
|
55
|
+
@click.option(
|
56
|
+
"--version",
|
57
|
+
is_flag=True,
|
58
|
+
help="Show the version of the Airbyte CDK.",
|
59
|
+
)
|
60
|
+
@click.pass_context
|
61
|
+
def cli(
|
62
|
+
ctx: click.Context,
|
63
|
+
version: bool,
|
64
|
+
) -> None:
|
65
|
+
"""Airbyte CDK CLI.
|
66
|
+
|
67
|
+
Help text is provided from the file-level docstring.
|
68
|
+
"""
|
69
|
+
if version:
|
70
|
+
print_version(short=False)
|
71
|
+
ctx.exit()
|
72
|
+
|
73
|
+
if ctx.invoked_subcommand is None:
|
74
|
+
# If no subcommand is provided, show the help message.
|
75
|
+
click.echo(ctx.get_help())
|
76
|
+
ctx.exit()
|
77
|
+
|
78
|
+
|
79
|
+
cli.add_command(connector_cli_group)
|
80
|
+
cli.add_command(manifest_cli_group)
|
81
|
+
cli.add_command(image_cli_group)
|
82
|
+
cli.add_command(secrets_cli_group)
|
83
|
+
|
84
|
+
|
85
|
+
if __name__ == "__main__":
|
86
|
+
cli()
|
@@ -0,0 +1,179 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""CLI command for `airbyte-cdk`."""
|
3
|
+
|
4
|
+
USAGE = """CLI command for `airbyte-cdk`.
|
5
|
+
|
6
|
+
This CLI interface allows you to interact with your connector, including
|
7
|
+
testing and running commands.
|
8
|
+
|
9
|
+
**Basic Usage:**
|
10
|
+
|
11
|
+
```bash
|
12
|
+
airbyte-cdk --help
|
13
|
+
airbyte-cdk connector --help
|
14
|
+
airbyte-cdk manifest --help
|
15
|
+
```
|
16
|
+
|
17
|
+
**Running Statelessly:**
|
18
|
+
|
19
|
+
You can run the latest version of this CLI, from any machine, using `pipx` or `uvx`:
|
20
|
+
|
21
|
+
```bash
|
22
|
+
# Run the latest version of the CLI:
|
23
|
+
pipx run airbyte-cdk connector --help
|
24
|
+
uvx airbyte-cdk connector --help
|
25
|
+
|
26
|
+
# Run from a specific CDK version:
|
27
|
+
pipx run airbyte-cdk==6.5.1 connector --help
|
28
|
+
uvx airbyte-cdk==6.5.1 connector --help
|
29
|
+
```
|
30
|
+
|
31
|
+
**Running within your virtualenv:**
|
32
|
+
|
33
|
+
You can also run from your connector's virtualenv:
|
34
|
+
|
35
|
+
```bash
|
36
|
+
poetry run airbyte-cdk connector --help
|
37
|
+
```
|
38
|
+
|
39
|
+
"""
|
40
|
+
|
41
|
+
import os
|
42
|
+
from pathlib import Path
|
43
|
+
from types import ModuleType
|
44
|
+
|
45
|
+
import rich_click as click
|
46
|
+
|
47
|
+
# from airbyte_cdk.test.standard_tests import pytest_hooks
|
48
|
+
from airbyte_cdk.cli.airbyte_cdk._util import resolve_connector_name_and_directory
|
49
|
+
from airbyte_cdk.test.standard_tests.test_resources import find_connector_root_from_name
|
50
|
+
from airbyte_cdk.test.standard_tests.util import create_connector_test_suite
|
51
|
+
|
52
|
+
click.rich_click.TEXT_MARKUP = "markdown"
|
53
|
+
|
54
|
+
pytest: ModuleType | None
|
55
|
+
try:
|
56
|
+
import pytest
|
57
|
+
except ImportError:
|
58
|
+
pytest = None
|
59
|
+
# Handle the case where pytest is not installed.
|
60
|
+
# This prevents import errors when running the script without pytest installed.
|
61
|
+
# We will raise an error later if pytest is required for a given command.
|
62
|
+
|
63
|
+
|
64
|
+
TEST_FILE_TEMPLATE = '''
|
65
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
66
|
+
"""FAST Airbyte Standard Tests for the source_pokeapi_w_components source."""
|
67
|
+
|
68
|
+
#from airbyte_cdk.test.standard_tests import {base_class_name}
|
69
|
+
from airbyte_cdk.test.standard_tests.util import create_connector_test_suite
|
70
|
+
from pathlib import Path
|
71
|
+
|
72
|
+
pytest_plugins = [
|
73
|
+
"airbyte_cdk.test.standard_tests.pytest_hooks",
|
74
|
+
]
|
75
|
+
|
76
|
+
TestSuite = create_connector_test_suite(
|
77
|
+
connector_directory=Path(),
|
78
|
+
)
|
79
|
+
|
80
|
+
# class TestSuite({base_class_name}):
|
81
|
+
# """Test suite for the source_pokeapi_w_components source.
|
82
|
+
|
83
|
+
# This class inherits from SourceTestSuiteBase and implements all of the tests in the suite.
|
84
|
+
|
85
|
+
# As long as the class name starts with "Test", pytest will automatically discover and run the
|
86
|
+
# tests in this class.
|
87
|
+
# """
|
88
|
+
'''
|
89
|
+
|
90
|
+
|
91
|
+
@click.group(
|
92
|
+
name="connector",
|
93
|
+
help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown)
|
94
|
+
)
|
95
|
+
def connector_cli_group() -> None:
|
96
|
+
"""Connector related commands."""
|
97
|
+
pass
|
98
|
+
|
99
|
+
|
100
|
+
@connector_cli_group.command()
|
101
|
+
@click.option(
|
102
|
+
"--connector-name",
|
103
|
+
type=str,
|
104
|
+
help="Name of the connector to test. Ignored if --connector-directory is provided.",
|
105
|
+
)
|
106
|
+
@click.option(
|
107
|
+
"--connector-directory",
|
108
|
+
type=click.Path(exists=True, file_okay=False, path_type=Path),
|
109
|
+
help="Path to the connector directory.",
|
110
|
+
)
|
111
|
+
@click.option(
|
112
|
+
"--collect-only",
|
113
|
+
is_flag=True,
|
114
|
+
default=False,
|
115
|
+
help="Only collect tests, do not run them.",
|
116
|
+
)
|
117
|
+
def test(
|
118
|
+
connector_name: str | None = None,
|
119
|
+
connector_directory: Path | None = None,
|
120
|
+
*,
|
121
|
+
collect_only: bool = False,
|
122
|
+
) -> None:
|
123
|
+
"""Run connector tests.
|
124
|
+
|
125
|
+
This command runs the standard connector tests for a specific connector.
|
126
|
+
|
127
|
+
If no connector name or directory is provided, we will look within the current working
|
128
|
+
directory. If the current working directory is not a connector directory (e.g. starting
|
129
|
+
with 'source-') and no connector name or path is provided, the process will fail.
|
130
|
+
"""
|
131
|
+
if pytest is None:
|
132
|
+
raise ImportError(
|
133
|
+
"pytest is not installed. Please install pytest to run the connector tests."
|
134
|
+
)
|
135
|
+
click.echo("Connector test command executed.")
|
136
|
+
connector_name, connector_directory = resolve_connector_name_and_directory(
|
137
|
+
connector_name=connector_name,
|
138
|
+
connector_directory=connector_directory,
|
139
|
+
)
|
140
|
+
|
141
|
+
connector_test_suite = create_connector_test_suite(
|
142
|
+
connector_name=connector_name if not connector_directory else None,
|
143
|
+
connector_directory=connector_directory,
|
144
|
+
)
|
145
|
+
|
146
|
+
pytest_args: list[str] = []
|
147
|
+
if connector_directory:
|
148
|
+
pytest_args.append(f"--rootdir={connector_directory}")
|
149
|
+
os.chdir(str(connector_directory))
|
150
|
+
else:
|
151
|
+
print("No connector directory provided. Running tests in the current directory.")
|
152
|
+
|
153
|
+
file_text = TEST_FILE_TEMPLATE.format(
|
154
|
+
base_class_name=connector_test_suite.__bases__[0].__name__,
|
155
|
+
connector_directory=str(connector_directory),
|
156
|
+
)
|
157
|
+
test_file_path = Path() / ".tmp" / "integration_tests/test_airbyte_standards.py"
|
158
|
+
test_file_path = test_file_path.resolve().absolute()
|
159
|
+
test_file_path.parent.mkdir(parents=True, exist_ok=True)
|
160
|
+
test_file_path.write_text(file_text)
|
161
|
+
|
162
|
+
if collect_only:
|
163
|
+
pytest_args.append("--collect-only")
|
164
|
+
|
165
|
+
pytest_args.append(str(test_file_path))
|
166
|
+
click.echo(f"Running tests from connector directory: {connector_directory}...")
|
167
|
+
click.echo(f"Test file: {test_file_path}")
|
168
|
+
click.echo(f"Collect only: {collect_only}")
|
169
|
+
click.echo(f"Pytest args: {pytest_args}")
|
170
|
+
click.echo("Invoking Pytest...")
|
171
|
+
pytest.main(
|
172
|
+
pytest_args,
|
173
|
+
plugins=[],
|
174
|
+
)
|
175
|
+
|
176
|
+
|
177
|
+
__all__ = [
|
178
|
+
"connector_cli_group",
|
179
|
+
]
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""Airbyte CDK 'image' commands.
|
3
|
+
|
4
|
+
The `airbyte-cdk image build` command provides a simple way to work with Airbyte
|
5
|
+
connector images.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import sys
|
9
|
+
from pathlib import Path
|
10
|
+
|
11
|
+
import rich_click as click
|
12
|
+
|
13
|
+
from airbyte_cdk.cli.airbyte_cdk._util import resolve_connector_name_and_directory
|
14
|
+
from airbyte_cdk.models.connector_metadata import MetadataFile
|
15
|
+
from airbyte_cdk.utils.docker import (
|
16
|
+
ConnectorImageBuildError,
|
17
|
+
build_connector_image,
|
18
|
+
verify_docker_installation,
|
19
|
+
)
|
20
|
+
|
21
|
+
|
22
|
+
@click.group(
|
23
|
+
name="image",
|
24
|
+
help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown)
|
25
|
+
)
|
26
|
+
def image_cli_group() -> None:
|
27
|
+
"""Commands for working with connector Docker images."""
|
28
|
+
|
29
|
+
|
30
|
+
@image_cli_group.command()
|
31
|
+
@click.option(
|
32
|
+
"--connector-name",
|
33
|
+
type=str,
|
34
|
+
help="Name of the connector to test. Ignored if --connector-directory is provided.",
|
35
|
+
)
|
36
|
+
@click.option(
|
37
|
+
"--connector-directory",
|
38
|
+
type=click.Path(exists=True, file_okay=False, path_type=Path),
|
39
|
+
help="Path to the connector directory.",
|
40
|
+
)
|
41
|
+
@click.option("--tag", default="dev", help="Tag to apply to the built image (default: dev)")
|
42
|
+
@click.option("--no-verify", is_flag=True, help="Skip verification of the built image")
|
43
|
+
def build(
|
44
|
+
connector_name: str | None = None,
|
45
|
+
connector_directory: Path | None = None,
|
46
|
+
*,
|
47
|
+
tag: str = "dev",
|
48
|
+
no_verify: bool = False,
|
49
|
+
) -> None:
|
50
|
+
"""Build a connector Docker image.
|
51
|
+
|
52
|
+
This command builds a Docker image for a connector, using either
|
53
|
+
the connector's Dockerfile or a base image specified in the metadata.
|
54
|
+
The image is built for both AMD64 and ARM64 architectures.
|
55
|
+
"""
|
56
|
+
if not verify_docker_installation():
|
57
|
+
click.echo(
|
58
|
+
"Docker is not installed or not running. Please install Docker and try again.", err=True
|
59
|
+
)
|
60
|
+
sys.exit(1)
|
61
|
+
|
62
|
+
connector_name, connector_directory = resolve_connector_name_and_directory(
|
63
|
+
connector_name=connector_name,
|
64
|
+
connector_directory=connector_directory,
|
65
|
+
)
|
66
|
+
|
67
|
+
metadata_file_path: Path = connector_directory / "metadata.yaml"
|
68
|
+
try:
|
69
|
+
metadata = MetadataFile.from_file(metadata_file_path)
|
70
|
+
except (FileNotFoundError, ValueError) as e:
|
71
|
+
click.echo(
|
72
|
+
f"Error loading metadata file '{metadata_file_path}': {e!s}",
|
73
|
+
err=True,
|
74
|
+
)
|
75
|
+
sys.exit(1)
|
76
|
+
click.echo(f"Building Image for Connector: {metadata.data.dockerRepository}:{tag}")
|
77
|
+
try:
|
78
|
+
build_connector_image(
|
79
|
+
connector_directory=connector_directory,
|
80
|
+
connector_name=connector_name,
|
81
|
+
metadata=metadata,
|
82
|
+
tag=tag,
|
83
|
+
no_verify=no_verify,
|
84
|
+
)
|
85
|
+
except ConnectorImageBuildError as e:
|
86
|
+
click.echo(
|
87
|
+
f"Error building connector image: {e!s}",
|
88
|
+
err=True,
|
89
|
+
)
|
90
|
+
sys.exit(1)
|
91
|
+
|
92
|
+
|
93
|
+
__all__ = [
|
94
|
+
"image_cli_group",
|
95
|
+
]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""Manifest related commands.
|
3
|
+
|
4
|
+
Coming soon.
|
5
|
+
|
6
|
+
This module is planned to provide a command line interface (CLI) for validating
|
7
|
+
Airbyte CDK manifests.
|
8
|
+
"""
|
9
|
+
|
10
|
+
import rich_click as click
|
11
|
+
|
12
|
+
|
13
|
+
@click.group(
|
14
|
+
name="manifest",
|
15
|
+
help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown)
|
16
|
+
)
|
17
|
+
def manifest_cli_group() -> None:
|
18
|
+
"""Manifest related commands."""
|
19
|
+
pass
|
20
|
+
|
21
|
+
|
22
|
+
__all__ = [
|
23
|
+
"manifest_cli_group",
|
24
|
+
]
|
@@ -0,0 +1,150 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""Secret management commands.
|
3
|
+
|
4
|
+
This module provides commands for managing secrets for Airbyte connectors.
|
5
|
+
|
6
|
+
Usage:
|
7
|
+
airbyte-cdk secrets fetch --connector-name source-github
|
8
|
+
airbyte-cdk secrets fetch --connector-directory /path/to/connector
|
9
|
+
airbyte-cdk secrets fetch # Run from within a connector directory
|
10
|
+
|
11
|
+
Usage without pre-installing (stateless):
|
12
|
+
pipx run airbyte-cdk secrets fetch ...
|
13
|
+
uvx airbyte-cdk secrets fetch ...
|
14
|
+
|
15
|
+
The 'fetch' command retrieves secrets from Google Secret Manager based on connector
|
16
|
+
labels and writes them to the connector's `secrets` directory.
|
17
|
+
"""
|
18
|
+
|
19
|
+
import json
|
20
|
+
import os
|
21
|
+
from pathlib import Path
|
22
|
+
|
23
|
+
import rich_click as click
|
24
|
+
|
25
|
+
from airbyte_cdk.cli.airbyte_cdk._util import resolve_connector_name_and_directory
|
26
|
+
|
27
|
+
AIRBYTE_INTERNAL_GCP_PROJECT = "dataline-integration-testing"
|
28
|
+
CONNECTOR_LABEL = "connector"
|
29
|
+
|
30
|
+
|
31
|
+
@click.group(
|
32
|
+
name="secrets",
|
33
|
+
help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown)
|
34
|
+
)
|
35
|
+
def secrets_cli_group() -> None:
|
36
|
+
"""Secret management commands."""
|
37
|
+
pass
|
38
|
+
|
39
|
+
|
40
|
+
@secrets_cli_group.command()
|
41
|
+
@click.option(
|
42
|
+
"--connector-name",
|
43
|
+
type=str,
|
44
|
+
help="Name of the connector to fetch secrets for. Ignored if --connector-directory is provided.",
|
45
|
+
)
|
46
|
+
@click.option(
|
47
|
+
"--connector-directory",
|
48
|
+
type=click.Path(exists=True, file_okay=False, path_type=Path),
|
49
|
+
help="Path to the connector directory.",
|
50
|
+
)
|
51
|
+
@click.option(
|
52
|
+
"--gcp-project-id",
|
53
|
+
type=str,
|
54
|
+
default=AIRBYTE_INTERNAL_GCP_PROJECT,
|
55
|
+
help=f"GCP project ID. Defaults to '{AIRBYTE_INTERNAL_GCP_PROJECT}'.",
|
56
|
+
)
|
57
|
+
def fetch(
|
58
|
+
connector_name: str | None = None,
|
59
|
+
connector_directory: Path | None = None,
|
60
|
+
gcp_project_id: str = AIRBYTE_INTERNAL_GCP_PROJECT,
|
61
|
+
) -> None:
|
62
|
+
"""Fetch secrets for a connector from Google Secret Manager.
|
63
|
+
|
64
|
+
This command fetches secrets for a connector from Google Secret Manager and writes them
|
65
|
+
to the connector's secrets directory.
|
66
|
+
|
67
|
+
If no connector name or directory is provided, we will look within the current working
|
68
|
+
directory. If the current working directory is not a connector directory (e.g. starting
|
69
|
+
with 'source-') and no connector name or path is provided, the process will fail.
|
70
|
+
"""
|
71
|
+
try:
|
72
|
+
from google.cloud import secretmanager_v1 as secretmanager
|
73
|
+
except ImportError:
|
74
|
+
raise ImportError(
|
75
|
+
"google-cloud-secret-manager package is required for Secret Manager integration. "
|
76
|
+
"Install it with 'pip install airbyte-cdk[dev]' "
|
77
|
+
"or 'pip install google-cloud-secret-manager'."
|
78
|
+
)
|
79
|
+
|
80
|
+
click.echo("Fetching secrets...")
|
81
|
+
|
82
|
+
# Resolve connector name/directory
|
83
|
+
try:
|
84
|
+
connector_name, connector_directory = resolve_connector_name_and_directory(
|
85
|
+
connector_name=connector_name,
|
86
|
+
connector_directory=connector_directory,
|
87
|
+
)
|
88
|
+
except FileNotFoundError as e:
|
89
|
+
raise FileNotFoundError(
|
90
|
+
f"Could not find connector directory for '{connector_name}'. "
|
91
|
+
"Please provide the --connector-directory option with the path to the connector. "
|
92
|
+
"Note: This command requires either running from within a connector directory, "
|
93
|
+
"being in the airbyte monorepo, or explicitly providing the connector directory path."
|
94
|
+
) from e
|
95
|
+
except ValueError as e:
|
96
|
+
raise ValueError(str(e))
|
97
|
+
|
98
|
+
# Create secrets directory if it doesn't exist
|
99
|
+
secrets_dir = connector_directory / "secrets"
|
100
|
+
secrets_dir.mkdir(parents=True, exist_ok=True)
|
101
|
+
|
102
|
+
gitignore_path = secrets_dir / ".gitignore"
|
103
|
+
gitignore_path.write_text("*")
|
104
|
+
|
105
|
+
# Get GSM client
|
106
|
+
credentials_json = os.environ.get("GCP_GSM_CREDENTIALS")
|
107
|
+
if not credentials_json:
|
108
|
+
raise ValueError(
|
109
|
+
"No Google Cloud credentials found. Please set the GCP_GSM_CREDENTIALS environment variable."
|
110
|
+
)
|
111
|
+
|
112
|
+
client = secretmanager.SecretManagerServiceClient.from_service_account_info(
|
113
|
+
json.loads(credentials_json)
|
114
|
+
)
|
115
|
+
|
116
|
+
# List all secrets with the connector label
|
117
|
+
parent = f"projects/{gcp_project_id}"
|
118
|
+
filter_string = f"labels.{CONNECTOR_LABEL}={connector_name}"
|
119
|
+
secrets = client.list_secrets(
|
120
|
+
request=secretmanager.ListSecretsRequest(
|
121
|
+
parent=parent,
|
122
|
+
filter=filter_string,
|
123
|
+
)
|
124
|
+
)
|
125
|
+
|
126
|
+
# Fetch and write secrets
|
127
|
+
secret_count = 0
|
128
|
+
for secret in secrets:
|
129
|
+
secret_name = secret.name
|
130
|
+
version_name = f"{secret_name}/versions/latest"
|
131
|
+
response = client.access_secret_version(name=version_name)
|
132
|
+
payload = response.payload.data.decode("UTF-8")
|
133
|
+
|
134
|
+
filename_base = "config" # Default filename
|
135
|
+
if secret.labels and "filename" in secret.labels:
|
136
|
+
filename_base = secret.labels["filename"]
|
137
|
+
|
138
|
+
secret_file_path = secrets_dir / f"{filename_base}.json"
|
139
|
+
secret_file_path.write_text(payload)
|
140
|
+
secret_file_path.chmod(0o600) # default to owner read/write only
|
141
|
+
click.echo(f"Secret written to: {secret_file_path.absolute()!s}")
|
142
|
+
secret_count += 1
|
143
|
+
|
144
|
+
if secret_count == 0:
|
145
|
+
click.echo(f"No secrets found for connector: {connector_name}")
|
146
|
+
|
147
|
+
|
148
|
+
__all__ = [
|
149
|
+
"secrets_cli_group",
|
150
|
+
]
|
@@ -0,0 +1,43 @@
|
|
1
|
+
"""Common utilities for Airbyte CDK CLI."""
|
2
|
+
|
3
|
+
from pathlib import Path
|
4
|
+
|
5
|
+
from airbyte_cdk.test.standard_tests.test_resources import find_connector_root_from_name
|
6
|
+
|
7
|
+
|
8
|
+
def resolve_connector_name_and_directory(
|
9
|
+
connector_name: str | None = None,
|
10
|
+
connector_directory: Path | None = None,
|
11
|
+
) -> tuple[str, Path]:
|
12
|
+
"""Resolve the connector name and directory.
|
13
|
+
|
14
|
+
This function will resolve the connector name and directory based on the provided
|
15
|
+
arguments. If no connector name or directory is provided, it will look within the
|
16
|
+
current working directory. If the current working directory is not a connector
|
17
|
+
directory (e.g. starting with 'source-') and no connector name or path is provided,
|
18
|
+
the process will fail.
|
19
|
+
"""
|
20
|
+
if not connector_directory:
|
21
|
+
if connector_name:
|
22
|
+
connector_directory = find_connector_root_from_name(connector_name)
|
23
|
+
else:
|
24
|
+
cwd = Path().resolve().absolute()
|
25
|
+
if cwd.name.startswith("source-") or cwd.name.startswith("destination-"):
|
26
|
+
connector_directory = cwd
|
27
|
+
else:
|
28
|
+
raise ValueError(
|
29
|
+
"Either connector_name or connector_directory must be provided if not "
|
30
|
+
"running from a connector directory."
|
31
|
+
)
|
32
|
+
|
33
|
+
if not connector_name:
|
34
|
+
connector_name = connector_directory.name
|
35
|
+
|
36
|
+
if connector_directory:
|
37
|
+
connector_directory = connector_directory.resolve().absolute()
|
38
|
+
elif connector_name:
|
39
|
+
connector_directory = find_connector_root_from_name(connector_name)
|
40
|
+
else:
|
41
|
+
raise ValueError("Either connector_name or connector_directory must be provided.")
|
42
|
+
|
43
|
+
return connector_name, connector_directory
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Copyright (c) 2025 Airbyte, Inc., all rights reserved.
|
2
|
+
"""Version information for the Airbyte CDK CLI."""
|
3
|
+
|
4
|
+
from airbyte_cdk import __version__
|
5
|
+
|
6
|
+
|
7
|
+
def print_version(short: bool = False) -> None:
|
8
|
+
"""Print the version of the Airbyte CDK CLI."""
|
9
|
+
|
10
|
+
if short:
|
11
|
+
print(__version__)
|
12
|
+
else:
|
13
|
+
print(f"Airbyte CDK version: {__version__}")
|
@@ -56,12 +56,22 @@ def get_limits(config: Mapping[str, Any]) -> TestLimits:
|
|
56
56
|
return TestLimits(max_records, max_pages_per_slice, max_slices, max_streams)
|
57
57
|
|
58
58
|
|
59
|
+
def should_normalize_manifest(config: Mapping[str, Any]) -> bool:
|
60
|
+
"""
|
61
|
+
Check if the manifest should be normalized.
|
62
|
+
:param config: The configuration to check
|
63
|
+
:return: True if the manifest should be normalized, False otherwise.
|
64
|
+
"""
|
65
|
+
return config.get("__should_normalize", False)
|
66
|
+
|
67
|
+
|
59
68
|
def create_source(config: Mapping[str, Any], limits: TestLimits) -> ManifestDeclarativeSource:
|
60
69
|
manifest = config["__injected_declarative_manifest"]
|
61
70
|
return ManifestDeclarativeSource(
|
62
71
|
config=config,
|
63
72
|
emit_connector_builder_messages=True,
|
64
73
|
source_config=manifest,
|
74
|
+
normalize_manifest=should_normalize_manifest(config),
|
65
75
|
component_factory=ModelToComponentFactory(
|
66
76
|
emit_connector_builder_messages=True,
|
67
77
|
limit_pages_fetched_per_slice=limits.max_pages_per_slice,
|