airbyte-cdk 6.9.1.dev3__tar.gz → 6.9.2__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 (342) hide show
  1. airbyte_cdk-6.9.2/PKG-INFO +108 -0
  2. airbyte_cdk-6.9.2/README.md +34 -0
  3. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +30 -35
  4. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +101 -3
  5. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/jinja.py +36 -35
  6. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +53 -2
  7. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +95 -2
  8. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +6 -0
  9. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +95 -21
  10. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +2 -1
  11. airbyte_cdk-6.9.2/airbyte_cdk/sources/declarative/resolvers/__init__.py +13 -0
  12. airbyte_cdk-6.9.2/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +55 -0
  13. airbyte_cdk-6.9.2/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +106 -0
  14. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/http_client.py +15 -5
  15. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/pyproject.toml +8 -8
  16. airbyte_cdk-6.9.1.dev3/PKG-INFO +0 -306
  17. airbyte_cdk-6.9.1.dev3/README.md +0 -229
  18. airbyte_cdk-6.9.1.dev3/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -81
  19. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/LICENSE.txt +0 -0
  20. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/__init__.py +0 -0
  21. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/__init__.py +0 -0
  22. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  23. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  24. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  25. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/config_observation.py +0 -0
  26. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector.py +0 -0
  27. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/README.md +0 -0
  28. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/__init__.py +0 -0
  29. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  30. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/main.py +0 -0
  31. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  32. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/connector_builder/models.py +0 -0
  33. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/__init__.py +0 -0
  34. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/destination.py +0 -0
  35. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  36. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  37. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  38. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  39. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  40. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  41. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  42. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  43. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  44. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/entrypoint.py +0 -0
  45. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/exception_handler.py +0 -0
  46. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/logger.py +0 -0
  47. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/__init__.py +0 -0
  48. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  49. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  50. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  51. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/models/well_known_types.py +0 -0
  52. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/py.typed +0 -0
  53. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/__init__.py +0 -0
  54. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/abstract_source.py +0 -0
  55. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  56. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  57. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  58. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  59. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  60. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  61. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  62. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/config.py +0 -0
  63. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  64. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  65. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  66. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  67. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  68. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  69. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  70. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  71. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  72. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  73. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  74. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  75. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  76. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  77. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  78. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  79. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  80. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  81. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  82. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  83. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  84. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  85. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  86. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  87. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  88. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  89. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  90. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  91. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  92. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  93. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  94. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  95. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  96. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  97. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  98. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  99. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  100. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  101. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  102. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  103. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  104. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  105. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  106. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  107. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  108. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  109. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  110. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  111. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  112. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  113. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  114. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  115. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  116. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  117. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  118. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  119. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  120. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  121. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  122. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  123. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  124. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  125. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  126. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  127. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  128. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  129. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  130. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  131. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  132. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  133. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  134. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  135. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  136. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  137. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  138. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  139. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  140. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  141. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  142. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  143. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  144. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  145. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  146. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  147. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  148. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  149. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  150. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  151. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  152. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  153. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  154. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  155. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  156. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  157. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  158. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  159. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  160. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  161. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  162. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  163. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  164. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  165. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  166. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  167. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  168. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  169. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  170. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  171. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  172. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  173. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  174. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  175. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  176. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  177. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  178. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  179. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  180. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  181. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  182. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  183. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  184. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  185. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/types.py +0 -0
  186. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  187. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  188. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  189. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  190. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/runner.py +0 -0
  191. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/embedded/tools.py +0 -0
  192. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/README.md +0 -0
  193. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  194. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  195. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  196. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  197. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  198. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  199. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  200. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  201. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  202. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  203. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  204. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  205. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  206. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  207. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  208. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  209. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  210. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  211. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  212. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  213. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  214. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  215. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  216. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  217. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  218. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  219. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  220. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  221. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  222. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  223. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  224. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  225. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  226. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  227. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  228. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  229. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  230. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  231. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  232. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  233. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  234. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  235. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  236. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  237. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  238. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/file_based/types.py +0 -0
  239. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/http_config.py +0 -0
  240. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/http_logger.py +0 -0
  241. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/message/__init__.py +0 -0
  242. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/message/repository.py +0 -0
  243. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/source.py +0 -0
  244. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/__init__.py +0 -0
  245. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  246. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  247. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  248. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  249. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  250. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  251. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  252. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  253. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  254. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  255. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  256. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  257. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  258. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  259. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  260. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  261. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  262. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  263. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  264. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  265. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  266. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  267. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  268. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  269. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  270. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  271. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  272. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  273. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/core.py +0 -0
  274. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  275. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  276. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  277. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  278. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  279. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  280. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  281. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  282. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  283. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  284. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  285. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  286. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/http.py +0 -0
  287. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  288. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  289. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  290. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  291. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  292. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  293. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  294. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/types.py +0 -0
  295. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/__init__.py +0 -0
  296. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/casing.py +0 -0
  297. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  298. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  299. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  300. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/transform.py +0 -0
  301. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sources/utils/types.py +0 -0
  302. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/__init__.py +0 -0
  303. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/_util/__init__.py +0 -0
  304. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/_util/hashing.py +0 -0
  305. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  306. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/constants.py +0 -0
  307. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/exceptions.py +0 -0
  308. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/secrets.py +0 -0
  309. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/shared/__init__.py +0 -0
  310. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  311. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  312. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/sql/types.py +0 -0
  313. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/__init__.py +0 -0
  314. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/catalog_builder.py +0 -0
  315. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  316. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  317. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  318. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  319. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/request.py +0 -0
  320. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/response.py +0 -0
  321. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  322. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/state_builder.py +0 -0
  323. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/__init__.py +0 -0
  324. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/data.py +0 -0
  325. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  326. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/test/utils/reading.py +0 -0
  327. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/__init__.py +0 -0
  328. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  329. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/analytics_message.py +0 -0
  330. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/constants.py +0 -0
  331. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  332. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/event_timing.py +0 -0
  333. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  334. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  335. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/message_utils.py +0 -0
  336. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  337. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/print_buffer.py +0 -0
  338. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  339. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/slice_hasher.py +0 -0
  340. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  341. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  342. {airbyte_cdk-6.9.1.dev3 → airbyte_cdk-6.9.2}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -0,0 +1,108 @@
