airbyte-cdk 6.31.2.dev0__tar.gz → 6.33.0__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.33.0/LICENSE_SHORT +1 -0
  2. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/PKG-INFO +6 -6
  3. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +9 -3
  4. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/connector_builder_handler.py +3 -2
  5. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +7 -7
  6. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/jwt.py +17 -11
  7. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/oauth.py +89 -23
  8. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/token_provider.py +4 -5
  9. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +19 -9
  10. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +145 -43
  11. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +51 -2
  12. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/declarative_stream.py +3 -1
  13. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +3 -5
  14. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/__init__.py +6 -0
  15. airbyte_cdk-6.33.0/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +400 -0
  16. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +3 -0
  17. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +35 -3
  18. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +20 -7
  19. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +41 -5
  20. airbyte_cdk-6.33.0/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +143 -0
  21. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +313 -30
  22. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +5 -5
  23. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +46 -12
  24. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +22 -0
  25. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +4 -4
  26. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +6 -12
  27. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +1 -1
  28. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/__init__.py +2 -0
  29. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +44 -5
  30. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/http_logger.py +1 -1
  31. airbyte_cdk-6.33.0/airbyte_cdk/sources/streams/concurrent/clamping.py +99 -0
  32. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/cursor.py +51 -57
  33. airbyte_cdk-6.33.0/airbyte_cdk/sources/streams/concurrent/cursor_types.py +32 -0
  34. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +22 -13
  35. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/core.py +6 -6
  36. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/http.py +1 -2
  37. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +231 -62
  38. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +171 -88
  39. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/types.py +4 -2
  40. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/transform.py +23 -2
  41. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +1 -2
  42. airbyte_cdk-6.33.0/airbyte_cdk/utils/datetime_helpers.py +499 -0
  43. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/slice_hasher.py +8 -1
  44. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/pyproject.toml +7 -6
  45. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/LICENSE.txt +0 -0
  46. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/README.md +0 -0
  47. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/__init__.py +0 -0
  48. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/__init__.py +0 -0
  49. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  50. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  51. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/config_observation.py +0 -0
  52. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector.py +0 -0
  53. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/README.md +0 -0
  54. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/__init__.py +0 -0
  55. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/main.py +0 -0
  56. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  57. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/models.py +0 -0
  58. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/__init__.py +0 -0
  59. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/destination.py +0 -0
  60. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  61. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  62. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  63. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  64. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  65. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  66. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  67. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  68. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  69. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/entrypoint.py +0 -0
  70. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/exception_handler.py +0 -0
  71. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/logger.py +0 -0
  72. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/__init__.py +0 -0
  73. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  74. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  75. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  76. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/well_known_types.py +0 -0
  77. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/py.typed +0 -0
  78. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/__init__.py +0 -0
  79. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/abstract_source.py +0 -0
  80. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  81. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  82. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  83. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  84. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  85. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  86. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  87. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/config.py +0 -0
  88. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  89. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  90. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  91. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  92. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  93. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  94. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  95. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  96. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  97. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  98. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  99. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  100. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  101. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  102. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  103. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  104. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  105. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  106. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  107. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  108. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  109. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  110. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  111. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  112. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  113. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  114. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  115. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  116. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  117. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  118. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  119. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  120. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  121. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  122. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  123. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  124. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  125. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  126. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  127. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  128. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  129. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  130. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  131. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  132. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  133. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  134. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  135. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  136. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  137. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  138. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  139. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  140. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  141. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  142. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  143. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  144. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  145. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  146. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  147. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  148. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  149. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  150. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  151. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  152. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  153. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  154. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  155. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  156. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  157. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  158. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  159. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  160. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  161. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  162. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  163. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  164. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  165. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  166. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  167. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  168. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  169. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  170. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  171. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  172. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  173. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  174. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  175. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  176. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  177. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  178. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  179. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  180. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  181. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  182. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  183. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  184. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  185. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  186. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  187. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  188. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  189. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  190. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  191. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  192. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  193. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  194. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  195. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  196. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  197. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  198. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  199. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  200. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  201. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  202. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  203. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  204. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  205. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  206. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  207. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  208. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  209. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  210. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/types.py +0 -0
  211. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  212. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  213. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  214. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  215. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/runner.py +0 -0
  216. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/tools.py +0 -0
  217. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/README.md +0 -0
  218. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  219. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  220. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  221. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  222. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  223. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  224. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  225. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  226. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  227. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  228. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  229. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  230. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  231. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  232. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  233. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  234. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  235. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  236. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  237. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  238. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  239. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  240. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  241. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  242. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  243. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  244. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  245. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  246. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  247. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  248. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  249. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  250. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  251. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  252. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  253. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  254. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  255. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  256. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  257. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  258. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  259. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  260. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  261. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  262. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  263. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/types.py +0 -0
  264. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/http_config.py +0 -0
  265. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/message/__init__.py +0 -0
  266. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/message/repository.py +0 -0
  267. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/source.py +0 -0
  268. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/__init__.py +0 -0
  269. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  270. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  271. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  272. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  273. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  274. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  275. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  276. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  277. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  278. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  279. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  280. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  281. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  282. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  283. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  284. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  285. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  286. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  287. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  288. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  289. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  290. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  291. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  292. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  293. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  294. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  295. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  296. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  297. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  298. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  299. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  300. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  301. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  302. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  303. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  304. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  305. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  306. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  307. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  308. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  309. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  310. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  311. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  312. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  313. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/__init__.py +0 -0
  314. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/casing.py +0 -0
  315. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  316. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  317. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  318. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/types.py +0 -0
  319. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/__init__.py +0 -0
  320. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/_util/__init__.py +0 -0
  321. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/_util/hashing.py +0 -0
  322. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  323. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/constants.py +0 -0
  324. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/exceptions.py +0 -0
  325. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/secrets.py +0 -0
  326. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/shared/__init__.py +0 -0
  327. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  328. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  329. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/types.py +0 -0
  330. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/__init__.py +0 -0
  331. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/catalog_builder.py +0 -0
  332. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  333. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  334. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  335. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  336. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/request.py +0 -0
  337. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/response.py +0 -0
  338. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  339. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/state_builder.py +0 -0
  340. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/__init__.py +0 -0
  341. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/data.py +0 -0
  342. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  343. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/reading.py +0 -0
  344. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/__init__.py +0 -0
  345. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  346. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/analytics_message.py +0 -0
  347. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/constants.py +0 -0
  348. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  349. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/event_timing.py +0 -0
  350. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  351. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  352. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/message_utils.py +0 -0
  353. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  354. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/print_buffer.py +0 -0
  355. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  356. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  357. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  358. {airbyte_cdk-6.31.2.dev0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -0,0 +1 @@
1
+ Copyright (c) 2025 Airbyte, Inc., all rights reserved.
@@ -1,7 +1,8 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.31.2.dev0
3
+ Version: 6.33.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
+ Home-page: https://airbyte.com
5
6
  License: MIT
6
7
  Keywords: airbyte,connector-development-kit,cdk
7
8
  Author: Airbyte
@@ -23,7 +24,7 @@ Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
23
24
  Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
24
25
  Requires-Dist: Unidecode (>=1.3,<2.0)
25
26
  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: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
27
28
  Requires-Dist: backoff
28
29
  Requires-Dist: cachetools
29
30
  Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
@@ -45,7 +46,6 @@ Requires-Dist: orjson (>=3.10.7,<4.0.0)
45
46
  Requires-Dist: pandas (==2.2.2)
46
47
  Requires-Dist: pdf2image (==1.16.3) ; extra == "file-based"
47
48
  Requires-Dist: pdfminer.six (==20221105) ; extra == "file-based"
48
- Requires-Dist: pendulum (<3.0.0)
49
49
  Requires-Dist: psutil (==6.1.0)
50
50
  Requires-Dist: pyarrow (>=15.0.0,<15.1.0) ; extra == "file-based"
51
51
  Requires-Dist: pydantic (>=2.7,<3.0)
@@ -53,7 +53,7 @@ Requires-Dist: pyjwt (>=2.8.0,<3.0.0)
53
53
  Requires-Dist: pyrate-limiter (>=3.1.0,<3.2.0)
54
54
  Requires-Dist: pytesseract (==0.3.10) ; extra == "file-based"
55
55
  Requires-Dist: python-calamine (==0.2.3) ; extra == "file-based"
56
- Requires-Dist: python-dateutil
56
+ Requires-Dist: python-dateutil (>=2.9.0,<3.0.0)
57
57
  Requires-Dist: python-snappy (==0.7.3) ; extra == "file-based"
58
58
  Requires-Dist: python-ulid (>=3.0.0,<4.0.0)
59
59
  Requires-Dist: pytz (==2024.2)
@@ -66,9 +66,9 @@ Requires-Dist: tiktoken (==0.8.0) ; extra == "vector-db-based"
66
66
  Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
67
67
  Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
68
68
  Requires-Dist: wcmatch (==10.0)
69
+ Requires-Dist: whenever (>=0.6.16,<0.7.0)
69
70
  Requires-Dist: xmltodict (>=0.13,<0.15)
70
71
  Project-URL: Documentation, https://docs.airbyte.io/
71
- Project-URL: Homepage, https://airbyte.com
72
72
  Project-URL: Repository, https://github.com/airbytehq/airbyte-python-cdk
73
73
  Description-Content-Type: text/markdown
74
74
 
@@ -21,7 +21,6 @@ import pkgutil
21
21
  import sys
22
22
  import traceback
23
23
  from collections.abc import Mapping
24
- from datetime import datetime
25
24
  from pathlib import Path
26
25
  from typing import Any, cast
27
26
 
@@ -44,6 +43,7 @@ from airbyte_cdk.sources.declarative.concurrent_declarative_source import (
44
43
  )
45
44
  from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource
46
45
  from airbyte_cdk.sources.source import TState
46
+ from airbyte_cdk.utils.datetime_helpers import ab_datetime_now
47
47
 
48
48
 
49
49
  class SourceLocalYaml(YamlDeclarativeSource):
@@ -101,7 +101,7 @@ def _get_local_yaml_source(args: list[str]) -> SourceLocalYaml:
101
101
  type=Type.TRACE,
102
102
  trace=AirbyteTraceMessage(
103
103
  type=TraceType.ERROR,
104
- emitted_at=int(datetime.now().timestamp() * 1000),
104
+ emitted_at=ab_datetime_now().to_epoch_millis(),
105
105
  error=AirbyteErrorTraceMessage(
106
106
  message=f"Error starting the sync. This could be due to an invalid configuration or catalog. Please contact Support for assistance. Error: {error}",
107
107
  stack_trace=traceback.format_exc(),
@@ -171,6 +171,12 @@ def create_declarative_source(
171
171
  "Invalid config: `__injected_declarative_manifest` should be provided at the root "
172
172
  f"of the config but config only has keys: {list(config.keys() if config else [])}"
173
173
  )
174
+ if not isinstance(config["__injected_declarative_manifest"], dict):
175
+ raise ValueError(
176
+ "Invalid config: `__injected_declarative_manifest` should be a dictionary, "
177
+ f"but got type: {type(config['__injected_declarative_manifest'])}"
178
+ )
179
+
174
180
  return ConcurrentDeclarativeSource(
175
181
  config=config,
176
182
  catalog=catalog,
@@ -185,7 +191,7 @@ def create_declarative_source(
185
191
  type=Type.TRACE,
186
192
  trace=AirbyteTraceMessage(
187
193
  type=TraceType.ERROR,
188
- emitted_at=int(datetime.now().timestamp() * 1000),
194
+ emitted_at=ab_datetime_now().to_epoch_millis(),
189
195
  error=AirbyteErrorTraceMessage(
190
196
  message=f"Error starting the sync. This could be due to an invalid configuration or catalog. Please contact Support for assistance. Error: {error}",
191
197
  stack_trace=traceback.format_exc(),
@@ -3,7 +3,6 @@
3
3
  #
4
4
 
5
5
  import dataclasses
6
- from datetime import datetime
7
6
  from typing import Any, List, Mapping
8
7
 
9
8
  from airbyte_cdk.connector_builder.message_grouper import MessageGrouper
@@ -21,6 +20,7 @@ from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
21
20
  ModelToComponentFactory,
22
21
  )
23
22
  from airbyte_cdk.utils.airbyte_secrets_utils import filter_secrets
23
+ from airbyte_cdk.utils.datetime_helpers import ab_datetime_now
24
24
  from airbyte_cdk.utils.traced_exception import AirbyteTracedException
25
25
 
26
26
  DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE = 5
@@ -52,6 +52,7 @@ def get_limits(config: Mapping[str, Any]) -> TestReadLimits:
52
52
  def create_source(config: Mapping[str, Any], limits: TestReadLimits) -> ManifestDeclarativeSource:
53
53
  manifest = config["__injected_declarative_manifest"]
54
54
  return ManifestDeclarativeSource(
55
+ config=config,
55
56
  emit_connector_builder_messages=True,
56
57
  source_config=manifest,
57
58
  component_factory=ModelToComponentFactory(
@@ -113,4 +114,4 @@ def resolve_manifest(source: ManifestDeclarativeSource) -> AirbyteMessage:
113
114
 
114
115
 
115
116
  def _emitted_at() -> int:
116
- return int(datetime.now().timestamp()) * 1000
117
+ return ab_datetime_now().to_epoch_millis()
@@ -437,10 +437,10 @@ class AsyncJobOrchestrator:
437
437
  yield from self._process_running_partitions_and_yield_completed_ones()
438
438
  self._wait_on_status_update()
439
439
  except Exception as exception:
440
+ LOGGER.warning(
441
+ f"Caught exception that stops the processing of the jobs: {exception}. Traceback: {traceback.format_exc()}"
442
+ )
440
443
  if self._is_breaking_exception(exception):
441
- LOGGER.warning(
442
- f"Caught exception that stops the processing of the jobs: {exception}"
443
- )
444
444
  self._abort_all_running_jobs()
445
445
  raise exception
446
446
 
@@ -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)
@@ -3,6 +3,7 @@
3
3
  #
4
4
 
5
5
  import base64
6
+ import json
6
7
  from dataclasses import InitVar, dataclass
7
8
  from datetime import datetime
8
9
  from typing import Any, Mapping, Optional, Union
@@ -104,21 +105,21 @@ class JwtAuthenticator(DeclarativeAuthenticator):
104
105
  )
105
106
 
106
107
  def _get_jwt_headers(self) -> dict[str, Any]:
107
- """ "
108
+ """
108
109
  Builds and returns the headers used when signing the JWT.
109
110
  """
110
- headers = self._additional_jwt_headers.eval(self.config)
111
+ headers = self._additional_jwt_headers.eval(self.config, json_loads=json.loads)
111
112
  if any(prop in headers for prop in ["kid", "alg", "typ", "cty"]):
112
113
  raise ValueError(
113
114
  "'kid', 'alg', 'typ', 'cty' are reserved headers and should not be set as part of 'additional_jwt_headers'"
114
115
  )
115
116
 
116
117
  if self._kid:
117
- headers["kid"] = self._kid.eval(self.config)
118
+ headers["kid"] = self._kid.eval(self.config, json_loads=json.loads)
118
119
  if self._typ:
119
- headers["typ"] = self._typ.eval(self.config)
120
+ headers["typ"] = self._typ.eval(self.config, json_loads=json.loads)
120
121
  if self._cty:
121
- headers["cty"] = self._cty.eval(self.config)
122
+ headers["cty"] = self._cty.eval(self.config, json_loads=json.loads)
122
123
  headers["alg"] = self._algorithm
123
124
  return headers
124
125
 
@@ -130,18 +131,19 @@ class JwtAuthenticator(DeclarativeAuthenticator):
130
131
  exp = now + self._token_duration if isinstance(self._token_duration, int) else now
131
132
  nbf = now
132
133
 
133
- payload = self._additional_jwt_payload.eval(self.config)
134
+ payload = self._additional_jwt_payload.eval(self.config, json_loads=json.loads)
134
135
  if any(prop in payload for prop in ["iss", "sub", "aud", "iat", "exp", "nbf"]):
135
136
  raise ValueError(
136
137
  "'iss', 'sub', 'aud', 'iat', 'exp', 'nbf' are reserved properties and should not be set as part of 'additional_jwt_payload'"
137
138
  )
138
139
 
139
140
  if self._iss:
140
- payload["iss"] = self._iss.eval(self.config)
141
+ payload["iss"] = self._iss.eval(self.config, json_loads=json.loads)
141
142
  if self._sub:
142
- payload["sub"] = self._sub.eval(self.config)
143
+ payload["sub"] = self._sub.eval(self.config, json_loads=json.loads)
143
144
  if self._aud:
144
- payload["aud"] = self._aud.eval(self.config)
145
+ payload["aud"] = self._aud.eval(self.config, json_loads=json.loads)
146
+
145
147
  payload["iat"] = now
146
148
  payload["exp"] = exp
147
149
  payload["nbf"] = nbf
@@ -151,7 +153,7 @@ class JwtAuthenticator(DeclarativeAuthenticator):
151
153
  """
152
154
  Returns the secret key used to sign the JWT.
153
155
  """
154
- secret_key: str = self._secret_key.eval(self.config)
156
+ secret_key: str = self._secret_key.eval(self.config, json_loads=json.loads)
155
157
  return (
156
158
  base64.b64encode(secret_key.encode()).decode()
157
159
  if self._base64_encode_secret_key
@@ -176,7 +178,11 @@ class JwtAuthenticator(DeclarativeAuthenticator):
176
178
  """
177
179
  Returns the header prefix to be used when attaching the token to the request.
178
180
  """
179
- return self._header_prefix.eval(self.config) if self._header_prefix else None
181
+ return (
182
+ self._header_prefix.eval(self.config, json_loads=json.loads)
183
+ if self._header_prefix
184
+ else None
185
+ )
180
186
 
181
187
  @property
182
188
  def auth_header(self) -> str:
@@ -3,11 +3,11 @@
3
3
  #
4
4
 
5
5
  from dataclasses import InitVar, dataclass, field
6
- from typing import Any, List, Mapping, Optional, Union
7
-
8
- import pendulum
6
+ from datetime import timedelta
7
+ from typing import Any, List, Mapping, MutableMapping, Optional, Union
9
8
 
10
9
  from airbyte_cdk.sources.declarative.auth.declarative_authenticator import DeclarativeAuthenticator
10
+ from airbyte_cdk.sources.declarative.interpolation.interpolated_boolean import InterpolatedBoolean
11
11
  from airbyte_cdk.sources.declarative.interpolation.interpolated_mapping import InterpolatedMapping
12
12
  from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
13
13
  from airbyte_cdk.sources.message import MessageRepository, NoopMessageRepository
@@ -17,6 +17,7 @@ from airbyte_cdk.sources.streams.http.requests_native_auth.abstract_oauth import
17
17
  from airbyte_cdk.sources.streams.http.requests_native_auth.oauth import (
18
18
  SingleUseRefreshTokenOauth2Authenticator,
19
19
  )
20
+ from airbyte_cdk.utils.datetime_helpers import AirbyteDateTime, ab_datetime_now, ab_datetime_parse
20
21
 
21
22
 
22
23
  @dataclass
@@ -44,15 +45,15 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
44
45
  message_repository (MessageRepository): the message repository used to emit logs on HTTP requests
45
46
  """
46
47
 
47
- client_id: Union[InterpolatedString, str]
48
- client_secret: Union[InterpolatedString, str]
49
48
  config: Mapping[str, Any]
50
49
  parameters: InitVar[Mapping[str, Any]]
50
+ client_id: Optional[Union[InterpolatedString, str]] = None
51
+ client_secret: Optional[Union[InterpolatedString, str]] = None
51
52
  token_refresh_endpoint: Optional[Union[InterpolatedString, str]] = None
52
53
  refresh_token: Optional[Union[InterpolatedString, str]] = None
53
54
  scopes: Optional[List[str]] = None
54
55
  token_expiry_date: Optional[Union[InterpolatedString, str]] = None
55
- _token_expiry_date: Optional[pendulum.DateTime] = field(init=False, repr=False, default=None)
56
+ _token_expiry_date: Optional[AirbyteDateTime] = field(init=False, repr=False, default=None)
56
57
  token_expiry_date_format: Optional[str] = None
57
58
  token_expiry_is_time_of_expiration: bool = False
58
59
  access_token_name: Union[InterpolatedString, str] = "access_token"
@@ -66,6 +67,8 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
66
67
  grant_type_name: Union[InterpolatedString, str] = "grant_type"
67
68
  grant_type: Union[InterpolatedString, str] = "refresh_token"
68
69
  message_repository: MessageRepository = NoopMessageRepository()
70
+ profile_assertion: Optional[DeclarativeAuthenticator] = None
71
+ use_profile_assertion: Optional[Union[InterpolatedBoolean, str, bool]] = False
69
72
 
70
73
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
71
74
  super().__init__()
@@ -76,11 +79,19 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
76
79
  else:
77
80
  self._token_refresh_endpoint = None
78
81
  self._client_id_name = InterpolatedString.create(self.client_id_name, parameters=parameters)
79
- self._client_id = InterpolatedString.create(self.client_id, parameters=parameters)
82
+ self._client_id = (
83
+ InterpolatedString.create(self.client_id, parameters=parameters)
84
+ if self.client_id
85
+ else self.client_id
86
+ )
80
87
  self._client_secret_name = InterpolatedString.create(
81
88
  self.client_secret_name, parameters=parameters
82
89
  )
83
- self._client_secret = InterpolatedString.create(self.client_secret, parameters=parameters)
90
+ self._client_secret = (
91
+ InterpolatedString.create(self.client_secret, parameters=parameters)
92
+ if self.client_secret
93
+ else self.client_secret
94
+ )
84
95
  self._refresh_token_name = InterpolatedString.create(
85
96
  self.refresh_token_name, parameters=parameters
86
97
  )
@@ -99,22 +110,43 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
99
110
  self.grant_type_name = InterpolatedString.create(
100
111
  self.grant_type_name, parameters=parameters
101
112
  )
102
- self.grant_type = InterpolatedString.create(self.grant_type, parameters=parameters)
113
+ self.grant_type = InterpolatedString.create(
114
+ "urn:ietf:params:oauth:grant-type:jwt-bearer"
115
+ if self.use_profile_assertion
116
+ else self.grant_type,
117
+ parameters=parameters,
118
+ )
103
119
  self._refresh_request_body = InterpolatedMapping(
104
120
  self.refresh_request_body or {}, parameters=parameters
105
121
  )
106
122
  self._refresh_request_headers = InterpolatedMapping(
107
123
  self.refresh_request_headers or {}, parameters=parameters
108
124
  )
109
- self._token_expiry_date: pendulum.DateTime = (
110
- pendulum.parse(
111
- InterpolatedString.create(self.token_expiry_date, parameters=parameters).eval(
112
- self.config
125
+ try:
126
+ if (
127
+ isinstance(self.token_expiry_date, (int, str))
128
+ and str(self.token_expiry_date).isdigit()
129
+ ):
130
+ self._token_expiry_date = ab_datetime_parse(self.token_expiry_date)
131
+ else:
132
+ self._token_expiry_date = (
133
+ ab_datetime_parse(
134
+ InterpolatedString.create(
135
+ self.token_expiry_date, parameters=parameters
136
+ ).eval(self.config)
137
+ )
138
+ if self.token_expiry_date
139
+ else ab_datetime_now() - timedelta(days=1)
113
140
  )
114
- ) # type: ignore # pendulum.parse returns a datetime in this context
115
- if self.token_expiry_date
116
- else pendulum.now().subtract(days=1) # type: ignore # substract does not have type hints
141
+ except ValueError as e:
142
+ raise ValueError(f"Invalid token expiry date format: {e}")
143
+ self.use_profile_assertion = (
144
+ InterpolatedBoolean(self.use_profile_assertion, parameters=parameters)
145
+ if isinstance(self.use_profile_assertion, str)
146
+ else self.use_profile_assertion
117
147
  )
148
+ self.assertion_name = "assertion"
149
+
118
150
  if self.access_token_value is not None:
119
151
  self._access_token_value = InterpolatedString.create(
120
152
  self.access_token_value, parameters=parameters
@@ -126,9 +158,20 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
126
158
  self._access_token_value if self.access_token_value else None
127
159
  )
128
160
 
161
+ if not self.use_profile_assertion and any(
162
+ client_creds is None for client_creds in [self.client_id, self.client_secret]
163
+ ):
164
+ raise ValueError(
165
+ "OAuthAuthenticator configuration error: Both 'client_id' and 'client_secret' are required for the "
166
+ "basic OAuth flow."
167
+ )
168
+ if self.profile_assertion is None and self.use_profile_assertion:
169
+ raise ValueError(
170
+ "OAuthAuthenticator configuration error: 'profile_assertion' is required when using the profile assertion flow."
171
+ )
129
172
  if self.get_grant_type() == "refresh_token" and self._refresh_token is None:
130
173
  raise ValueError(
131
- "OAuthAuthenticator needs a refresh_token parameter if grant_type is set to `refresh_token`"
174
+ "OAuthAuthenticator configuration error: A 'refresh_token' is required when the 'grant_type' is set to 'refresh_token'."
132
175
  )
133
176
 
134
177
  def get_token_refresh_endpoint(self) -> Optional[str]:
@@ -145,19 +188,21 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
145
188
  return self._client_id_name.eval(self.config) # type: ignore # eval returns a string in this context
146
189
 
147
190
  def get_client_id(self) -> str:
148
- client_id: str = self._client_id.eval(self.config)
191
+ client_id = self._client_id.eval(self.config) if self._client_id else self._client_id
149
192
  if not client_id:
150
193
  raise ValueError("OAuthAuthenticator was unable to evaluate client_id parameter")
151
- return client_id
194
+ return client_id # type: ignore # value will be returned as a string, or an error will be raised
152
195
 
153
196
  def get_client_secret_name(self) -> str:
154
197
  return self._client_secret_name.eval(self.config) # type: ignore # eval returns a string in this context
155
198
 
156
199
  def get_client_secret(self) -> str:
157
- client_secret: str = self._client_secret.eval(self.config)
200
+ client_secret = (
201
+ self._client_secret.eval(self.config) if self._client_secret else self._client_secret
202
+ )
158
203
  if not client_secret:
159
204
  raise ValueError("OAuthAuthenticator was unable to evaluate client_secret parameter")
160
- return client_secret
205
+ return client_secret # type: ignore # value will be returned as a string, or an error will be raised
161
206
 
162
207
  def get_refresh_token_name(self) -> str:
163
208
  return self._refresh_token_name.eval(self.config) # type: ignore # eval returns a string in this context
@@ -186,12 +231,33 @@ class DeclarativeOauth2Authenticator(AbstractOauth2Authenticator, DeclarativeAut
186
231
  def get_refresh_request_headers(self) -> Mapping[str, Any]:
187
232
  return self._refresh_request_headers.eval(self.config)
188
233
 
189
- def get_token_expiry_date(self) -> pendulum.DateTime:
190
- return self._token_expiry_date # type: ignore # _token_expiry_date is a pendulum.DateTime. It is never None despite what mypy thinks
234
+ def get_token_expiry_date(self) -> AirbyteDateTime:
235
+ return self._token_expiry_date # type: ignore # _token_expiry_date is an AirbyteDateTime. It is never None despite what mypy thinks
191
236
 
192
237
  def set_token_expiry_date(self, value: Union[str, int]) -> None:
193
238
  self._token_expiry_date = self._parse_token_expiration_date(value)
194
239
 
240
+ def get_assertion_name(self) -> str:
241
+ return self.assertion_name
242
+
243
+ def get_assertion(self) -> str:
244
+ if self.profile_assertion is None:
245
+ raise ValueError("profile_assertion is not set")
246
+ return self.profile_assertion.token
247
+
248
+ def build_refresh_request_body(self) -> Mapping[str, Any]:
249
+ """
250
+ Returns the request body to set on the refresh request
251
+
252
+ Override to define additional parameters
253
+ """
254
+ if self.use_profile_assertion:
255
+ return {
256
+ self.get_grant_type_name(): self.get_grant_type(),
257
+ self.get_assertion_name(): self.get_assertion(),
258
+ }
259
+ return super().build_refresh_request_body()
260
+
195
261
  @property
196
262
  def access_token(self) -> str:
197
263
  if self._access_token is None:
@@ -9,9 +9,7 @@ from dataclasses import InitVar, dataclass, field
9
9
  from typing import Any, List, Mapping, Optional, Union
10
10
 
11
11
  import dpath
12
- import pendulum
13
12
  from isodate import Duration
14
- from pendulum import DateTime
15
13
 
16
14
  from airbyte_cdk.sources.declarative.decoders.decoder import Decoder
17
15
  from airbyte_cdk.sources.declarative.decoders.json_decoder import JsonDecoder
@@ -21,6 +19,7 @@ from airbyte_cdk.sources.declarative.requesters.requester import Requester
21
19
  from airbyte_cdk.sources.http_logger import format_http_message
22
20
  from airbyte_cdk.sources.message import MessageRepository, NoopMessageRepository
23
21
  from airbyte_cdk.sources.types import Config
22
+ from airbyte_cdk.utils.datetime_helpers import AirbyteDateTime, ab_datetime_now
24
23
 
25
24
 
26
25
  class TokenProvider:
@@ -38,7 +37,7 @@ class SessionTokenProvider(TokenProvider):
38
37
  message_repository: MessageRepository = NoopMessageRepository()
39
38
  decoder: Decoder = field(default_factory=lambda: JsonDecoder(parameters={}))
40
39
 
41
- _next_expiration_time: Optional[DateTime] = None
40
+ _next_expiration_time: Optional[AirbyteDateTime] = None
42
41
  _token: Optional[str] = None
43
42
 
44
43
  def get_token(self) -> str:
@@ -48,7 +47,7 @@ class SessionTokenProvider(TokenProvider):
48
47
  return self._token
49
48
 
50
49
  def _refresh_if_necessary(self) -> None:
51
- if self._next_expiration_time is None or self._next_expiration_time < pendulum.now():
50
+ if self._next_expiration_time is None or self._next_expiration_time < ab_datetime_now():
52
51
  self._refresh()
53
52
 
54
53
  def _refresh(self) -> None:
@@ -65,7 +64,7 @@ class SessionTokenProvider(TokenProvider):
65
64
  raise ReadException("Failed to get session token, response got ignored by requester")
66
65
  session_token = dpath.get(next(self.decoder.decode(response)), self.session_token_path)
67
66
  if self.expiration_duration is not None:
68
- self._next_expiration_time = pendulum.now() + self.expiration_duration
67
+ self._next_expiration_time = ab_datetime_now() + self.expiration_duration
69
68
  self._token = session_token # type: ignore # Returned decoded response will be Mapping and therefore session_token will be str or None
70
69
 
71
70
 
@@ -21,8 +21,12 @@ class CheckDynamicStream(ConnectionChecker):
21
21
  stream_count (int): numbers of streams to check
22
22
  """
23
23
 
24
+ # TODO: Add field stream_names to check_connection for static streams
25
+ # https://github.com/airbytehq/airbyte-python-cdk/pull/293#discussion_r1934933483
26
+
24
27
  stream_count: int
25
28
  parameters: InitVar[Mapping[str, Any]]
29
+ use_check_availability: bool = True
26
30
 
27
31
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
28
32
  self._parameters = parameters
@@ -31,21 +35,27 @@ class CheckDynamicStream(ConnectionChecker):
31
35
  self, source: AbstractSource, logger: logging.Logger, config: Mapping[str, Any]
32
36
  ) -> Tuple[bool, Any]:
33
37
  streams = source.streams(config=config)
38
+
34
39
  if len(streams) == 0:
35
40
  return False, f"No streams to connect to from source {source}"
41
+ if not self.use_check_availability:
42
+ return True, None
43
+
44
+ availability_strategy = HttpAvailabilityStrategy()
36
45
 
37
- for stream_index in range(min(self.stream_count, len(streams))):
38
- stream = streams[stream_index]
39
- availability_strategy = HttpAvailabilityStrategy()
40
- try:
46
+ try:
47
+ for stream in streams[: min(self.stream_count, len(streams))]:
41
48
  stream_is_available, reason = availability_strategy.check_availability(
42
49
  stream, logger
43
50
  )
44
51
  if not stream_is_available:
52
+ logger.warning(f"Stream {stream.name} is not available: {reason}")
45
53
  return False, reason
46
- except Exception as error:
47
- logger.error(
48
- f"Encountered an error trying to connect to stream {stream.name}. Error: \n {traceback.format_exc()}"
49
- )
50
- return False, f"Unable to connect to stream {stream.name} - {error}"
54
+ except Exception as error:
55
+ error_message = (
56
+ f"Encountered an error trying to connect to stream {stream.name}. Error: {error}"
57
+ )
58
+ logger.error(error_message, exc_info=True)
59
+ return False, error_message
60
+
51
61
  return True, None