airbyte-cdk 6.45.4.post49.dev14495925594__tar.gz → 6.45.4.post51.dev14501768171__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.
Files changed (384) hide show
  1. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/PKG-INFO +2 -1
  2. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/entrypoint_wrapper.py +4 -0
  3. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/__init__.py +46 -0
  4. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/_job_runner.py +159 -0
  5. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/connector_base.py +148 -0
  6. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/declarative_sources.py +92 -0
  7. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/destination_base.py +16 -0
  8. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/models/__init__.py +7 -0
  9. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/models/scenario.py +74 -0
  10. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/pytest_hooks.py +61 -0
  11. airbyte_cdk-6.45.4.post51.dev14501768171/airbyte_cdk/test/standard_tests/source_base.py +140 -0
  12. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/pyproject.toml +5 -1
  13. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/LICENSE.txt +0 -0
  14. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/LICENSE_SHORT +0 -0
  15. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/README.md +0 -0
  16. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/__init__.py +0 -0
  17. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/cli/__init__.py +0 -0
  18. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  19. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  20. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  21. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/config_observation.py +0 -0
  22. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector.py +0 -0
  23. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/README.md +0 -0
  24. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/__init__.py +0 -0
  25. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  26. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/main.py +0 -0
  27. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/models.py +0 -0
  28. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  29. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  30. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  31. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  32. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  33. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/__init__.py +0 -0
  34. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/destination.py +0 -0
  35. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  36. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  37. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  38. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  39. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  40. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  41. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  42. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  43. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  44. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/entrypoint.py +0 -0
  45. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/exception_handler.py +0 -0
  46. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/logger.py +0 -0
  47. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/models/__init__.py +0 -0
  48. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  49. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  50. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/models/well_known_types.py +0 -0
  51. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/py.typed +0 -0
  52. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/__init__.py +0 -0
  53. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/abstract_source.py +0 -0
  54. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  55. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  56. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  57. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  58. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  59. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  60. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  61. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/config.py +0 -0
  62. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  63. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  64. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  65. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  66. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  67. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  68. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  69. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  70. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  71. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  72. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  73. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  74. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  75. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  76. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  77. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  78. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  79. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  80. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  81. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  82. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  83. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  84. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  85. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  86. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  87. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  88. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  89. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  90. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  91. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  92. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  93. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  94. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
  95. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  96. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  97. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  98. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  99. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  100. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  101. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  102. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  103. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  104. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  105. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  106. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  107. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  108. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  109. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  110. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
  111. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  112. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  113. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  114. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  115. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  116. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  117. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  118. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  119. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  120. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  121. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  122. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  123. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  124. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  125. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  126. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  127. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  128. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  129. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  130. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  131. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  132. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  133. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  134. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  135. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  136. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  137. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
  138. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  139. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  140. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  141. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
  142. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  143. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  144. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  145. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  146. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  147. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  148. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  149. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  150. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  151. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  152. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  153. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  154. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  155. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  156. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  157. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  158. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  159. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  160. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  161. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  162. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  163. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  164. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  165. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  166. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  167. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  168. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  169. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  170. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  171. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  172. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  173. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
  174. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
  175. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
  176. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
  177. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
  178. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
  179. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
  180. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  181. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  182. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  183. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  184. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  185. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  186. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  187. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  188. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  189. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  190. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  191. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  192. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  193. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  194. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  195. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  196. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/retrievers/file_uploader.py +0 -0
  197. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  198. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  199. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  200. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  201. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  202. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  203. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  204. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  205. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  206. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  207. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  208. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  209. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  210. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  211. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  212. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  213. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  214. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  215. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  216. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  217. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  218. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  219. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/types.py +0 -0
  220. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  221. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/README.md +0 -0
  222. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  223. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  224. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  225. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  226. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  227. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  228. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  229. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  230. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  231. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  232. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  233. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  234. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  235. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  236. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  237. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  238. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  239. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  240. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  241. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
  242. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  243. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
  244. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  245. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  246. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  247. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  248. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  249. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  250. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  251. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  252. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  253. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  254. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  255. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  256. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  257. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  258. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  259. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  260. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  261. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  262. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  263. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  264. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  265. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  266. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  267. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  268. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  269. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  270. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  271. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  272. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/file_based/types.py +0 -0
  273. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/http_config.py +0 -0
  274. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/http_logger.py +0 -0
  275. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/message/__init__.py +0 -0
  276. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/message/repository.py +0 -0
  277. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/source.py +0 -0
  278. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  279. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/__init__.py +0 -0
  280. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  281. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  282. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  283. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  284. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  285. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  286. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  287. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  288. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  289. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  290. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  291. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  292. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  293. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  294. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  295. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  296. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  297. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  298. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  299. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  300. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  301. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  302. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  303. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  304. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  305. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  306. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  307. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  308. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  309. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  310. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  311. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/core.py +0 -0
  312. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  313. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  314. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  315. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  316. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  317. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  318. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  319. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  320. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  321. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  322. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  323. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  324. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/http.py +0 -0
  325. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  326. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  327. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  328. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  329. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  330. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  331. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  332. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  333. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  334. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/types.py +0 -0
  335. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/__init__.py +0 -0
  336. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/casing.py +0 -0
  337. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/files_directory.py +0 -0
  338. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  339. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  340. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  341. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/transform.py +0 -0
  342. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sources/utils/types.py +0 -0
  343. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/__init__.py +0 -0
  344. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/_util/__init__.py +0 -0
  345. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/_util/hashing.py +0 -0
  346. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  347. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/constants.py +0 -0
  348. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/exceptions.py +0 -0
  349. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/secrets.py +0 -0
  350. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/shared/__init__.py +0 -0
  351. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  352. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  353. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/sql/types.py +0 -0
  354. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/__init__.py +0 -0
  355. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/catalog_builder.py +0 -0
  356. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  357. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  358. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  359. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/mock_http/request.py +0 -0
  360. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/mock_http/response.py +0 -0
  361. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  362. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/state_builder.py +0 -0
  363. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/utils/__init__.py +0 -0
  364. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/utils/data.py +0 -0
  365. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  366. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  367. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/test/utils/reading.py +0 -0
  368. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/__init__.py +0 -0
  369. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  370. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/analytics_message.py +0 -0
  371. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/constants.py +0 -0
  372. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  373. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  374. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/event_timing.py +0 -0
  375. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  376. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  377. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/message_utils.py +0 -0
  378. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  379. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/print_buffer.py +0 -0
  380. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  381. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/slice_hasher.py +0 -0
  382. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  383. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  384. {airbyte_cdk-6.45.4.post49.dev14495925594 → airbyte_cdk-6.45.4.post51.dev14501768171}/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.45.4.post49.dev14495925594
