airbyte-cdk 6.30.0.dev0__tar.gz → 6.31.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +4 -4
  3. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +2 -1
  4. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_stream.py +3 -1
  5. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +26 -1
  6. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +5 -5
  7. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +6 -12
  8. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +214 -56
  9. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +144 -73
  10. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/pyproject.toml +1 -1
  11. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/LICENSE.txt +0 -0
  12. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/LICENSE_SHORT +0 -0
  13. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/README.md +0 -0
  14. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/__init__.py +0 -0
  15. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/__init__.py +0 -0
  16. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  17. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  18. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  19. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/config_observation.py +0 -0
  20. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector.py +0 -0
  21. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/README.md +0 -0
  22. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
  23. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  24. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/main.py +0 -0
  25. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  26. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/connector_builder/models.py +0 -0
  27. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/__init__.py +0 -0
  28. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/destination.py +0 -0
  29. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  30. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  31. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  32. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  33. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  34. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  35. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  36. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  37. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  38. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/entrypoint.py +0 -0
  39. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/exception_handler.py +0 -0
  40. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/logger.py +0 -0
  41. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/__init__.py +0 -0
  42. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  43. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  44. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  45. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/models/well_known_types.py +0 -0
  46. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/py.typed +0 -0
  47. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/__init__.py +0 -0
  48. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/abstract_source.py +0 -0
  49. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  50. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  51. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  52. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  53. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  54. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  55. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  56. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/config.py +0 -0
  57. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  58. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  59. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  60. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  61. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  62. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  63. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  64. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  65. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  66. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  67. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  68. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  69. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  70. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  71. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  72. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  73. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  74. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  75. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  76. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  77. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  78. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  79. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  80. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  81. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  82. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  83. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  84. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  85. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  86. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  87. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  88. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  89. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  90. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  91. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  92. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  93. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  94. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  95. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  96. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  97. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  98. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  99. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  100. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  101. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
  102. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  103. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  104. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  105. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  106. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  107. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  108. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  109. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  110. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  111. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  112. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  113. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  114. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  115. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  116. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  117. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  118. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  119. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  120. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  121. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  122. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  123. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  124. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  125. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  126. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  127. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  128. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  129. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  130. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  131. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  132. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  133. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  134. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  135. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  136. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  137. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  138. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  139. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  140. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  141. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  142. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  143. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  144. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  145. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  146. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  147. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  148. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  149. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  150. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  151. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  152. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  153. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  154. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  155. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  156. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  157. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  158. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  159. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  160. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  161. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  162. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  163. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  164. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  165. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  166. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  167. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  168. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  169. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  170. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  171. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  172. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  173. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  174. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  175. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  176. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  177. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  178. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  179. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  180. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  181. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  182. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  183. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  184. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  185. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  186. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  187. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  188. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  189. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  190. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  191. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  192. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  193. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  194. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  195. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  196. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  197. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  198. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/types.py +0 -0
  199. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  200. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  201. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  202. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  203. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
  204. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
  205. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/README.md +0 -0
  206. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  207. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  208. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  209. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  210. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  211. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  212. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  213. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  214. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  215. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  216. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  217. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  218. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  219. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  220. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  221. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  222. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  223. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  224. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  225. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  226. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  227. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  228. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  229. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  230. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  231. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  232. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  233. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  234. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  235. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  236. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  237. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  238. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  239. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  240. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  241. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  242. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  243. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  244. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  245. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  246. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  247. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  248. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  249. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  250. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  251. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/file_based/types.py +0 -0
  252. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/http_config.py +0 -0
  253. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/http_logger.py +0 -0
  254. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/message/__init__.py +0 -0
  255. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/message/repository.py +0 -0
  256. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/source.py +0 -0
  257. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
  258. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  259. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  260. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  261. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  262. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  263. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  264. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  265. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  266. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  267. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  268. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  269. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  270. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  271. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  272. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  273. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  274. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  275. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  276. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  277. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  278. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  279. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  280. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  281. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  282. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  283. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  284. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  285. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  286. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  287. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  288. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/core.py +0 -0
  289. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  290. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  291. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  292. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  293. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  294. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  295. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  296. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  297. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  298. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  299. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  300. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  301. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
  302. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  303. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  304. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  305. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  306. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  307. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  308. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/types.py +0 -0
  309. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
  310. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/casing.py +0 -0
  311. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  312. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  313. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  314. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/transform.py +0 -0
  315. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sources/utils/types.py +0 -0
  316. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/__init__.py +0 -0
  317. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/_util/__init__.py +0 -0
  318. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/_util/hashing.py +0 -0
  319. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  320. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/constants.py +0 -0
  321. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/exceptions.py +0 -0
  322. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/secrets.py +0 -0
  323. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/shared/__init__.py +0 -0
  324. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  325. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  326. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/sql/types.py +0 -0
  327. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/__init__.py +0 -0
  328. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/catalog_builder.py +0 -0
  329. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  330. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  331. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  332. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  333. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/request.py +0 -0
  334. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/response.py +0 -0
  335. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  336. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/state_builder.py +0 -0
  337. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/__init__.py +0 -0
  338. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/data.py +0 -0
  339. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  340. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  341. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/test/utils/reading.py +0 -0
  342. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/__init__.py +0 -0
  343. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  344. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/analytics_message.py +0 -0
  345. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/constants.py +0 -0
  346. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  347. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  348. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/event_timing.py +0 -0
  349. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  350. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  351. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/message_utils.py +0 -0
  352. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  353. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/print_buffer.py +0 -0
  354. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  355. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/slice_hasher.py +0 -0
  356. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  357. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  358. {airbyte_cdk-6.30.0.dev0 → airbyte_cdk-6.31.1}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.30.0.dev0