1
+ Metadata-Version: 2.1
2
+ Name: airbyte-cdk
3
+ Version: 6.9.2
4
+ Summary: A framework for writing Airbyte Connectors.
5
+ Home-page: https://airbyte.com
6
+ License: MIT
7
+ Keywords: airbyte,connector-development-kit,cdk
8
+ Author: Airbyte
9
+ Author-email: contact@airbyte.io
10
+ Requires-Python: >=3.10,<3.13
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Provides-Extra: file-based
21
+ Provides-Extra: sql
22
+ Provides-Extra: vector-db-based
23
+ Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
24
+ Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
25
+ Requires-Dist: airbyte-protocol-models-dataclasses (>=0.14,<0.15)
26
+ Requires-Dist: avro (>=1.11.2,<1.12.0) ; extra == "file-based"
27
+ Requires-Dist: backoff
28
+ Requires-Dist: cachetools
29
+ Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
30
+ Requires-Dist: cryptography (>=42.0.5,<44.0.0)
31
+ Requires-Dist: dpath (>=2.1.6,<3.0.0)
32
+ Requires-Dist: dunamai (>=1.22.0,<2.0.0)
33
+ Requires-Dist: fastavro (>=1.8.0,<1.9.0) ; extra == "file-based"
34
+ Requires-Dist: genson (==1.3.0)
35
+ Requires-Dist: isodate (>=0.6.1,<0.7.0)
36
+ Requires-Dist: jsonref (>=0.2,<0.3)
37
+ Requires-Dist: jsonschema (>=4.17.3,<4.18.0)
38
+ Requires-Dist: langchain (==0.1.16) ; extra == "vector-db-based"
39
+ Requires-Dist: langchain_core (==0.1.42)
40
+ Requires-Dist: markdown ; extra == "file-based"
41
+ Requires-Dist: nltk (==3.9.1)
42
+ Requires-Dist: numpy (<2)
43
+ Requires-Dist: openai[embeddings] (==0.27.9) ; extra == "vector-db-based"
44
+ Requires-Dist: orjson (>=3.10.7,<4.0.0)
45
+ Requires-Dist: pandas (==2.2.2)
46
+ Requires-Dist: pdf2image (==1.16.3) ; extra == "file-based"
47
+ Requires-Dist: pdfminer.six (==20221105) ; extra == "file-based"
48
+ Requires-Dist: pendulum (<3.0.0)
49
+ Requires-Dist: psutil (==6.1.0)
50
+ Requires-Dist: pyarrow (>=15.0.0,<15.1.0) ; extra == "file-based"
51
+ Requires-Dist: pydantic (>=2.7,<3.0)
52
+ Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
53
+ Requires-Dist: pyrate-limiter (>=3.1.0,<3.2.0)
54
+ Requires-Dist: pytesseract (==0.3.10) ; extra == "file-based"
55
+ Requires-Dist: python-calamine (==0.2.3) ; extra == "file-based"
56
+ Requires-Dist: python-dateutil
57
+ Requires-Dist: python-snappy (==0.7.3) ; extra == "file-based"
58
+ Requires-Dist: python-ulid (>=3.0.0,<4.0.0)
59
+ Requires-Dist: pytz (==2024.1)
60
+ Requires-Dist: rapidfuzz (>=3.10.1,<4.0.0)
61
+ Requires-Dist: requests
62
+ Requires-Dist: requests_cache
63
+ Requires-Dist: serpyco-rs (>=1.10.2,<2.0.0)
64
+ Requires-Dist: sqlalchemy (>=2.0,<3.0,!=2.0.36) ; extra == "sql"
65
+ Requires-Dist: tiktoken (==0.8.0) ; extra == "vector-db-based"
66
+ Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
67
+ Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
68
+ Requires-Dist: wcmatch (==10.0)
69
+ Requires-Dist: xmltodict (>=0.13.0,<0.14.0)
70
+ Project-URL: Documentation, https://docs.airbyte.io/
71
+ Project-URL: Repository, https://github.com/airbytehq/airbyte-python-cdk
72
+ Description-Content-Type: text/markdown
73
+
74
+ # Airbyte Python CDK and Low-Code CDK
75
+
76
+ Airbyte Python CDK is a framework for building Airbyte API Source Connectors. It provides a set of
77
+ classes and helpers that make it easy to build a connector against an HTTP API (REST, GraphQL, etc),
78
+ or a generic Python source connector.
79
+
80
+ ## Building Connectors with the CDK
81
+
82
+ If you're looking to build a connector, we highly recommend that you first
83
+ [start with the Connector Builder](https://docs.airbyte.com/connector-development/connector-builder-ui/overview).
84
+ It should be enough for 90% connectors out there. For more flexible and complex connectors, use the
85
+ [low-code CDK and `SourceDeclarativeManifest`](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview).
86
+
87
+ For more information on building connectors, please see the [Connector Development](https://docs.airbyte.com/connector-development/) guide on [docs.airbyte.com](https://docs.airbyte.com).
88
+
89
+ ## Python CDK Overview
90
+
91
+ Airbyte CDK code is within `airbyte_cdk` directory. Here's a high level overview of what's inside:
92
+
93
+ - `airbyte_cdk/connector_builder`. Internal wrapper that helps the Connector Builder platform run a declarative manifest (low-code connector). You should not use this code directly. If you need to run a `SourceDeclarativeManifest`, take a look at [`source-declarative-manifest`](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-declarative-manifest) connector implementation instead.
94
+ - `airbyte_cdk/cli/source_declarative_manifest`. This module defines the `source-declarative-manifest` (aka "SDM") connector execution logic and associated CLI.
95
+ - `airbyte_cdk/destinations`. Basic Destination connector support! If you're building a Destination connector in Python, try that. Some of our vector DB destinations like `destination-pinecone` are using that code.
96
+ - `airbyte_cdk/models` expose `airbyte_protocol.models` as a part of `airbyte_cdk` package.
97
+ - `airbyte_cdk/sources/concurrent_source` is the Concurrent CDK implementation. It supports reading data from streams concurrently per slice / partition, useful for connectors with high throughput and high number of records.
98
+ - `airbyte_cdk/sources/declarative` is the low-code CDK. It works on top of Airbyte Python CDK, but provides a declarative manifest language to define streams, operations, etc. This makes it easier to build connectors without writing Python code.
99
+ - `airbyte_cdk/sources/file_based` is the CDK for file-based sources. Examples include S3, Azure, GCS, etc.
100
+
101
+ ## Contributing
102
+
103
+ For instructions on how to contribute, please see our [Contributing Guide](docs/CONTRIBUTING.md).
104
+
105
+ ## Release Management
106
+
107
+ Please see the [Release Management](docs/RELEASES.md) guide for information on how to perform releases and pre-releases.
108
+
@@ -0,0 +1,34 @@
1
+ # Airbyte Python CDK and Low-Code CDK
2
+
3
+ Airbyte Python CDK is a framework for building Airbyte API Source Connectors. It provides a set of
4
+ classes and helpers that make it easy to build a connector against an HTTP API (REST, GraphQL, etc),
5
+ or a generic Python source connector.
6
+
7
+ ## Building Connectors with the CDK
8
+
9
+ If you're looking to build a connector, we highly recommend that you first
10
+ [start with the Connector Builder](https://docs.airbyte.com/connector-development/connector-builder-ui/overview).
11
+ It should be enough for 90% connectors out there. For more flexible and complex connectors, use the
12
+ [low-code CDK and `SourceDeclarativeManifest`](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview).
13
+
14
+ For more information on building connectors, please see the [Connector Development](https://docs.airbyte.com/connector-development/) guide on [docs.airbyte.com](https://docs.airbyte.com).
15
+
16
+ ## Python CDK Overview
17
+
18
+ Airbyte CDK code is within `airbyte_cdk` directory. Here's a high level overview of what's inside:
19
+
20
+ - `airbyte_cdk/connector_builder`. Internal wrapper that helps the Connector Builder platform run a declarative manifest (low-code connector). You should not use this code directly. If you need to run a `SourceDeclarativeManifest`, take a look at [`source-declarative-manifest`](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-declarative-manifest) connector implementation instead.
21
+ - `airbyte_cdk/cli/source_declarative_manifest`. This module defines the `source-declarative-manifest` (aka "SDM") connector execution logic and associated CLI.
22
+ - `airbyte_cdk/destinations`. Basic Destination connector support! If you're building a Destination connector in Python, try that. Some of our vector DB destinations like `destination-pinecone` are using that code.
23
+ - `airbyte_cdk/models` expose `airbyte_protocol.models` as a part of `airbyte_cdk` package.
24
+ - `airbyte_cdk/sources/concurrent_source` is the Concurrent CDK implementation. It supports reading data from streams concurrently per slice / partition, useful for connectors with high throughput and high number of records.
25
+ - `airbyte_cdk/sources/declarative` is the low-code CDK. It works on top of Airbyte Python CDK, but provides a declarative manifest language to define streams, operations, etc. This makes it easier to build connectors without writing Python code.
26
+ - `airbyte_cdk/sources/file_based` is the CDK for file-based sources. Examples include S3, Azure, GCS, etc.
27
+
28
+ ## Contributing
29
+
30
+ For instructions on how to contribute, please see our [Contributing Guide](docs/CONTRIBUTING.md).
31
+
32
+ ## Release Management
33
+
34
+ Please see the [Release Management](docs/RELEASES.md) guide for information on how to perform releases and pre-releases.
@@ -56,8 +56,9 @@ from airbyte_cdk.sources.types import Config, StreamState
56
56
 
57
57
 
58
58
  class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
59
- # By default, we defer to a value of 1 which represents running a connector using the Concurrent CDK engine on only one thread.
60
- SINGLE_THREADED_CONCURRENCY_LEVEL = 1
59
+ # By default, we defer to a value of 2. A value lower than than could cause a PartitionEnqueuer to be stuck in a state of deadlock
60
+ # because it has hit the limit of futures but not partition reader is consuming them.
61
+ _LOWEST_SAFE_CONCURRENCY_LEVEL = 2
61
62
 
62
63
  def __init__(
63
64
  self,
@@ -86,23 +87,10 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
86
87
  component_factory=component_factory,
87
88
  )
88
89
 
90
+ # todo: We could remove state from initialization. Now that streams are grouped during the read(), a source
91
+ # no longer needs to store the original incoming state. But maybe there's an edge case?
89
92
  self._state = state
90
93
 
91
- self._concurrent_streams: Optional[List[AbstractStream]]
92
- self._synchronous_streams: Optional[List[Stream]]
93
-
94
- # If the connector command was SPEC, there is no incoming config, and we cannot instantiate streams because
95
- # they might depend on it. Ideally we want to have a static method on this class to get the spec without
96
- # any other arguments, but the existing entrypoint.py isn't designed to support this. Just noting this
97
- # for our future improvements to the CDK.
98
- if config:
99
- self._concurrent_streams, self._synchronous_streams = self._group_streams(
100
- config=config or {}
101
- )
102
- else:
103
- self._concurrent_streams = None
104
- self._synchronous_streams = None
105
-
106
94
  concurrency_level_from_manifest = self._source_config.get("concurrency_level")
107
95
  if concurrency_level_from_manifest:
108
96
  concurrency_level_component = self._constructor.create_component(
@@ -120,8 +108,8 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
120
108
  concurrency_level // 2, 1
121
109
  ) # Partition_generation iterates using range based on this value. If this is floored to zero we end up in a dead lock during start up
122
110
  else:
123
- concurrency_level = self.SINGLE_THREADED_CONCURRENCY_LEVEL
124
- initial_number_of_partitions_to_generate = self.SINGLE_THREADED_CONCURRENCY_LEVEL
111
+ concurrency_level = self._LOWEST_SAFE_CONCURRENCY_LEVEL
112
+ initial_number_of_partitions_to_generate = self._LOWEST_SAFE_CONCURRENCY_LEVEL // 2
125
113
 
126
114
  self._concurrent_source = ConcurrentSource.create(
127
115
  num_workers=concurrency_level,
@@ -136,17 +124,20 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
136
124
  logger: logging.Logger,
137
125
  config: Mapping[str, Any],
138
126
  catalog: ConfiguredAirbyteCatalog,
139
- state: Optional[Union[List[AirbyteStateMessage]]] = None,
127
+ state: Optional[List[AirbyteStateMessage]] = None,
140
128
  ) -> Iterator[AirbyteMessage]:
141
- # ConcurrentReadProcessor pops streams that are finished being read so before syncing, the names of the concurrent
142
- # streams must be saved so that they can be removed from the catalog before starting synchronous streams
143
- if self._concurrent_streams:
129
+ concurrent_streams, _ = self._group_streams(config=config)
130
+
131
+ # ConcurrentReadProcessor pops streams that are finished being read so before syncing, the names of
132
+ # the concurrent streams must be saved so that they can be removed from the catalog before starting
133
+ # synchronous streams
134
+ if len(concurrent_streams) > 0:
144
135
  concurrent_stream_names = set(
145
- [concurrent_stream.name for concurrent_stream in self._concurrent_streams]
136
+ [concurrent_stream.name for concurrent_stream in concurrent_streams]
146
137
  )
147
138
 
148
139
  selected_concurrent_streams = self._select_streams(
149
- streams=self._concurrent_streams, configured_catalog=catalog
140
+ streams=concurrent_streams, configured_catalog=catalog
150
141
  )
151
142
  # It would appear that passing in an empty set of streams causes an infinite loop in ConcurrentReadProcessor.
152
143
  # This is also evident in concurrent_source_adapter.py so I'll leave this out of scope to fix for now
@@ -165,8 +156,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
165
156
  yield from super().read(logger, config, filtered_catalog, state)
166
157
 
167
158
  def discover(self, logger: logging.Logger, config: Mapping[str, Any]) -> AirbyteCatalog:
168
- concurrent_streams = self._concurrent_streams or []
169
- synchronous_streams = self._synchronous_streams or []
159
+ concurrent_streams, synchronous_streams = self._group_streams(config=config)
170
160
  return AirbyteCatalog(
171
161
  streams=[
172
162
  stream.as_airbyte_stream() for stream in concurrent_streams + synchronous_streams
@@ -192,9 +182,13 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
192
182
 
193
183
  state_manager = ConnectorStateManager(state=self._state) # type: ignore # state is always in the form of List[AirbyteStateMessage]. The ConnectorStateManager should use generics, but this can be done later
194
184
 
195
- name_to_stream_mapping = {
196
- stream["name"]: stream for stream in self.resolved_manifest["streams"]
197
- }
185
+ # Combine streams and dynamic_streams. Note: both cannot be empty at the same time,
186
+ # and this is validated during the initialization of the source.
187
+ streams = self._stream_configs(self._source_config) + self._dynamic_stream_configs(
188
+ self._source_config, config
189
+ )
190
+
191
+ name_to_stream_mapping = {stream["name"]: stream for stream in streams}
198
192
 
199
193
  for declarative_stream in self.streams(config=config):
200
194
  # Some low-code sources use a combination of DeclarativeStream and regular Python streams. We can't inspect
@@ -202,7 +196,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
202
196
  # so we need to treat them as synchronous
203
197
  if (
204
198
  isinstance(declarative_stream, DeclarativeStream)
205
- and name_to_stream_mapping[declarative_stream.name].get("retriever")["type"]
199
+ and name_to_stream_mapping[declarative_stream.name]["retriever"]["type"]
206
200
  == "SimpleRetriever"
207
201
  ):
208
202
  incremental_sync_component_definition = name_to_stream_mapping[
@@ -211,7 +205,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
211
205
 
212
206
  partition_router_component_definition = (
213
207
  name_to_stream_mapping[declarative_stream.name]
214
- .get("retriever")
208
+ .get("retriever", {})
215
209
  .get("partition_router")
216
210
  )
217
211
  is_without_partition_router_or_cursor = not bool(
@@ -233,7 +227,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
233
227
  cursor = self._constructor.create_concurrent_cursor_from_datetime_based_cursor(
234
228
  state_manager=state_manager,
235
229
  model_type=DatetimeBasedCursorModel,
236
- component_definition=incremental_sync_component_definition,
230
+ component_definition=incremental_sync_component_definition, # type: ignore # Not None because of the if condition above
237
231
  stream_name=declarative_stream.name,
238
232
  stream_namespace=declarative_stream.namespace,
239
233
  config=config or {},
@@ -316,10 +310,11 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
316
310
  def _is_datetime_incremental_without_partition_routing(
317
311
  self,
318
312
  declarative_stream: DeclarativeStream,
319
- incremental_sync_component_definition: Mapping[str, Any],
313
+ incremental_sync_component_definition: Mapping[str, Any] | None,
320
314
  ) -> bool:
321
315
  return (
322
- bool(incremental_sync_component_definition)
316
+ incremental_sync_component_definition is not None
317
+ and bool(incremental_sync_component_definition)
323
318
  and incremental_sync_component_definition.get("type", "")
324
319
  == DatetimeBasedCursorModel.__name__
325
320
  and self._stream_supports_concurrent_partition_processing(
@@ -7,8 +7,12 @@ version: 1.0.0
7
7
  required:
8
8
  - type
9
9
  - check
10
- - streams
11
10
  - version
11
+ anyOf:
12
+ - required:
13
+ - streams
14
+ - required:
15
+ - dynamic_streams
12
16
  properties:
13
17
  type:
14
18
  type: string
@@ -19,6 +23,10 @@ properties:
19
23
  type: array
20
24
  items:
21
25
  "$ref": "#/definitions/DeclarativeStream"
26
+ dynamic_streams:
27
+ type: array
28
+ items:
29
+ "$ref": "#/definitions/DynamicDeclarativeStream"
22
30
  version:
23
31
  type: string
24
32
  description: The version of the Airbyte CDK used to build and test the source.
@@ -319,7 +327,7 @@ definitions:
319
327
  additionalProperties: true
320
328
  ConcurrencyLevel:
321
329
  title: Concurrency Level
322
- description: Defines the amount of parallelization for the streams that are being synced. The factor of parallelization is how many partitions or streams are synced at the same time. For example, with a concurrency_level of 10, ten streams or partitions of data will processed at the same time.
330
+ description: Defines the amount of parallelization for the streams that are being synced. The factor of parallelization is how many partitions or streams are synced at the same time. For example, with a concurrency_level of 10, ten streams or partitions of data will processed at the same time. Note that a value of 1 could create deadlock if a stream has a very high number of partitions.
323
331
  type: object
324
332
  required:
325
333
  - default_concurrency
@@ -1321,7 +1329,7 @@ definitions:
1321
1329
  type: array
1322
1330
  items:
1323
1331
  - type: string
1324
- interpolation_content:
1332
+ interpolation_context:
1325
1333
  - config
1326
1334
  examples:
1327
1335
  - ["data"]
@@ -2895,6 +2903,96 @@ definitions:
2895
2903
  $parameters:
2896
2904
  type: object
2897
2905
  additionalProperties: true
2906
+ ComponentMappingDefinition:
2907
+ title: Component Mapping Definition
2908
+ description: (This component is experimental. Use at your own risk.) Specifies a mapping definition to update or add fields in a record or configuration. This allows dynamic mapping of data by interpolating values into the template based on provided contexts.
2909
+ type: object
2910
+ required:
2911
+ - type
2912
+ - field_path
2913
+ - value
2914
+ properties:
2915
+ type:
2916
+ type: string
2917
+ enum: [ComponentMappingDefinition]
2918
+ field_path:
2919
+ title: Field Path
2920
+ description: A list of potentially nested fields indicating the full path where value will be added or updated.
2921
+ type: array
2922
+ items:
2923
+ - type: string
2924
+ interpolation_context:
2925
+ - config
2926
+ - components_values
2927
+ - stream_template_config
2928
+ examples:
2929
+ - ["data"]
2930
+ - ["data", "records"]
2931
+ - ["data", "{{ parameters.name }}"]
2932
+ - ["data", "*", "record"]
2933
+ value:
2934
+ title: Value
2935
+ description: The dynamic or static value to assign to the key. Interpolated values can be used to dynamically determine the value during runtime.
2936
+ type: string
2937
+ interpolation_context:
2938
+ - config
2939
+ - stream_template_config
2940
+ - components_values
2941
+ examples:
2942
+ - "{{ components_values['updates'] }}"
2943
+ - "{{ components_values['MetaData']['LastUpdatedTime'] }}"
2944
+ - "{{ config['segment_id'] }}"
2945
+ value_type:
2946
+ title: Value Type
2947
+ description: The expected data type of the value. If omitted, the type will be inferred from the value provided.
2948
+ "$ref": "#/definitions/ValueType"
2949
+ $parameters:
2950
+ type: object
2951
+ additionalProperties: true
2952
+ HttpComponentsResolver:
2953
+ type: object
2954
+ description: (This component is experimental. Use at your own risk.) Component resolve and populates stream templates with components fetched via an HTTP retriever.
2955
+ properties:
2956
+ type:
2957
+ type: string
2958
+ enum: [HttpComponentsResolver]
2959
+ retriever:
2960
+ title: Retriever
2961
+ description: Component used to coordinate how records are extracted across stream slices and request pages.
2962
+ anyOf:
2963
+ - "$ref": "#/definitions/AsyncRetriever"
2964
+ - "$ref": "#/definitions/CustomRetriever"
2965
+ - "$ref": "#/definitions/SimpleRetriever"
2966
+ components_mapping:
2967
+ type: array
2968
+ items:
2969
+ "$ref": "#/definitions/ComponentMappingDefinition"
2970
+ $parameters:
2971
+ type: object
2972
+ additionalProperties: true
2973
+ required:
2974
+ - type
2975
+ - retriever
2976
+ - components_mapping
2977
+ DynamicDeclarativeStream:
2978
+ type: object
2979
+ description: (This component is experimental. Use at your own risk.) A component that described how will be created declarative streams based on stream template.
2980
+ properties:
2981
+ type:
2982
+ type: string
2983
+ enum: [DynamicDeclarativeStream]
2984
+ stream_template:
2985
+ title: Stream Template
2986
+ description: Reference to the stream template.
2987
+ "$ref": "#/definitions/DeclarativeStream"
2988
+ components_resolver:
2989
+ title: Components Resolver
2990
+ description: Component resolve and populates stream templates with components values.
2991
+ "$ref": "#/definitions/HttpComponentsResolver"
2992
+ required:
2993
+ - type
2994
+ - stream_template
2995
+ - components_resolver
2898
2996
  interpolation:
2899
2997
  variables:
2900
2998
  - title: config
@@ -4,7 +4,7 @@
4
4
 
5
5
  import ast
6
6
  from functools import cache
7
- from typing import Any, Mapping, Optional, Tuple, Type
7
+ from typing import Any, Mapping, Optional, Set, Tuple, Type
8
8
 
9
9
  from jinja2 import meta
10
10
  from jinja2.environment import Template
@@ -27,7 +27,35 @@ class StreamPartitionAccessEnvironment(SandboxedEnvironment):
27
27
  def is_safe_attribute(self, obj: Any, attr: str, value: Any) -> bool:
28
28
  if attr in ["_partition"]:
29
29
  return True
30
- return super().is_safe_attribute(obj, attr, value)
30
+ return super().is_safe_attribute(obj, attr, value) # type: ignore # for some reason, mypy says 'Returning Any from function declared to return "bool"'
31
+
32
+
33
+ # These aliases are used to deprecate existing keywords without breaking all existing connectors.
34
+ _ALIASES = {
35
+ "stream_interval": "stream_slice", # Use stream_interval to access incremental_sync values
36
+ "stream_partition": "stream_slice", # Use stream_partition to access partition router's values
37
+ }
38
+
39
+ # These extensions are not installed so they're not currently a problem,
40
+ # but we're still explicitly removing them from the jinja context.
41
+ # At worst, this is documentation that we do NOT want to include these extensions because of the potential security risks
42
+ _RESTRICTED_EXTENSIONS = ["jinja2.ext.loopcontrols"] # Adds support for break continue in loops
43
+
44
+ # By default, these Python builtin functions are available in the Jinja context.
45
+ # We explicitly remove them because of the potential security risk.
46
+ # Please add a unit test to test_jinja.py when adding a restriction.
47
+ _RESTRICTED_BUILTIN_FUNCTIONS = [
48
+ "range"
49
+ ] # The range function can cause very expensive computations
50
+
51
+ _ENVIRONMENT = StreamPartitionAccessEnvironment()
52
+ _ENVIRONMENT.filters.update(**filters)
53
+ _ENVIRONMENT.globals.update(**macros)
54
+
55
+ for extension in _RESTRICTED_EXTENSIONS:
56
+ _ENVIRONMENT.extensions.pop(extension, None)
57
+ for builtin in _RESTRICTED_BUILTIN_FUNCTIONS:
58
+ _ENVIRONMENT.globals.pop(builtin, None)
31
59
 
32
60
 
33
61
  class JinjaInterpolation(Interpolation):
@@ -48,34 +76,6 @@ class JinjaInterpolation(Interpolation):
48
76
  Additional information on jinja templating can be found at https://jinja.palletsprojects.com/en/3.1.x/templates/#
49
77
  """
50
78
 
51
- # These aliases are used to deprecate existing keywords without breaking all existing connectors.
52
- ALIASES = {
53
- "stream_interval": "stream_slice", # Use stream_interval to access incremental_sync values
54
- "stream_partition": "stream_slice", # Use stream_partition to access partition router's values
55
- }
56
-
57
- # These extensions are not installed so they're not currently a problem,
58
- # but we're still explicitely removing them from the jinja context.
59
- # At worst, this is documentation that we do NOT want to include these extensions because of the potential security risks
60
- RESTRICTED_EXTENSIONS = ["jinja2.ext.loopcontrols"] # Adds support for break continue in loops
61
-
62
- # By default, these Python builtin functions are available in the Jinja context.
63
- # We explicitely remove them because of the potential security risk.
64
- # Please add a unit test to test_jinja.py when adding a restriction.
65
- RESTRICTED_BUILTIN_FUNCTIONS = [
66
- "range"
67
- ] # The range function can cause very expensive computations
68
-
69
- def __init__(self) -> None:
70
- self._environment = StreamPartitionAccessEnvironment()
71
- self._environment.filters.update(**filters)
72
- self._environment.globals.update(**macros)
73
-
74
- for extension in self.RESTRICTED_EXTENSIONS:
75
- self._environment.extensions.pop(extension, None)
76
- for builtin in self.RESTRICTED_BUILTIN_FUNCTIONS:
77
- self._environment.globals.pop(builtin, None)
78
-
79
79
  def eval(
80
80
  self,
81
81
  input_str: str,
@@ -86,7 +86,7 @@ class JinjaInterpolation(Interpolation):
86
86
  ) -> Any:
87
87
  context = {"config": config, **additional_parameters}
88
88
 
89
- for alias, equivalent in self.ALIASES.items():
89
+ for alias, equivalent in _ALIASES.items():
90
90
  if alias in context:
91
91
  # This is unexpected. We could ignore or log a warning, but failing loudly should result in fewer surprises
92
92
  raise ValueError(
@@ -105,6 +105,7 @@ class JinjaInterpolation(Interpolation):
105
105
  raise Exception(f"Expected a string, got {input_str}")
106
106
  except UndefinedError:
107
107
  pass
108
+
108
109
  # If result is empty or resulted in an undefined error, evaluate and return the default string
109
110
  return self._literal_eval(self._eval(default, context), valid_types)
110
111
 
@@ -132,16 +133,16 @@ class JinjaInterpolation(Interpolation):
132
133
  return s
133
134
 
134
135
  @cache
135
- def _find_undeclared_variables(self, s: Optional[str]) -> set[str]:
136
+ def _find_undeclared_variables(self, s: Optional[str]) -> Set[str]:
136
137
  """
137
138
  Find undeclared variables and cache them
138
139
  """
139
- ast = self._environment.parse(s) # type: ignore # parse is able to handle None
140
+ ast = _ENVIRONMENT.parse(s) # type: ignore # parse is able to handle None
140
141
  return meta.find_undeclared_variables(ast)
141
142
 
142
143
  @cache
143
- def _compile(self, s: Optional[str]) -> Template:
144
+ def _compile(self, s: str) -> Template:
144
145
  """
145
146
  We must cache the Jinja Template ourselves because we're using `from_string` instead of a template loader
146
147
  """
147
- return self._environment.from_string(s) # type: ignore [arg-type] # Expected `str | Template` but passed `str | None`
148
+ return _ENVIRONMENT.from_string(s)
@@ -39,6 +39,7 @@ from airbyte_cdk.sources.declarative.parsers.manifest_reference_resolver import
39
39
  from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
40
40
  ModelToComponentFactory,
41
41
  )
42
+ from airbyte_cdk.sources.declarative.resolvers import COMPONENTS_RESOLVER_TYPE_MAPPING
42
43
  from airbyte_cdk.sources.message import MessageRepository
43
44
  from airbyte_cdk.sources.streams.core import Stream
44
45
  from airbyte_cdk.sources.types import ConnectionDefinition
@@ -120,7 +121,10 @@ class ManifestDeclarativeSource(DeclarativeSource):
120
121
  self._emit_manifest_debug_message(
121
122
  extra_args={"source_name": self.name, "parsed_config": json.dumps(self._source_config)}
122
123
  )
123
- stream_configs = self._stream_configs(self._source_config)
124
+
125
+ stream_configs = self._stream_configs(self._source_config) + self._dynamic_stream_configs(
126
+ self._source_config, config
127
+ )
124
128
 
125
129
  source_streams = [
126
130
  self._constructor.create_component(
@@ -234,7 +238,8 @@ class ManifestDeclarativeSource(DeclarativeSource):
234
238
  )
235
239
 
236
240
  streams = self._source_config.get("streams")
237
- if not streams:
241
+ dynamic_streams = self._source_config.get("dynamic_streams")
242
+ if not (streams or dynamic_streams):
238
243
  raise ValidationError(
239
244
  f"A valid manifest should have at least one stream defined. Got {streams}"
240
245
  )
@@ -303,5 +308,51 @@ class ManifestDeclarativeSource(DeclarativeSource):
303
308
  s["type"] = "DeclarativeStream"
304
309
  return stream_configs
305
310
 
311
+ def _dynamic_stream_configs(
312
+ self, manifest: Mapping[str, Any], config: Mapping[str, Any]
313
+ ) -> List[Dict[str, Any]]:
314
+ dynamic_stream_definitions: List[Dict[str, Any]] = manifest.get("dynamic_streams", [])
315
+ dynamic_stream_configs: List[Dict[str, Any]] = []
316
+
317
+ for dynamic_definition in dynamic_stream_definitions:
318
+ components_resolver_config = dynamic_definition["components_resolver"]
319
+
320
+ if not components_resolver_config:
321
+ raise ValueError(
322
+ f"Missing 'components_resolver' in dynamic definition: {dynamic_definition}"
323
+ )
324
+
325
+ resolver_type = components_resolver_config.get("type")
326
+ if not resolver_type:
327
+ raise ValueError(
328
+ f"Missing 'type' in components resolver configuration: {components_resolver_config}"
329
+ )
330
+
331
+ if resolver_type not in COMPONENTS_RESOLVER_TYPE_MAPPING:
332
+ raise ValueError(
333
+ f"Invalid components resolver type '{resolver_type}'. "
334
+ f"Expected one of {list(COMPONENTS_RESOLVER_TYPE_MAPPING.keys())}."
335
+ )
336
+
337
+ if "retriever" in components_resolver_config:
338
+ components_resolver_config["retriever"]["requester"]["use_cache"] = True
339
+
340
+ # Create a resolver for dynamic components based on type
341
+ components_resolver = self._constructor.create_component(
342
+ COMPONENTS_RESOLVER_TYPE_MAPPING[resolver_type], components_resolver_config, config
343
+ )
344
+
345
+ stream_template_config = dynamic_definition["stream_template"]
346
+
347
+ for dynamic_stream in components_resolver.resolve_components(
348
+ stream_template_config=stream_template_config
349
+ ):
350
+ if "type" not in dynamic_stream:
351
+ dynamic_stream["type"] = "DeclarativeStream"
352
+
353
+ dynamic_stream_configs.append(dynamic_stream)
354
+
355
+ return dynamic_stream_configs
356
+
306
357
  def _emit_manifest_debug_message(self, extra_args: dict[str, Any]) -> None:
307
358
  self.logger.debug("declarative source created from manifest", extra=extra_args)