3
+ Version: 6.45.4.post51.dev14501768171
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -26,6 +26,7 @@ Requires-Dist: airbyte-protocol-models-dataclasses (>=0.15,<0.16)
26
26
  Requires-Dist: anyascii (>=0.3.2,<0.4.0)
27
27
  Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
28
28
  Requires-Dist: backoff
29
+ Requires-Dist: boltons (>=25.0.0,<26.0.0)
29
30
  Requires-Dist: cachetools
30
31
  Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
31
32
  Requires-Dist: cryptography (>=44.0.0,<45.0.0)
@@ -82,6 +82,10 @@ class EntrypointOutput:
82
82
  def state_messages(self) -> List[AirbyteMessage]:
83
83
  return self._get_message_by_types([Type.STATE])
84
84
 
85
+ @property
86
+ def connection_status_messages(self) -> List[AirbyteMessage]:
87
+ return self._get_message_by_types([Type.CONNECTION_STATUS])
88
+
85
89
  @property
86
90
  def most_recent_state(self) -> Any:
87
91
  state_messages = self._get_message_by_types([Type.STATE])
@@ -0,0 +1,46 @@
1
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
+ '''FAST Airbyte Standard Tests
3
+
4
+ This module provides a set of base classes for declarative connector test suites.
5
+ The goal of this module is to provide a robust and extensible framework for testing Airbyte
6
+ connectors.
7
+
8
+ Example usage:
9
+
10
+ ```python
11
+ # `test_airbyte_standards.py`
12
+ from airbyte_cdk.test import standard_tests
13
+
14
+ pytest_plugins = [
15
+ "airbyte_cdk.test.standard_tests.pytest_hooks",
16
+ ]
17
+
18
+
19
+ class TestSuiteSourcePokeAPI(standard_tests.DeclarativeSourceTestSuite):
20
+ """Test suite for the source."""
21
+ ```
22
+
23
+ Available test suites base classes:
24
+ - `DeclarativeSourceTestSuite`: A test suite for declarative sources.
25
+ - `SourceTestSuiteBase`: A test suite for sources.
26
+ - `DestinationTestSuiteBase`: A test suite for destinations.
27
+
28
+ '''
29
+
30
+ from airbyte_cdk.test.standard_tests.connector_base import (
31
+ ConnectorTestScenario,
32
+ ConnectorTestSuiteBase,
33
+ )
34
+ from airbyte_cdk.test.standard_tests.declarative_sources import (
35
+ DeclarativeSourceTestSuite,
36
+ )
37
+ from airbyte_cdk.test.standard_tests.destination_base import DestinationTestSuiteBase
38
+ from airbyte_cdk.test.standard_tests.source_base import SourceTestSuiteBase
39
+
40
+ __all__ = [
41
+ "ConnectorTestScenario",
42
+ "ConnectorTestSuiteBase",
43
+ "DeclarativeSourceTestSuite",
44
+ "DestinationTestSuiteBase",
45
+ "SourceTestSuiteBase",
46
+ ]
@@ -0,0 +1,159 @@
1
+ # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ """Job runner for Airbyte Standard Tests."""
3
+
4
+ import logging
5
+ import tempfile
6
+ import uuid
7
+ from dataclasses import asdict
8
+ from pathlib import Path
9
+ from typing import Any, Callable, Literal
10
+
11
+ import orjson
12
+ from typing_extensions import Protocol, runtime_checkable
13
+
14
+ from airbyte_cdk.models import (
15
+ ConfiguredAirbyteCatalog,
16
+ Status,
17
+ )
18
+ from airbyte_cdk.test import entrypoint_wrapper
19
+ from airbyte_cdk.test.standard_tests.models import (
20
+ ConnectorTestScenario,
21
+ )
22
+
23
+
24
+ def _errors_to_str(
25
+ entrypoint_output: entrypoint_wrapper.EntrypointOutput,
26
+ ) -> str:
27
+ """Convert errors from entrypoint output to a string."""
28
+ if not entrypoint_output.errors:
29
+ # If there are no errors, return an empty string.
30
+ return ""
31
+
32
+ return "\n" + "\n".join(
33
+ [
34
+ str(error.trace.error).replace(
35
+ "\\n",
36
+ "\n",
37
+ )
38
+ for error in entrypoint_output.errors
39
+ if error.trace
40
+ ],
41
+ )
42
+
43
+
44
+ @runtime_checkable
45
+ class IConnector(Protocol):
46
+ """A connector that can be run in a test scenario.
47
+
48
+ Note: We currently use 'spec' to determine if we have a connector object.
49
+ In the future, it would be preferred to leverage a 'launch' method instead,
50
+ directly on the connector (which doesn't yet exist).
51
+ """
52
+
53
+ def spec(self, logger: logging.Logger) -> Any:
54
+ """Connectors should have a `spec` method."""
55
+
56
+
57
+ def run_test_job(
58
+ connector: IConnector | type[IConnector] | Callable[[], IConnector],
59
+ verb: Literal["read", "check", "discover"],
60
+ test_scenario: ConnectorTestScenario,
61
+ *,
62
+ catalog: ConfiguredAirbyteCatalog | dict[str, Any] | None = None,
63
+ ) -> entrypoint_wrapper.EntrypointOutput:
64
+ """Run a test scenario from provided CLI args and return the result."""
65
+ if not connector:
66
+ raise ValueError("Connector is required")
67
+
68
+ if catalog and isinstance(catalog, ConfiguredAirbyteCatalog):
69
+ # Convert the catalog to a dict if it's already a ConfiguredAirbyteCatalog.
70
+ catalog = asdict(catalog)
71
+
72
+ connector_obj: IConnector
73
+ if isinstance(connector, type) or callable(connector):
74
+ # If the connector is a class or a factory lambda, instantiate it.
75
+ connector_obj = connector()
76
+ elif isinstance(connector, IConnector):
77
+ connector_obj = connector
78
+ else:
79
+ raise ValueError(
80
+ f"Invalid connector input: {type(connector)}",
81
+ )
82
+
83
+ args: list[str] = [verb]
84
+ if test_scenario.config_path:
85
+ args += ["--config", str(test_scenario.config_path)]
86
+ elif test_scenario.config_dict:
87
+ config_path = (
88
+ Path(tempfile.gettempdir()) / "airbyte-test" / f"temp_config_{uuid.uuid4().hex}.json"
89
+ )
90
+ config_path.parent.mkdir(parents=True, exist_ok=True)
91
+ config_path.write_text(orjson.dumps(test_scenario.config_dict).decode())
92
+ args += ["--config", str(config_path)]
93
+
94
+ catalog_path: Path | None = None
95
+ if verb not in ["discover", "check"]:
96
+ # We need a catalog for read.
97
+ if catalog:
98
+ # Write the catalog to a temp json file and pass the path to the file as an argument.
99
+ catalog_path = (
100
+ Path(tempfile.gettempdir())
101
+ / "airbyte-test"
102
+ / f"temp_catalog_{uuid.uuid4().hex}.json"
103
+ )
104
+ catalog_path.parent.mkdir(parents=True, exist_ok=True)
105
+ catalog_path.write_text(orjson.dumps(catalog).decode())
106
+ elif test_scenario.configured_catalog_path:
107
+ catalog_path = Path(test_scenario.configured_catalog_path)
108
+
109
+ if catalog_path:
110
+ args += ["--catalog", str(catalog_path)]
111
+
112
+ # This is a bit of a hack because the source needs the catalog early.
113
+ # Because it *also* can fail, we have to redundantly wrap it in a try/except block.
114
+
115
+ result: entrypoint_wrapper.EntrypointOutput = entrypoint_wrapper._run_command( # noqa: SLF001 # Non-public API
116
+ source=connector_obj, # type: ignore [arg-type]
117
+ args=args,
118
+ expecting_exception=test_scenario.expect_exception,
119
+ )
120
+ if result.errors and not test_scenario.expect_exception:
121
+ raise AssertionError(
122
+ f"Expected no errors but got {len(result.errors)}: \n" + _errors_to_str(result)
123
+ )
124
+
125
+ if verb == "check":
126
+ # Check is expected to fail gracefully without an exception.
127
+ # Instead, we assert that we have a CONNECTION_STATUS message with
128
+ # a failure status.
129
+ assert len(result.connection_status_messages) == 1, (
130
+ "Expected exactly one CONNECTION_STATUS message. Got "
131
+ f"{len(result.connection_status_messages)}:\n"
132
+ + "\n".join([str(msg) for msg in result.connection_status_messages])
133
+ + _errors_to_str(result)
134
+ )
135
+ if test_scenario.expect_exception:
136
+ conn_status = result.connection_status_messages[0].connectionStatus
137
+ assert conn_status, (
138
+ "Expected CONNECTION_STATUS message to be present. Got: \n"
139
+ + "\n".join([str(msg) for msg in result.connection_status_messages])
140
+ )
141
+ assert conn_status.status == Status.FAILED, (
142
+ "Expected CONNECTION_STATUS message to be FAILED. Got: \n"
143
+ + "\n".join([str(msg) for msg in result.connection_status_messages])
144
+ )
145
+
146
+ return result
147
+
148
+ # For all other verbs, we assert check that an exception is raised (or not).
149
+ if test_scenario.expect_exception:
150
+ if not result.errors:
151
+ raise AssertionError("Expected exception but got none.")
152
+
153
+ return result
154
+
155
+ assert not result.errors, (
156
+ f"Expected no errors but got {len(result.errors)}: \n" + _errors_to_str(result)
157
+ )
158
+
159
+ return result
@@ -0,0 +1,148 @@
1
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
+ """Base class for connector test suites."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import abc
7
+ import inspect
8
+ import sys
9
+ from collections.abc import Callable
10
+ from pathlib import Path
11
+ from typing import cast
12
+
13
+ import yaml
14
+ from boltons.typeutils import classproperty
15
+
16
+ from airbyte_cdk.models import (
17
+ AirbyteMessage,
18
+ Type,
19
+ )
20
+ from airbyte_cdk.test import entrypoint_wrapper
21
+ from airbyte_cdk.test.standard_tests._job_runner import IConnector, run_test_job
22
+ from airbyte_cdk.test.standard_tests.models import (
23
+ ConnectorTestScenario,
24
+ )
25
+
26
+ ACCEPTANCE_TEST_CONFIG = "acceptance-test-config.yml"
27
+ MANIFEST_YAML = "manifest.yaml"
28
+
29
+
30
+ class ConnectorTestSuiteBase(abc.ABC):
31
+ """Base class for connector test suites."""
32
+
33
+ connector: type[IConnector] | Callable[[], IConnector] | None = None
34
+ """The connector class or a factory function that returns an scenario of IConnector."""
35
+
36
+ @classmethod
37
+ def get_test_class_dir(cls) -> Path:
38
+ """Get the file path that contains the class."""
39
+ module = sys.modules[cls.__module__]
40
+ # Get the directory containing the test file
41
+ return Path(inspect.getfile(module)).parent
42
+
43
+ @classmethod
44
+ def create_connector(
45
+ cls,
46
+ scenario: ConnectorTestScenario,
47
+ ) -> IConnector:
48
+ """Instantiate the connector class."""
49
+ connector = cls.connector # type: ignore
50
+ if connector:
51
+ if callable(connector) or isinstance(connector, type):
52
+ # If the connector is a class or factory function, instantiate it:
53
+ return cast(IConnector, connector()) # type: ignore [redundant-cast]
54
+
55
+ # Otherwise, we can't instantiate the connector. Fail with a clear error message.
56
+ raise NotImplementedError(
57
+ "No connector class or connector factory function provided. "
58
+ "Please provide a class or factory function in `cls.connector`, or "
59
+ "override `cls.create_connector()` to define a custom initialization process."
60
+ )
61
+
62
+ # Test Definitions
63
+
64
+ def test_check(
65
+ self,
66
+ scenario: ConnectorTestScenario,
67
+ ) -> None:
68
+ """Run `connection` acceptance tests."""
69
+ result: entrypoint_wrapper.EntrypointOutput = run_test_job(
70
+ self.create_connector(scenario),
71
+ "check",
72
+ test_scenario=scenario,
73
+ )
74
+ conn_status_messages: list[AirbyteMessage] = [
75
+ msg for msg in result._messages if msg.type == Type.CONNECTION_STATUS
76
+ ] # noqa: SLF001 # Non-public API
77
+ assert len(conn_status_messages) == 1, (
78
+ f"Expected exactly one CONNECTION_STATUS message. Got: {result._messages}"
79
+ )
80
+
81
+ @classmethod
82
+ def get_connector_root_dir(cls) -> Path:
83
+ """Get the root directory of the connector."""
84
+ for parent in cls.get_test_class_dir().parents:
85
+ if (parent / MANIFEST_YAML).exists():
86
+ return parent
87
+ if (parent / ACCEPTANCE_TEST_CONFIG).exists():
88
+ return parent
89
+ if parent.name == "airbyte_cdk":
90
+ break
91
+ # If we reach here, we didn't find the manifest file in any parent directory
92
+ # Check if the manifest file exists in the current directory
93
+ for parent in Path.cwd().parents:
94
+ if (parent / MANIFEST_YAML).exists():
95
+ return parent
96
+ if (parent / ACCEPTANCE_TEST_CONFIG).exists():
97
+ return parent
98
+ if parent.name == "airbyte_cdk":
99
+ break
100
+
101
+ raise FileNotFoundError(
102
+ "Could not find connector root directory relative to "
103
+ f"'{str(cls.get_test_class_dir())}' or '{str(Path.cwd())}'."
104
+ )
105
+
106
+ @classproperty
107
+ def acceptance_test_config_path(cls) -> Path:
108
+ """Get the path to the acceptance test config file."""
109
+ result = cls.get_connector_root_dir() / ACCEPTANCE_TEST_CONFIG
110
+ if result.exists():
111
+ return result
112
+
113
+ raise FileNotFoundError(f"Acceptance test config file not found at: {str(result)}")
114
+
115
+ @classmethod
116
+ def get_scenarios(
117
+ cls,
118
+ ) -> list[ConnectorTestScenario]:
119
+ """Get acceptance tests for a given category.
120
+
121
+ This has to be a separate function because pytest does not allow
122
+ parametrization of fixtures with arguments from the test class itself.
123
+ """
124
+ category = "connection"
125
+ all_tests_config = yaml.safe_load(cls.acceptance_test_config_path.read_text())
126
+ if "acceptance_tests" not in all_tests_config:
127
+ raise ValueError(
128
+ f"Acceptance tests config not found in {cls.acceptance_test_config_path}."
129
+ f" Found only: {str(all_tests_config)}."
130
+ )
131
+ if category not in all_tests_config["acceptance_tests"]:
132
+ return []
133
+ if "tests" not in all_tests_config["acceptance_tests"][category]:
134
+ raise ValueError(f"No tests found for category {category}")
135
+
136
+ tests_scenarios = [
137
+ ConnectorTestScenario.model_validate(test)
138
+ for test in all_tests_config["acceptance_tests"][category]["tests"]
139
+ if "iam_role" not in test["config_path"]
140
+ ]
141
+ connector_root = cls.get_connector_root_dir().absolute()
142
+ for test in tests_scenarios:
143
+ if test.config_path:
144
+ test.config_path = connector_root / test.config_path
145
+ if test.configured_catalog_path:
146
+ test.configured_catalog_path = connector_root / test.configured_catalog_path
147
+
148
+ return tests_scenarios
@@ -0,0 +1,92 @@
1
+ import os
2
+ from hashlib import md5
3
+ from pathlib import Path
4
+ from typing import Any, cast
5
+
6
+ import yaml
7
+ from boltons.typeutils import classproperty
8
+
9
+ from airbyte_cdk.sources.declarative.concurrent_declarative_source import (
10
+ ConcurrentDeclarativeSource,
11
+ )
12
+ from airbyte_cdk.test.standard_tests._job_runner import IConnector
13
+ from airbyte_cdk.test.standard_tests.connector_base import MANIFEST_YAML
14
+ from airbyte_cdk.test.standard_tests.models import ConnectorTestScenario
15
+ from airbyte_cdk.test.standard_tests.source_base import SourceTestSuiteBase
16
+
17
+
18
+ def md5_checksum(file_path: Path) -> str:
19
+ """Helper function to calculate the MD5 checksum of a file.
20
+
21
+ This is used to calculate the checksum of the `components.py` file, if it exists.
22
+ """
23
+ with open(file_path, "rb") as file:
24
+ return md5(file.read()).hexdigest()
25
+
26
+
27
+ class DeclarativeSourceTestSuite(SourceTestSuiteBase):
28
+ """Declarative source test suite.
29
+
30
+ This inherits from the Python-based source test suite and implements the
31
+ `create_connector` method to create a declarative source object instead of
32
+ requiring a custom Python source object.
33
+
34
+ The class also automatically locates the `manifest.yaml` file and the
35
+ `components.py` file (if it exists) in the connector's directory.
36
+ """
37
+
38
+ @classproperty
39
+ def manifest_yaml_path(cls) -> Path:
40
+ """Get the path to the manifest.yaml file."""
41
+ result = cls.get_connector_root_dir() / MANIFEST_YAML
42
+ if result.exists():
43
+ return result
44
+
45
+ raise FileNotFoundError(
46
+ f"Manifest YAML file not found at {result}. "
47
+ "Please ensure that the test suite is run in the correct directory.",
48
+ )
49
+
50
+ @classproperty
51
+ def components_py_path(cls) -> Path | None:
52
+ """Get the path to the `components.py` file, if one exists.
53
+
54
+ If not `components.py` file exists, return None.
55
+ """
56
+ result = cls.get_connector_root_dir() / "components.py"
57
+ if result.exists():
58
+ return result
59
+
60
+ return None
61
+
62
+ @classmethod
63
+ def create_connector(
64
+ cls,
65
+ scenario: ConnectorTestScenario,
66
+ ) -> IConnector:
67
+ """Create a connector scenario for the test suite.
68
+
69
+ This overrides `create_connector` from the create a declarative source object
70
+ instead of requiring a custom python source object.
71
+
72
+ Subclasses should not need to override this method.
73
+ """
74
+ config: dict[str, Any] = scenario.get_config_dict()
75
+
76
+ manifest_dict = yaml.safe_load(cls.manifest_yaml_path.read_text())
77
+ if cls.components_py_path and cls.components_py_path.exists():
78
+ os.environ["AIRBYTE_ENABLE_UNSAFE_CODE"] = "true"
79
+ config["__injected_components_py"] = cls.components_py_path.read_text()
80
+ config["__injected_components_py_checksums"] = {
81
+ "md5": md5_checksum(cls.components_py_path),
82
+ }
83
+
84
+ return cast(
85
+ IConnector,
86
+ ConcurrentDeclarativeSource(
87
+ config=config,
88
+ catalog=None,
89
+ state=None,
90
+ source_config=manifest_dict,
91
+ ),
92
+ )
@@ -0,0 +1,16 @@
1
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
+ """Base class for destination test suites."""
3
+
4
+ from airbyte_cdk.test.standard_tests.connector_base import ConnectorTestSuiteBase
5
+
6
+
7
+ class DestinationTestSuiteBase(ConnectorTestSuiteBase):
8
+ """Base class for destination test suites.
9
+
10
+ This class provides a base set of functionality for testing destination connectors, and it
11
+ inherits all generic connector tests from the `ConnectorTestSuiteBase` class.
12
+
13
+ TODO: As of now, this class does not add any additional functionality or tests specific to
14
+ destination connectors. However, it serves as a placeholder for future enhancements and
15
+ customizations that may be needed for destination connectors.
16
+ """
@@ -0,0 +1,7 @@
1
+ from airbyte_cdk.test.standard_tests.models.scenario import (
2
+ ConnectorTestScenario,
3
+ )
4
+
5
+ __all__ = [
6
+ "ConnectorTestScenario",
7
+ ]
@@ -0,0 +1,74 @@
1
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
+ """Run acceptance tests in PyTest.
3
+
4
+ These tests leverage the same `acceptance-test-config.yml` configuration files as the
5
+ acceptance tests in CAT, but they run in PyTest instead of CAT. This allows us to run
6
+ the acceptance tests in the same local environment as we are developing in, speeding
7
+ up iteration cycles.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from pathlib import Path
13
+ from typing import Any, Literal, cast
14
+
15
+ import yaml
16
+ from pydantic import BaseModel
17
+
18
+
19
+ class ConnectorTestScenario(BaseModel):
20
+ """Acceptance test scenario, as a Pydantic model.
21
+
22
+ This class represents an acceptance test scenario, which is a single test case
23
+ that can be run against a connector. It is used to deserialize and validate the
24
+ acceptance test configuration file.
25
+ """
26
+
27
+ class AcceptanceTestExpectRecords(BaseModel):
28
+ path: Path
29
+ exact_order: bool = False
30
+
31
+ class AcceptanceTestFileTypes(BaseModel):
32
+ skip_test: bool
33
+ bypass_reason: str
34
+
35
+ config_path: Path | None = None
36
+ config_dict: dict[str, Any] | None = None
37
+
38
+ id: str | None = None
39
+
40
+ configured_catalog_path: Path | None = None
41
+ timeout_seconds: int | None = None
42
+ expect_records: AcceptanceTestExpectRecords | None = None
43
+ file_types: AcceptanceTestFileTypes | None = None
44
+ status: Literal["succeed", "failed"] | None = None
45
+
46
+ def get_config_dict(self) -> dict[str, Any]:
47
+ """Return the config dictionary.
48
+
49
+ If a config dictionary has already been loaded, return it. Otherwise, load
50
+ the config file and return the dictionary.
51
+ """
52
+ if self.config_dict:
53
+ return self.config_dict
54
+
55
+ if self.config_path:
56
+ return cast(dict[str, Any], yaml.safe_load(self.config_path.read_text()))
57
+
58
+ raise ValueError("No config dictionary or path provided.")
59
+
60
+ @property
61
+ def expect_exception(self) -> bool:
62
+ return self.status and self.status == "failed" or False
63
+
64
+ @property
65
+ def instance_name(self) -> str:
66
+ return self.config_path.stem if self.config_path else "Unnamed Scenario"
67
+
68
+ def __str__(self) -> str:
69
+ if self.id:
70
+ return f"'{self.id}' Test Scenario"
71
+ if self.config_path:
72
+ return f"'{self.config_path.name}' Test Scenario"
73
+
74
+ return f"'{hash(self)}' Test Scenario"
@@ -0,0 +1,61 @@
1
+ # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ """Pytest hooks for Airbyte CDK tests.
3
+
4
+ These hooks are used to customize the behavior of pytest during test discovery and execution.
5
+
6
+ To use these hooks within a connector, add the following lines to the connector's `conftest.py`
7
+ file, or to another file that is imported during test discovery:
8
+
9
+ ```python
10
+ pytest_plugins = [
11
+ "airbyte_cdk.test.standard_tests.pytest_hooks",
12
+ ]
13
+ ```
14
+ """
15
+
16
+ import pytest
17
+
18
+
19
+ def pytest_generate_tests(metafunc: pytest.Metafunc) -> None:
20
+ """
21
+ A helper for pytest_generate_tests hook.
22
+
23
+ If a test method (in a class subclassed from our base class)
24
+ declares an argument 'scenario', this function retrieves the
25
+ 'scenarios' attribute from the test class and parametrizes that
26
+ test with the values from 'scenarios'.
27
+
28
+ ## Usage
29
+
30
+ ```python
31
+ from airbyte_cdk.test.standard_tests.connector_base import (
32
+ generate_tests,
33
+ ConnectorTestSuiteBase,
34
+ )
35
+
36
+ def pytest_generate_tests(metafunc):
37
+ generate_tests(metafunc)
38
+
39
+ class TestMyConnector(ConnectorTestSuiteBase):
40
+ ...
41
+
42
+ ```
43
+ """
44
+ # Check if the test function requires an 'scenario' argument
45
+ if "scenario" in metafunc.fixturenames:
46
+ # Retrieve the test class
47
+ test_class = metafunc.cls
48
+ if test_class is None:
49
+ return
50
+
51
+ # Get the 'scenarios' attribute from the class
52
+ scenarios_attr = getattr(test_class, "get_scenarios", None)
53
+ if scenarios_attr is None:
54
+ raise ValueError(
55
+ f"Test class {test_class} does not have a 'scenarios' attribute. "
56
+ "Please define the 'scenarios' attribute in the test class."
57
+ )
58
+
59
+ scenarios = test_class.get_scenarios()
60
+ ids = [str(scenario) for scenario in scenarios]
61
+ metafunc.parametrize("scenario", scenarios, ids=ids)