3
+ Version: 6.31.1
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -482,16 +482,16 @@ class AsyncJobOrchestrator:
482
482
  and exception.failure_type == FailureType.config_error
483
483
  )
484
484
 
485
- def fetch_records(self, partition: AsyncPartition) -> Iterable[Mapping[str, Any]]:
485
+ def fetch_records(self, async_jobs: Iterable[AsyncJob]) -> Iterable[Mapping[str, Any]]:
486
486
  """
487
- Fetches records from the given partition's jobs.
487
+ Fetches records from the given jobs.
488
488
 
489
489
  Args:
490
- partition (AsyncPartition): The partition containing the jobs.
490
+ async_jobs Iterable[AsyncJob]: The list of AsyncJobs.
491
491
 
492
492
  Yields:
493
493
  Iterable[Mapping[str, Any]]: The fetched records from the jobs.
494
494
  """
495
- for job in partition.jobs:
495
+ for job in async_jobs:
496
496
  yield from self._job_repository.fetch_records(job)
497
497
  self._job_repository.delete(job)
@@ -19,6 +19,7 @@ from airbyte_cdk.sources.declarative.extractors import RecordSelector
19
19
  from airbyte_cdk.sources.declarative.extractors.record_filter import (
20
20
  ClientSideIncrementalRecordFilterDecorator,
21
21
  )
22
+ from airbyte_cdk.sources.declarative.incremental import ConcurrentPerPartitionCursor
22
23
  from airbyte_cdk.sources.declarative.incremental.datetime_based_cursor import DatetimeBasedCursor
23
24
  from airbyte_cdk.sources.declarative.incremental.per_partition_with_global import (
24
25
  PerPartitionWithGlobalCursor,
@@ -231,7 +232,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
231
232
  ):
232
233
  cursor = declarative_stream.retriever.stream_slicer.stream_slicer
233
234
 
234
- if not isinstance(cursor, ConcurrentCursor):
235
+ if not isinstance(cursor, ConcurrentCursor | ConcurrentPerPartitionCursor):
235
236
  # This should never happen since we instantiate ConcurrentCursor in
236
237
  # model_to_component_factory.py
237
238
  raise ValueError(
@@ -138,7 +138,9 @@ class DeclarativeStream(Stream):
138
138
  """
139
139
  :param: stream_state We knowingly avoid using stream_state as we want cursors to manage their own state.
140
140
  """
141
- if stream_slice is None or stream_slice == {}:
141
+ if stream_slice is None or (
142
+ not isinstance(stream_slice, StreamSlice) and stream_slice == {}
143
+ ):
142
144
  # As the parameter is Optional, many would just call `read_records(sync_mode)` during testing without specifying the field
143
145
  # As part of the declarative model without custom components, this should never happen as the CDK would wire up a
144
146
  # SinglePartitionRouter that would create this StreamSlice properly
@@ -1656,7 +1656,7 @@ class ModelToComponentFactory:
1656
1656
  ) -> Optional[PartitionRouter]:
1657
1657
  if (
1658
1658
  hasattr(model, "partition_router")
1659
- and isinstance(model, SimpleRetrieverModel)
1659
+ and isinstance(model, SimpleRetrieverModel | AsyncRetrieverModel)
1660
1660
  and model.partition_router
1661
1661
  ):
1662
1662
  stream_slicer_model = model.partition_router
@@ -1690,6 +1690,31 @@ class ModelToComponentFactory:
1690
1690
  stream_slicer = self._build_stream_slicer_from_partition_router(model.retriever, config)
1691
1691
 
1692
1692
  if model.incremental_sync and stream_slicer:
1693
+ if model.retriever.type == "AsyncRetriever":
1694
+ if model.incremental_sync.type != "DatetimeBasedCursor":
1695
+ # We are currently in a transition to the Concurrent CDK and AsyncRetriever can only work with the support or unordered slices (for example, when we trigger reports for January and February, the report in February can be completed first). Once we have support for custom concurrent cursor or have a new implementation available in the CDK, we can enable more cursors here.
1696
+ raise ValueError(
1697
+ "AsyncRetriever with cursor other than DatetimeBasedCursor is not supported yet"
1698
+ )
1699
+ if stream_slicer:
1700
+ return self.create_concurrent_cursor_from_perpartition_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
1701
+ state_manager=self._connector_state_manager,
1702
+ model_type=DatetimeBasedCursorModel,
1703
+ component_definition=model.incremental_sync.__dict__,
1704
+ stream_name=model.name or "",
1705
+ stream_namespace=None,
1706
+ config=config or {},
1707
+ stream_state={},
1708
+ partition_router=stream_slicer,
1709
+ )
1710
+ return self.create_concurrent_cursor_from_datetime_based_cursor( # type: ignore # This is a known issue that we are creating and returning a ConcurrentCursor which does not technically implement the (low-code) StreamSlicer. However, (low-code) StreamSlicer and ConcurrentCursor both implement StreamSlicer.stream_slices() which is the primary method needed for checkpointing
1711
+ model_type=DatetimeBasedCursorModel,
1712
+ component_definition=model.incremental_sync.__dict__,
1713
+ stream_name=model.name or "",
1714
+ stream_namespace=None,
1715
+ config=config or {},
1716
+ )
1717
+
1693
1718
  incremental_sync_model = model.incremental_sync
1694
1719
  if (
1695
1720
  hasattr(incremental_sync_model, "global_substream_cursor")
@@ -4,9 +4,9 @@ from dataclasses import InitVar, dataclass, field
4
4
  from typing import Any, Callable, Iterable, Mapping, Optional
5
5
 
6
6
  from airbyte_cdk.models import FailureType
7
+ from airbyte_cdk.sources.declarative.async_job.job import AsyncJob
7
8
  from airbyte_cdk.sources.declarative.async_job.job_orchestrator import (
8
9
  AsyncJobOrchestrator,
9
- AsyncPartition,
10
10
  )
11
11
  from airbyte_cdk.sources.declarative.partition_routers.single_partition_router import (
12
12
  SinglePartitionRouter,
@@ -42,12 +42,12 @@ class AsyncJobPartitionRouter(StreamSlicer):
42
42
 
43
43
  for completed_partition in self._job_orchestrator.create_and_get_completed_partitions():
44
44
  yield StreamSlice(
45
- partition=dict(completed_partition.stream_slice.partition)
46
- | {"partition": completed_partition},
45
+ partition=dict(completed_partition.stream_slice.partition),
47
46
  cursor_slice=completed_partition.stream_slice.cursor_slice,
47
+ extra_fields={"jobs": list(completed_partition.jobs)},
48
48
  )
49
49
 
50
- def fetch_records(self, partition: AsyncPartition) -> Iterable[Mapping[str, Any]]:
50
+ def fetch_records(self, async_jobs: Iterable[AsyncJob]) -> Iterable[Mapping[str, Any]]:
51
51
  """
52
52
  This method of fetching records extends beyond what a PartitionRouter/StreamSlicer should
53
53
  be responsible for. However, this was added in because the JobOrchestrator is required to
@@ -62,4 +62,4 @@ class AsyncJobPartitionRouter(StreamSlicer):
62
62
  failure_type=FailureType.system_error,
63
63
  )
64
64
 
65
- return self._job_orchestrator.fetch_records(partition=partition)
65
+ return self._job_orchestrator.fetch_records(async_jobs=async_jobs)
@@ -6,7 +6,7 @@ from typing import Any, Iterable, Mapping, Optional
6
6
 
7
7
  from typing_extensions import deprecated
8
8
 
9
- from airbyte_cdk.models import FailureType
9
+ from airbyte_cdk.sources.declarative.async_job.job import AsyncJob
10
10
  from airbyte_cdk.sources.declarative.async_job.job_orchestrator import AsyncPartition
11
11
  from airbyte_cdk.sources.declarative.extractors.record_selector import RecordSelector
12
12
  from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_router import (
@@ -16,7 +16,6 @@ from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
16
16
  from airbyte_cdk.sources.source import ExperimentalClassWarning
17
17
  from airbyte_cdk.sources.streams.core import StreamData
18
18
  from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
19
- from airbyte_cdk.utils.traced_exception import AirbyteTracedException
20
19
 
21
20
 
22
21
  @deprecated(
@@ -57,9 +56,9 @@ class AsyncRetriever(Retriever):
57
56
 
58
57
  return self.state
59
58
 
60
- def _validate_and_get_stream_slice_partition(
59
+ def _validate_and_get_stream_slice_jobs(
61
60
  self, stream_slice: Optional[StreamSlice] = None
62
- ) -> AsyncPartition:
61
+ ) -> Iterable[AsyncJob]:
63
62
  """
64
63
  Validates the stream_slice argument and returns the partition from it.
65
64
 
@@ -73,12 +72,7 @@ class AsyncRetriever(Retriever):
73
72
  AirbyteTracedException: If the stream_slice is not an instance of StreamSlice or if the partition is not present in the stream_slice.
74
73
 
75
74
  """
76
- if not isinstance(stream_slice, StreamSlice) or "partition" not in stream_slice.partition:
77
- raise AirbyteTracedException(
78
- message="Invalid arguments to AsyncRetriever.read_records: stream_slice is not optional. Please contact Airbyte Support",
79
- failure_type=FailureType.system_error,
80
- )
81
- return stream_slice["partition"] # type: ignore # stream_slice["partition"] has been added as an AsyncPartition as part of stream_slices
75
+ return stream_slice.extra_fields.get("jobs", []) if stream_slice else []
82
76
 
83
77
  def stream_slices(self) -> Iterable[Optional[StreamSlice]]:
84
78
  return self.stream_slicer.stream_slices()
@@ -89,8 +83,8 @@ class AsyncRetriever(Retriever):
89
83
  stream_slice: Optional[StreamSlice] = None,
90
84
  ) -> Iterable[StreamData]:
91
85
  stream_state: StreamState = self._get_stream_state()
92
- partition: AsyncPartition = self._validate_and_get_stream_slice_partition(stream_slice)
93
- records: Iterable[Mapping[str, Any]] = self.stream_slicer.fetch_records(partition)
86
+ jobs: Iterable[AsyncJob] = self._validate_and_get_stream_slice_jobs(stream_slice)
87
+ records: Iterable[Mapping[str, Any]] = self.stream_slicer.fetch_records(jobs)
94
88
 
95
89
  yield from self.record_selector.filter_and_transform(
96
90
  all_data=records,
@@ -25,6 +25,13 @@ logger = logging.getLogger("airbyte")
25
25
  _NOOP_MESSAGE_REPOSITORY = NoopMessageRepository()
26
26
 
27
27
 
28
+ class ResponseKeysMaxRecurtionReached(AirbyteTracedException):
29
+ """
30
+ Raised when the max level of recursion is reached, when trying to
31
+ find-and-get the target key, during the `_make_handled_request`
32
+ """
33
+
34
+
28
35
  class AbstractOauth2Authenticator(AuthBase):
29
36
  """
30
37
  Abstract class for an OAuth authenticators that implements the OAuth token refresh flow. The authenticator
@@ -53,15 +60,31 @@ class AbstractOauth2Authenticator(AuthBase):
53
60
  request.headers.update(self.get_auth_header())
54
61
  return request
55
62
 
63
+ @property
64
+ def _is_access_token_flow(self) -> bool:
65
+ return self.get_token_refresh_endpoint() is None and self.access_token is not None
66
+
67
+ @property
68
+ def token_expiry_is_time_of_expiration(self) -> bool:
69
+ """
70
+ Indicates that the Token Expiry returns the date until which the token will be valid, not the amount of time it will be valid.
71
+ """
72
+
73
+ return False
74
+
75
+ @property
76
+ def token_expiry_date_format(self) -> Optional[str]:
77
+ """
78
+ Format of the datetime; exists it if expires_in is returned as the expiration datetime instead of seconds until it expires
79
+ """
80
+
81
+ return None
82
+
56
83
  def get_auth_header(self) -> Mapping[str, Any]:
57
84
  """HTTP header to set on the requests"""
58
85
  token = self.access_token if self._is_access_token_flow else self.get_access_token()
59
86
  return {"Authorization": f"Bearer {token}"}
60
87
 
61
- @property
62
- def _is_access_token_flow(self) -> bool:
63
- return self.get_token_refresh_endpoint() is None and self.access_token is not None
64
-
65
88
  def get_access_token(self) -> str:
66
89
  """Returns the access token"""
67
90
  if self.token_has_expired():
@@ -107,9 +130,39 @@ class AbstractOauth2Authenticator(AuthBase):
107
130
  headers = self.get_refresh_request_headers()
108
131
  return headers if headers else None
109
132
 
133
+ def refresh_access_token(self) -> Tuple[str, Union[str, int]]:
134
+ """
135
+ Returns the refresh token and its expiration datetime
136
+
137
+ :return: a tuple of (access_token, token_lifespan)
138
+ """
139
+ response_json = self._make_handled_request()
140
+ self._ensure_access_token_in_response(response_json)
141
+
142
+ return (
143
+ self._extract_access_token(response_json),
144
+ self._extract_token_expiry_date(response_json),
145
+ )
146
+
147
+ # ----------------
148
+ # PRIVATE METHODS
149
+ # ----------------
150
+
110
151
  def _wrap_refresh_token_exception(
111
152
  self, exception: requests.exceptions.RequestException
112
153
  ) -> bool:
154
+ """
155
+ Wraps and handles exceptions that occur during the refresh token process.
156
+
157
+ This method checks if the provided exception is related to a refresh token error
158
+ by examining the response status code and specific error content.
159
+
160
+ Args:
161
+ exception (requests.exceptions.RequestException): The exception raised during the request.
162
+
163
+ Returns:
164
+ bool: True if the exception is related to a refresh token error, False otherwise.
165
+ """
113
166
  try:
114
167
  if exception.response is not None:
115
168
  exception_content = exception.response.json()
@@ -131,7 +184,24 @@ class AbstractOauth2Authenticator(AuthBase):
131
184
  ),
132
185
  max_time=300,
133
186
  )
134
- def _get_refresh_access_token_response(self) -> Any:
187
+ def _make_handled_request(self) -> Any:
188
+ """
189
+ Makes a handled HTTP request to refresh an OAuth token.
190
+
191
+ This method sends a POST request to the token refresh endpoint with the necessary
192
+ headers and body to obtain a new access token. It handles various exceptions that
193
+ may occur during the request and logs the response for troubleshooting purposes.
194
+
195
+ Returns:
196
+ Mapping[str, Any]: The JSON response from the token refresh endpoint.
197
+
198
+ Raises:
199
+ DefaultBackoffException: If the response status code is 429 (Too Many Requests)
200
+ or any 5xx server error.
201
+ AirbyteTracedException: If the refresh token is invalid or expired, prompting
202
+ re-authentication.
203
+ Exception: For any other exceptions that occur during the request.
204
+ """
135
205
  try:
136
206
  response = requests.request(
137
207
  method="POST",
@@ -139,22 +209,10 @@ class AbstractOauth2Authenticator(AuthBase):
139
209
  data=self.build_refresh_request_body(),
140
210
  headers=self.build_refresh_request_headers(),
141
211
  )
142
- if response.ok:
143
- response_json = response.json()
144
- # Add the access token to the list of secrets so it is replaced before logging the response
145
- # An argument could be made to remove the prevous access key from the list of secrets, but unmasking values seems like a security incident waiting to happen...
146
- access_key = response_json.get(self.get_access_token_name())
147
- if not access_key:
148
- raise Exception(
149
- "Token refresh API response was missing access token {self.get_access_token_name()}"
150
- )
151
- add_to_secrets(access_key)
152
- self._log_response(response)
153
- return response_json
154
- else:
155
- # log the response even if the request failed for troubleshooting purposes
156
- self._log_response(response)
157
- response.raise_for_status()
212
+ # log the response even if the request failed for troubleshooting purposes
213
+ self._log_response(response)
214
+ response.raise_for_status()
215
+ return response.json()
158
216
  except requests.exceptions.RequestException as e:
159
217
  if e.response is not None:
160
218
  if e.response.status_code == 429 or e.response.status_code >= 500:
@@ -168,17 +226,34 @@ class AbstractOauth2Authenticator(AuthBase):
168
226
  except Exception as e:
169
227
  raise Exception(f"Error while refreshing access token: {e}") from e
170
228
 
171
- def refresh_access_token(self) -> Tuple[str, Union[str, int]]:
229
+ def _ensure_access_token_in_response(self, response_data: Mapping[str, Any]) -> None:
172
230
  """
173
- Returns the refresh token and its expiration datetime
231
+ Ensures that the access token is present in the response data.
174
232
 
175
- :return: a tuple of (access_token, token_lifespan)
176
- """
177
- response_json = self._get_refresh_access_token_response()
233
+ This method attempts to extract the access token from the provided response data.
234
+ If the access token is not found, it raises an exception indicating that the token
235
+ refresh API response was missing the access token. If the access token is found,
236
+ it adds the token to the list of secrets to ensure it is replaced before logging
237
+ the response.
238
+
239
+ Args:
240
+ response_data (Mapping[str, Any]): The response data from which to extract the access token.
178
241
 
179
- return response_json[self.get_access_token_name()], response_json[
180
- self.get_expires_in_name()
181
- ]
242
+ Raises:
243
+ Exception: If the access token is not found in the response data.
244
+ ResponseKeysMaxRecurtionReached: If the maximum recursion depth is reached while extracting the access token.
245
+ """
246
+ try:
247
+ access_key = self._extract_access_token(response_data)
248
+ if not access_key:
249
+ raise Exception(
250
+ "Token refresh API response was missing access token {self.get_access_token_name()}"
251
+ )
252
+ # Add the access token to the list of secrets so it is replaced before logging the response
253
+ # An argument could be made to remove the prevous access key from the list of secrets, but unmasking values seems like a security incident waiting to happen...
254
+ add_to_secrets(access_key)
255
+ except ResponseKeysMaxRecurtionReached as e:
256
+ raise e
182
257
 
183
258
  def _parse_token_expiration_date(self, value: Union[str, int]) -> AirbyteDateTime:
184
259
  """
@@ -206,22 +281,125 @@ class AbstractOauth2Authenticator(AuthBase):
206
281
  f"Invalid expires_in value: {value}. Expected number of seconds when no format specified."
207
282
  )
208
283
 
209
- @property
210
- def token_expiry_is_time_of_expiration(self) -> bool:
284
+ def _extract_access_token(self, response_data: Mapping[str, Any]) -> Any:
211
285
  """
212
- Indicates that the Token Expiry returns the date until which the token will be valid, not the amount of time it will be valid.
286
+ Extracts the access token from the given response data.
287
+
288
+ Args:
289
+ response_data (Mapping[str, Any]): The response data from which to extract the access token.
290
+
291
+ Returns:
292
+ str: The extracted access token.
213
293
  """
294
+ return self._find_and_get_value_from_response(response_data, self.get_access_token_name())
214
295
 
215
- return False
296
+ def _extract_refresh_token(self, response_data: Mapping[str, Any]) -> Any:
297
+ """
298
+ Extracts the refresh token from the given response data.
216
299
 
217
- @property
218
- def token_expiry_date_format(self) -> Optional[str]:
300
+ Args:
301
+ response_data (Mapping[str, Any]): The response data from which to extract the refresh token.
302
+
303
+ Returns:
304
+ str: The extracted refresh token.
219
305
  """
220
- Format of the datetime; exists it if expires_in is returned as the expiration datetime instead of seconds until it expires
306
+ return self._find_and_get_value_from_response(response_data, self.get_refresh_token_name())
307
+
308
+ def _extract_token_expiry_date(self, response_data: Mapping[str, Any]) -> Any:
309
+ """
310
+ Extracts the token_expiry_date, like `expires_in` or `expires_at`, etc from the given response data.
311
+
312
+ Args:
313
+ response_data (Mapping[str, Any]): The response data from which to extract the token_expiry_date.
314
+
315
+ Returns:
316
+ str: The extracted token_expiry_date.
221
317
  """
318
+ return self._find_and_get_value_from_response(response_data, self.get_expires_in_name())
319
+
320
+ def _find_and_get_value_from_response(
321
+ self,
322
+ response_data: Mapping[str, Any],
323
+ key_name: str,
324
+ max_depth: int = 5,
325
+ current_depth: int = 0,
326
+ ) -> Any:
327
+ """
328
+ Recursively searches for a specified key in a nested dictionary or list and returns its value if found.
329
+
330
+ Args:
331
+ response_data (Mapping[str, Any]): The response data to search through, which can be a dictionary or a list.
332
+ key_name (str): The key to search for in the response data.
333
+ max_depth (int, optional): The maximum depth to search for the key to avoid infinite recursion. Defaults to 5.
334
+ current_depth (int, optional): The current depth of the recursion. Defaults to 0.
335
+
336
+ Returns:
337
+ Any: The value associated with the specified key if found, otherwise None.
338
+
339
+ Raises:
340
+ AirbyteTracedException: If the maximum recursion depth is reached without finding the key.
341
+ """
342
+ if current_depth > max_depth:
343
+ # this is needed to avoid an inf loop, possible with a very deep nesting observed.
344
+ message = f"The maximum level of recursion is reached. Couldn't find the speficied `{key_name}` in the response."
345
+ raise ResponseKeysMaxRecurtionReached(
346
+ internal_message=message, message=message, failure_type=FailureType.config_error
347
+ )
348
+
349
+ if isinstance(response_data, dict):
350
+ # get from the root level
351
+ if key_name in response_data:
352
+ return response_data[key_name]
353
+
354
+ # get from the nested object
355
+ for _, value in response_data.items():
356
+ result = self._find_and_get_value_from_response(
357
+ value, key_name, max_depth, current_depth + 1
358
+ )
359
+ if result is not None:
360
+ return result
361
+
362
+ # get from the nested array object
363
+ elif isinstance(response_data, list):
364
+ for item in response_data:
365
+ result = self._find_and_get_value_from_response(
366
+ item, key_name, max_depth, current_depth + 1
367
+ )
368
+ if result is not None:
369
+ return result
222
370
 
223
371
  return None
224
372
 
373
+ @property
374
+ def _message_repository(self) -> Optional[MessageRepository]:
375
+ """
376
+ The implementation can define a message_repository if it wants debugging logs for HTTP requests
377
+ """
378
+ return _NOOP_MESSAGE_REPOSITORY
379
+
380
+ def _log_response(self, response: requests.Response) -> None:
381
+ """
382
+ Logs the HTTP response using the message repository if it is available.
383
+
384
+ Args:
385
+ response (requests.Response): The HTTP response to log.
386
+ """
387
+ if self._message_repository:
388
+ self._message_repository.log_message(
389
+ Level.DEBUG,
390
+ lambda: format_http_message(
391
+ response,
392
+ "Refresh token",
393
+ "Obtains access token",
394
+ self._NO_STREAM_NAME,
395
+ is_auxiliary=True,
396
+ ),
397
+ )
398
+
399
+ # ----------------
400
+ # ABSTR METHODS
401
+ # ----------------
402
+
225
403
  @abstractmethod
226
404
  def get_token_refresh_endpoint(self) -> Optional[str]:
227
405
  """Returns the endpoint to refresh the access token"""
@@ -295,23 +473,3 @@ class AbstractOauth2Authenticator(AuthBase):
295
473
  @abstractmethod
296
474
  def access_token(self, value: str) -> str:
297
475
  """Setter for the access token"""
298
-
299
- @property
300
- def _message_repository(self) -> Optional[MessageRepository]:
301
- """
302
- The implementation can define a message_repository if it wants debugging logs for HTTP requests
303
- """
304
- return _NOOP_MESSAGE_REPOSITORY
305
-
306
- def _log_response(self, response: requests.Response) -> None:
307
- if self._message_repository:
308
- self._message_repository.log_message(
309
- Level.DEBUG,
310
- lambda: format_http_message(
311
- response,
312
- "Refresh token",
313
- "Obtains access token",
314
- self._NO_STREAM_NAME,
315
- is_auxiliary=True,
316
- ),
317
- )