airbyte-cdk 6.36.0__tar.gz → 6.36.0.dev0__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 (367) hide show
  1. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +75 -15
  3. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +16 -15
  4. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +1 -11
  5. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +84 -17
  6. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +2 -6
  7. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +1 -1
  8. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/filters.py +1 -2
  9. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +1 -1
  10. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +1 -1
  11. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +1 -1
  12. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +1 -1
  13. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +1 -2
  14. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +1 -14
  15. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/interpolation/macros.py +4 -19
  16. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +1 -1
  17. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +1 -2
  18. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +1 -0
  19. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +4 -1
  20. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +3 -0
  21. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +47 -2
  22. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +2 -0
  23. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +4 -4
  24. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/pyproject.toml +1 -1
  25. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/LICENSE.txt +0 -0
  26. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/LICENSE_SHORT +0 -0
  27. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/README.md +0 -0
  28. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/__init__.py +0 -0
  29. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/cli/__init__.py +0 -0
  30. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  31. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  32. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  33. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/config_observation.py +0 -0
  34. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector.py +0 -0
  35. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/README.md +0 -0
  36. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/__init__.py +0 -0
  37. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  38. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/main.py +0 -0
  39. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/models.py +0 -0
  40. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  41. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  42. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  43. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  44. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  45. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/__init__.py +0 -0
  46. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/destination.py +0 -0
  47. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  48. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  49. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  50. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  51. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  52. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  53. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  54. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  55. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  56. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/entrypoint.py +0 -0
  57. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/exception_handler.py +0 -0
  58. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/logger.py +0 -0
  59. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/models/__init__.py +0 -0
  60. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  61. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  62. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  63. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/models/well_known_types.py +0 -0
  64. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/py.typed +0 -0
  65. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/__init__.py +0 -0
  66. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/abstract_source.py +0 -0
  67. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  68. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  69. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  70. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  71. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  72. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  73. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  74. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/config.py +0 -0
  75. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  76. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  77. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  78. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  79. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  80. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  81. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  82. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  83. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  84. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  85. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  86. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  87. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  88. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  89. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  90. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  91. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  92. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  93. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  94. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  95. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  96. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  97. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  98. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  99. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  100. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  101. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  102. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  103. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  104. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  105. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  106. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  107. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  108. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  109. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  110. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  111. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  112. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  113. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  114. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  115. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  116. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  117. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  118. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  119. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  120. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  121. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  122. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  123. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  124. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  125. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  126. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  127. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  128. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  129. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  130. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  131. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  132. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  133. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  134. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  135. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  136. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  137. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  138. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  139. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  140. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  141. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  142. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  143. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  144. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  145. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  146. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  147. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  148. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  149. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  150. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  151. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  152. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  153. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  154. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  155. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  156. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  157. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  158. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  159. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  160. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  161. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  162. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  163. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  164. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  165. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  166. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  167. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  168. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  169. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  170. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  171. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  172. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  173. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  174. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  175. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  176. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  177. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  178. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  179. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  180. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  181. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  182. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  183. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  184. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  185. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  186. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  187. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  188. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  189. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  190. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  191. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  192. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  193. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  194. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  195. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  196. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  197. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  198. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  199. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  200. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/types.py +0 -0
  201. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  202. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  203. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  204. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  205. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/embedded/runner.py +0 -0
  206. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/embedded/tools.py +0 -0
  207. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/README.md +0 -0
  208. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  209. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  210. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  211. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  212. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  213. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  214. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  215. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  216. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  217. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  218. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  219. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  220. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  221. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  222. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  223. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  224. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  225. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  226. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  227. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  228. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  229. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  230. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  231. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  232. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  233. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  234. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  235. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  236. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  237. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  238. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  239. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  240. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  241. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  242. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  243. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  244. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  245. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  246. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  247. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  248. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  249. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  250. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  251. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  252. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  253. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  254. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  255. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  256. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/file_based/types.py +0 -0
  257. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/http_config.py +0 -0
  258. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/http_logger.py +0 -0
  259. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/message/__init__.py +0 -0
  260. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/message/repository.py +0 -0
  261. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/source.py +0 -0
  262. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  263. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/__init__.py +0 -0
  264. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  265. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  266. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  267. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  268. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  269. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  270. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  271. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  272. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  273. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  274. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  275. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  276. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  277. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  278. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  279. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  280. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  281. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  282. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  283. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  284. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  285. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  286. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  287. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  288. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  289. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  290. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  291. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  292. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  293. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  294. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/core.py +0 -0
  295. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  296. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  297. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  298. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  299. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  300. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  301. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  302. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  303. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  304. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  305. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  306. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  307. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/http.py +0 -0
  308. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  309. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  310. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  311. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  312. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  313. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  314. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  315. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  316. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  317. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/types.py +0 -0
  318. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/__init__.py +0 -0
  319. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/casing.py +0 -0
  320. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  321. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  322. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  323. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/transform.py +0 -0
  324. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sources/utils/types.py +0 -0
  325. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/__init__.py +0 -0
  326. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/_util/__init__.py +0 -0
  327. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/_util/hashing.py +0 -0
  328. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  329. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/constants.py +0 -0
  330. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/exceptions.py +0 -0
  331. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/secrets.py +0 -0
  332. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/shared/__init__.py +0 -0
  333. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  334. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  335. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/sql/types.py +0 -0
  336. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/__init__.py +0 -0
  337. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/catalog_builder.py +0 -0
  338. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  339. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  340. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  341. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  342. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/mock_http/request.py +0 -0
  343. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/mock_http/response.py +0 -0
  344. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  345. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/state_builder.py +0 -0
  346. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/utils/__init__.py +0 -0
  347. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/utils/data.py +0 -0
  348. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  349. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  350. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/test/utils/reading.py +0 -0
  351. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/__init__.py +0 -0
  352. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  353. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/analytics_message.py +0 -0
  354. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/constants.py +0 -0
  355. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  356. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  357. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/event_timing.py +0 -0
  358. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  359. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  360. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/message_utils.py +0 -0
  361. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  362. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/print_buffer.py +0 -0
  363. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  364. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/slice_hasher.py +0 -0
  365. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  366. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  367. {airbyte_cdk-6.36.0 → airbyte_cdk-6.36.0.dev0}/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.36.0
3
+ Version: 6.36.0.dev0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -24,6 +24,7 @@ from airbyte_cdk.sources.declarative.incremental.datetime_based_cursor import Da
24
24
  from airbyte_cdk.sources.declarative.incremental.per_partition_with_global import (
25
25
  PerPartitionWithGlobalCursor,
26
26
  )
27
+ from airbyte_cdk.sources.declarative.interpolation import InterpolatedString
27
28
  from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource
28
29
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
29
30
  ConcurrencyLevel as ConcurrencyLevelModel,
@@ -35,16 +36,17 @@ from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
35
36
  ModelToComponentFactory,
36
37
  )
37
38
  from airbyte_cdk.sources.declarative.partition_routers import AsyncJobPartitionRouter
39
+ from airbyte_cdk.sources.declarative.requesters import HttpRequester
38
40
  from airbyte_cdk.sources.declarative.retrievers import AsyncRetriever, Retriever, SimpleRetriever
39
41
  from airbyte_cdk.sources.declarative.stream_slicers.declarative_partition_generator import (
40
42
  DeclarativePartitionFactory,
41
43
  StreamSlicerPartitionGenerator,
42
44
  )
45
+ from airbyte_cdk.sources.declarative.transformations.add_fields import AddFields
43
46
  from airbyte_cdk.sources.declarative.types import ConnectionDefinition
44
47
  from airbyte_cdk.sources.source import TState
45
48
  from airbyte_cdk.sources.streams import Stream
46
49
  from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream
47
- from airbyte_cdk.sources.streams.concurrent.abstract_stream_facade import AbstractStreamFacade
48
50
  from airbyte_cdk.sources.streams.concurrent.availability_strategy import (
49
51
  AlwaysAvailableAvailabilityStrategy,
50
52
  )
@@ -119,12 +121,6 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
119
121
  message_repository=self.message_repository,
120
122
  )
121
123
 
122
- # TODO: Remove this. This property is necessary to safely migrate Stripe during the transition state.
123
- @property
124
- def is_partially_declarative(self) -> bool:
125
- """This flag used to avoid unexpected AbstractStreamFacade processing as concurrent streams."""
126
- return False
127
-
128
124
  def read(
129
125
  self,
130
126
  logger: logging.Logger,
@@ -325,6 +321,9 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
325
321
  incremental_sync_component_definition
326
322
  and incremental_sync_component_definition.get("type", "")
327
323
  == DatetimeBasedCursorModel.__name__
324
+ and self._stream_supports_concurrent_partition_processing(
325
+ declarative_stream=declarative_stream
326
+ )
328
327
  and hasattr(declarative_stream.retriever, "stream_slicer")
329
328
  and isinstance(
330
329
  declarative_stream.retriever.stream_slicer, PerPartitionWithGlobalCursor
@@ -376,14 +375,6 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
376
375
  )
377
376
  else:
378
377
  synchronous_streams.append(declarative_stream)
379
- # TODO: Remove this. This check is necessary to safely migrate Stripe during the transition state.
380
- # Condition below needs to ensure that concurrent support is not lost for sources that already support
381
- # it before migration, but now are only partially migrated to declarative implementation (e.g., Stripe).
382
- elif (
383
- isinstance(declarative_stream, AbstractStreamFacade)
384
- and self.is_partially_declarative
385
- ):
386
- concurrent_streams.append(declarative_stream.get_underlying_stream())
387
378
  else:
388
379
  synchronous_streams.append(declarative_stream)
389
380
 
@@ -399,6 +390,9 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
399
390
  and bool(incremental_sync_component_definition)
400
391
  and incremental_sync_component_definition.get("type", "")
401
392
  == DatetimeBasedCursorModel.__name__
393
+ and self._stream_supports_concurrent_partition_processing(
394
+ declarative_stream=declarative_stream
395
+ )
402
396
  and hasattr(declarative_stream.retriever, "stream_slicer")
403
397
  and (
404
398
  isinstance(declarative_stream.retriever.stream_slicer, DatetimeBasedCursor)
@@ -406,6 +400,72 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
406
400
  )
407
401
  )
408
402
 
403
+ def _stream_supports_concurrent_partition_processing(
404
+ self, declarative_stream: DeclarativeStream
405
+ ) -> bool:
406
+ """
407
+ Many connectors make use of stream_state during interpolation on a per-partition basis under the assumption that
408
+ state is updated sequentially. Because the concurrent CDK engine processes different partitions in parallel,
409
+ stream_state is no longer a thread-safe interpolation context. It would be a race condition because a cursor's
410
+ stream_state can be updated in any order depending on which stream partition's finish first.
411
+
412
+ We should start to move away from depending on the value of stream_state for low-code components that operate
413
+ per-partition, but we need to gate this otherwise some connectors will be blocked from publishing. See the
414
+ cdk-migrations.md for the full list of connectors.
415
+ """
416
+
417
+ if isinstance(declarative_stream.retriever, SimpleRetriever) and isinstance(
418
+ declarative_stream.retriever.requester, HttpRequester
419
+ ):
420
+ http_requester = declarative_stream.retriever.requester
421
+ if "stream_state" in http_requester._path.string:
422
+ self.logger.warning(
423
+ f"Low-code stream '{declarative_stream.name}' uses interpolation of stream_state in the HttpRequester which is not thread-safe. Defaulting to synchronous processing"
424
+ )
425
+ return False
426
+
427
+ request_options_provider = http_requester._request_options_provider
428
+ if request_options_provider.request_options_contain_stream_state():
429
+ self.logger.warning(
430
+ f"Low-code stream '{declarative_stream.name}' uses interpolation of stream_state in the HttpRequester which is not thread-safe. Defaulting to synchronous processing"
431
+ )
432
+ return False
433
+
434
+ record_selector = declarative_stream.retriever.record_selector
435
+ if isinstance(record_selector, RecordSelector):
436
+ if (
437
+ record_selector.record_filter
438
+ and not isinstance(
439
+ record_selector.record_filter, ClientSideIncrementalRecordFilterDecorator
440
+ )
441
+ and "stream_state" in record_selector.record_filter.condition
442
+ ):
443
+ self.logger.warning(
444
+ f"Low-code stream '{declarative_stream.name}' uses interpolation of stream_state in the RecordFilter which is not thread-safe. Defaulting to synchronous processing"
445
+ )
446
+ return False
447
+
448
+ for add_fields in [
449
+ transformation
450
+ for transformation in record_selector.transformations
451
+ if isinstance(transformation, AddFields)
452
+ ]:
453
+ for field in add_fields.fields:
454
+ if isinstance(field.value, str) and "stream_state" in field.value:
455
+ self.logger.warning(
456
+ f"Low-code stream '{declarative_stream.name}' uses interpolation of stream_state in the AddFields which is not thread-safe. Defaulting to synchronous processing"
457
+ )
458
+ return False
459
+ if (
460
+ isinstance(field.value, InterpolatedString)
461
+ and "stream_state" in field.value.string
462
+ ):
463
+ self.logger.warning(
464
+ f"Low-code stream '{declarative_stream.name}' uses interpolation of stream_state in the AddFields which is not thread-safe. Defaulting to synchronous processing"
465
+ )
466
+ return False
467
+ return True
468
+
409
469
  @staticmethod
410
470
  def _get_retriever(
411
471
  declarative_stream: DeclarativeStream, stream_state: Mapping[str, Any]
@@ -82,6 +82,7 @@ definitions:
82
82
  - stream_interval
83
83
  - stream_partition
84
84
  - stream_slice
85
+ - stream_state
85
86
  examples:
86
87
  - "{{ record['updates'] }}"
87
88
  - "{{ record['MetaData']['LastUpdatedTime'] }}"
@@ -1490,11 +1491,7 @@ definitions:
1490
1491
  limit:
1491
1492
  title: Limit
1492
1493
  description: The maximum number of calls allowed within the interval.
1493
- anyOf:
1494
- - type: integer
1495
- - type: string
1496
- interpolation_context:
1497
- - config
1494
+ type: integer
1498
1495
  interval:
1499
1496
  title: Interval
1500
1497
  description: The time interval for the rate limit.
@@ -1779,6 +1776,7 @@ definitions:
1779
1776
  - stream_interval
1780
1777
  - stream_partition
1781
1778
  - stream_slice
1779
+ - stream_state
1782
1780
  examples:
1783
1781
  - "/products"
1784
1782
  - "/quotes/{{ stream_partition['id'] }}/quote_line_groups"
@@ -1828,6 +1826,7 @@ definitions:
1828
1826
  - stream_interval
1829
1827
  - stream_partition
1830
1828
  - stream_slice
1829
+ - stream_state
1831
1830
  examples:
1832
1831
  - |
1833
1832
  [{"clause": {"type": "timestamp", "operator": 10, "parameters":
@@ -1845,6 +1844,7 @@ definitions:
1845
1844
  - stream_interval
1846
1845
  - stream_partition
1847
1846
  - stream_slice
1847
+ - stream_state
1848
1848
  examples:
1849
1849
  - sort_order: "ASC"
1850
1850
  sort_field: "CREATED_AT"
@@ -1865,6 +1865,7 @@ definitions:
1865
1865
  - stream_interval
1866
1866
  - stream_partition
1867
1867
  - stream_slice
1868
+ - stream_state
1868
1869
  examples:
1869
1870
  - Output-Format: JSON
1870
1871
  - Version: "{{ config['version'] }}"
@@ -1881,6 +1882,7 @@ definitions:
1881
1882
  - stream_interval
1882
1883
  - stream_partition
1883
1884
  - stream_slice
1885
+ - stream_state
1884
1886
  examples:
1885
1887
  - unit: "day"
1886
1888
  - query: 'last_event_time BETWEEN TIMESTAMP "{{ stream_interval.start_time }}" AND TIMESTAMP "{{ stream_interval.end_time }}"'
@@ -2235,6 +2237,7 @@ definitions:
2235
2237
  interpolation_context:
2236
2238
  - config
2237
2239
  - record
2240
+ - stream_state
2238
2241
  - stream_slice
2239
2242
  new:
2240
2243
  type: string
@@ -2248,6 +2251,7 @@ definitions:
2248
2251
  interpolation_context:
2249
2252
  - config
2250
2253
  - record
2254
+ - stream_state
2251
2255
  - stream_slice
2252
2256
  $parameters:
2253
2257
  type: object
@@ -2897,6 +2901,7 @@ definitions:
2897
2901
  - stream_interval
2898
2902
  - stream_partition
2899
2903
  - stream_slice
2904
+ - stream_state
2900
2905
  examples:
2901
2906
  - "{{ record['created_at'] >= stream_interval['start_time'] }}"
2902
2907
  - "{{ record.status in ['active', 'expired'] }}"
@@ -3684,6 +3689,12 @@ interpolation:
3684
3689
  - title: stream_slice
3685
3690
  description: This variable is deprecated. Use stream_interval or stream_partition instead.
3686
3691
  type: object
3692
+ - title: stream_state
3693
+ description: The current state of the stream. The object's keys are defined by the incremental sync's cursor_field the and partition router's values.
3694
+ type: object
3695
+ examples:
3696
+ - created_at: "2020-01-01 00:00:00.000+00:00"
3697
+ - updated_at: "2020-01-02 00:00:00.000+00:00"
3687
3698
  macros:
3688
3699
  - title: now_utc
3689
3700
  description: Returns the current date and time in the UTC timezone.
@@ -3748,16 +3759,6 @@ interpolation:
3748
3759
  - "{{ format_datetime(config['start_time'], '%Y-%m-%d') }}"
3749
3760
  - "{{ format_datetime(config['start_date'], '%Y-%m-%dT%H:%M:%S.%fZ') }}"
3750
3761
  - "{{ format_datetime(config['start_date'], '%Y-%m-%dT%H:%M:%S.%fZ', '%a, %d %b %Y %H:%M:%S %z') }}"
3751
- - title: str_to_datetime
3752
- description: Converts a string to a datetime object with UTC timezone.
3753
- arguments:
3754
- s: The string to convert.
3755
- return_type: datetime.datetime
3756
- examples:
3757
- - "{{ str_to_datetime('2022-01-14') }}"
3758
- - "{{ str_to_datetime('2022-01-01 13:45:30') }}"
3759
- - "{{ str_to_datetime('2022-01-01T13:45:30+00:00') }}"
3760
- - "{{ str_to_datetime('2022-01-01T13:45:30.123456Z') }}"
3761
3762
  filters:
3762
3763
  - title: hash
3763
3764
  description: Convert the specified value to a hashed string.
@@ -107,16 +107,6 @@ class CsvParser(Parser):
107
107
  encoding: Optional[str] = "utf-8"
108
108
  delimiter: Optional[str] = ","
109
109
 
110
- def _get_delimiter(self) -> Optional[str]:
111
- """
112
- Get delimiter from the configuration. Check for the escape character and decode it.
113
- """
114
- if self.delimiter is not None:
115
- if self.delimiter.startswith("\\"):
116
- self.delimiter = self.delimiter.encode("utf-8").decode("unicode_escape")
117
-
118
- return self.delimiter
119
-
120
110
  def parse(
121
111
  self,
122
112
  data: BufferedIOBase,
@@ -125,7 +115,7 @@ class CsvParser(Parser):
125
115
  Parse CSV data from decompressed bytes.
126
116
  """
127
117
  text_data = TextIOWrapper(data, encoding=self.encoding) # type: ignore
128
- reader = csv.DictReader(text_data, delimiter=self._get_delimiter() or ",")
118
+ reader = csv.DictReader(text_data, delimiter=self.delimiter or ",")
129
119
  yield from reader
130
120
 
131
121
 
@@ -95,6 +95,10 @@ class ConcurrentPerPartitionCursor(Cursor):
95
95
  # the oldest partitions can be efficiently removed, maintaining the most recent partitions.
96
96
  self._cursor_per_partition: OrderedDict[str, ConcurrentCursor] = OrderedDict()
97
97
  self._semaphore_per_partition: OrderedDict[str, threading.Semaphore] = OrderedDict()
98
+
99
+ # Parent-state tracking: store each partition’s parent state in creation order
100
+ self._partition_parent_state_map: OrderedDict[str, Mapping[str, Any]] = OrderedDict()
101
+
98
102
  self._finished_partitions: set[str] = set()
99
103
  self._lock = threading.Lock()
100
104
  self._timer = Timer()
@@ -155,11 +159,62 @@ class ConcurrentPerPartitionCursor(Cursor):
155
159
  and self._semaphore_per_partition[partition_key]._value == 0
156
160
  ):
157
161
  self._update_global_cursor(cursor.state[self.cursor_field.cursor_field_key])
158
- self._emit_state_message()
162
+
163
+ self._check_and_update_parent_state()
164
+
165
+ self._emit_state_message()
166
+
167
+ def _check_and_update_parent_state(self) -> None:
168
+ """
169
+ Pop the leftmost partition state from _partition_parent_state_map only if
170
+ *all partitions* up to (and including) that partition key in _semaphore_per_partition
171
+ are fully finished (i.e. in _finished_partitions and semaphore._value == 0).
172
+ Additionally, delete finished semaphores with a value of 0 to free up memory,
173
+ as they are only needed to track errors and completion status.
174
+ """
175
+ last_closed_state = None
176
+
177
+ while self._partition_parent_state_map:
178
+ # Look at the earliest partition key in creation order
179
+ earliest_key = next(iter(self._partition_parent_state_map))
180
+
181
+ # Verify ALL partitions from the left up to earliest_key are finished
182
+ all_left_finished = True
183
+ for p_key, sem in list(
184
+ self._semaphore_per_partition.items()
185
+ ): # Use list to allow modification during iteration
186
+ # If any earlier partition is still not finished, we must stop
187
+ if p_key not in self._finished_partitions or sem._value != 0:
188
+ all_left_finished = False
189
+ break
190
+ # Once we've reached earliest_key in the semaphore order, we can stop checking
191
+ if p_key == earliest_key:
192
+ break
193
+
194
+ # If the partitions up to earliest_key are not all finished, break the while-loop
195
+ if not all_left_finished:
196
+ break
197
+
198
+ # Pop the leftmost entry from parent-state map
199
+ _, closed_parent_state = self._partition_parent_state_map.popitem(last=False)
200
+ last_closed_state = closed_parent_state
201
+
202
+ # Clean up finished semaphores with value 0 up to and including earliest_key
203
+ for p_key in list(self._semaphore_per_partition.keys()):
204
+ sem = self._semaphore_per_partition[p_key]
205
+ if p_key in self._finished_partitions and sem._value == 0:
206
+ del self._semaphore_per_partition[p_key]
207
+ logger.debug(f"Deleted finished semaphore for partition {p_key} with value 0")
208
+ if p_key == earliest_key:
209
+ break
210
+
211
+ # Update _parent_state if we popped at least one partition
212
+ if last_closed_state is not None:
213
+ self._parent_state = last_closed_state
159
214
 
160
215
  def ensure_at_least_one_state_emitted(self) -> None:
161
216
  """
162
- The platform expect to have at least one state message on successful syncs. Hence, whatever happens, we expect this method to be
217
+ The platform expects at least one state message on successful syncs. Hence, whatever happens, we expect this method to be
163
218
  called.
164
219
  """
165
220
  if not any(
@@ -196,18 +251,25 @@ class ConcurrentPerPartitionCursor(Cursor):
196
251
  self._message_repository.emit_message(state_message)
197
252
 
198
253
  def stream_slices(self) -> Iterable[StreamSlice]:
254
+ print("stream_slices")
199
255
  if self._timer.is_running():
200
256
  raise RuntimeError("stream_slices has been executed more than once.")
201
257
 
202
258
  slices = self._partition_router.stream_slices()
203
259
  self._timer.start()
204
- for partition in slices:
205
- yield from self._generate_slices_from_partition(partition)
260
+ for partition, last, parent_state in iterate_with_last_flag_and_state(
261
+ slices, self._partition_router.get_stream_state
262
+ ):
263
+ yield from self._generate_slices_from_partition(partition, parent_state)
206
264
 
207
- def _generate_slices_from_partition(self, partition: StreamSlice) -> Iterable[StreamSlice]:
265
+ def _generate_slices_from_partition(
266
+ self, partition: StreamSlice, parent_state: Mapping[str, Any]
267
+ ) -> Iterable[StreamSlice]:
208
268
  # Ensure the maximum number of partitions is not exceeded
209
269
  self._ensure_partition_limit()
210
270
 
271
+ partition_key = self._to_partition_key(partition.partition)
272
+
211
273
  cursor = self._cursor_per_partition.get(self._to_partition_key(partition.partition))
212
274
  if not cursor:
213
275
  cursor = self._create_cursor(
@@ -216,18 +278,26 @@ class ConcurrentPerPartitionCursor(Cursor):
216
278
  )
217
279
  with self._lock:
218
280
  self._number_of_partitions += 1
219
- self._cursor_per_partition[self._to_partition_key(partition.partition)] = cursor
220
- self._semaphore_per_partition[self._to_partition_key(partition.partition)] = (
221
- threading.Semaphore(0)
222
- )
281
+ self._cursor_per_partition[partition_key] = cursor
282
+ self._semaphore_per_partition[partition_key] = threading.Semaphore(0)
283
+
284
+ with self._lock:
285
+ if (
286
+ len(self._partition_parent_state_map) == 0
287
+ or self._partition_parent_state_map[
288
+ next(reversed(self._partition_parent_state_map))
289
+ ]
290
+ != parent_state
291
+ ):
292
+ self._partition_parent_state_map[partition_key] = deepcopy(parent_state)
223
293
 
224
294
  for cursor_slice, is_last_slice, _ in iterate_with_last_flag_and_state(
225
295
  cursor.stream_slices(),
226
296
  lambda: None,
227
297
  ):
228
- self._semaphore_per_partition[self._to_partition_key(partition.partition)].release()
298
+ self._semaphore_per_partition[partition_key].release()
229
299
  if is_last_slice:
230
- self._finished_partitions.add(self._to_partition_key(partition.partition))
300
+ self._finished_partitions.add(partition_key)
231
301
  yield StreamSlice(
232
302
  partition=partition, cursor_slice=cursor_slice, extra_fields=partition.extra_fields
233
303
  )
@@ -257,9 +327,9 @@ class ConcurrentPerPartitionCursor(Cursor):
257
327
  while len(self._cursor_per_partition) > self.DEFAULT_MAX_PARTITIONS_NUMBER - 1:
258
328
  # Try removing finished partitions first
259
329
  for partition_key in list(self._cursor_per_partition.keys()):
260
- if (
261
- partition_key in self._finished_partitions
262
- and self._semaphore_per_partition[partition_key]._value == 0
330
+ if partition_key in self._finished_partitions and (
331
+ partition_key not in self._semaphore_per_partition
332
+ or self._semaphore_per_partition[partition_key]._value == 0
263
333
  ):
264
334
  oldest_partition = self._cursor_per_partition.pop(
265
335
  partition_key
@@ -338,9 +408,6 @@ class ConcurrentPerPartitionCursor(Cursor):
338
408
  self._cursor_per_partition[self._to_partition_key(state["partition"])] = (
339
409
  self._create_cursor(state["cursor"])
340
410
  )
341
- self._semaphore_per_partition[self._to_partition_key(state["partition"])] = (
342
- threading.Semaphore(0)
343
- )
344
411
 
345
412
  # set default state for missing partitions if it is per partition with fallback to global
346
413
  if self._GLOBAL_STATE_KEY in stream_state:
@@ -115,9 +115,7 @@ class GlobalSubstreamCursor(DeclarativeCursor):
115
115
  * Yield the last slice. At that point, once there are as many slices yielded as closes, the global slice will be closed too
116
116
  """
117
117
  slice_generator = (
118
- StreamSlice(
119
- partition=partition, cursor_slice=cursor_slice, extra_fields=partition.extra_fields
120
- )
118
+ StreamSlice(partition=partition, cursor_slice=cursor_slice)
121
119
  for partition in self._partition_router.stream_slices()
122
120
  for cursor_slice in self._stream_cursor.stream_slices()
123
121
  )
@@ -133,9 +131,7 @@ class GlobalSubstreamCursor(DeclarativeCursor):
133
131
 
134
132
  def generate_slices_from_partition(self, partition: StreamSlice) -> Iterable[StreamSlice]:
135
133
  slice_generator = (
136
- StreamSlice(
137
- partition=partition, cursor_slice=cursor_slice, extra_fields=partition.extra_fields
138
- )
134
+ StreamSlice(partition=partition, cursor_slice=cursor_slice)
139
135
  for cursor_slice in self._stream_cursor.stream_slices()
140
136
  )
141
137
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
  from airbyte_cdk.sources.declarative.interpolation.interpolated_boolean import InterpolatedBoolean
@@ -1,7 +1,6 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
-
5
4
  import base64
6
5
  import hashlib
7
6
  import json
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
  from dataclasses import InitVar, dataclass
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
  from dataclasses import InitVar, dataclass
@@ -1,8 +1,7 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
-
6
5
  from abc import ABC, abstractmethod
7
6
  from typing import Any, Optional
8
7
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
  import ast
@@ -11,12 +11,10 @@ from jinja2.environment import Template
11
11
  from jinja2.exceptions import UndefinedError
12
12
  from jinja2.sandbox import SandboxedEnvironment
13
13
 
14
- from airbyte_cdk.models import FailureType
15
14
  from airbyte_cdk.sources.declarative.interpolation.filters import filters
16
15
  from airbyte_cdk.sources.declarative.interpolation.interpolation import Interpolation
17
16
  from airbyte_cdk.sources.declarative.interpolation.macros import macros
18
17
  from airbyte_cdk.sources.types import Config
19
- from airbyte_cdk.utils import AirbyteTracedException
20
18
 
21
19
 
22
20
  class StreamPartitionAccessEnvironment(SandboxedEnvironment):
@@ -38,10 +36,6 @@ _ALIASES = {
38
36
  "stream_partition": "stream_slice", # Use stream_partition to access partition router's values
39
37
  }
40
38
 
41
- _UNSUPPORTED_INTERPOLATION_VARIABLES: Mapping[str, str] = {
42
- "stream_state": "`stream_state` is no longer supported for interpolation. We recommend using `stream_interval` instead. Please reference the CDK Migration Guide for more information.",
43
- }
44
-
45
39
  # These extensions are not installed so they're not currently a problem,
46
40
  # but we're still explicitly removing them from the jinja context.
47
41
  # At worst, this is documentation that we do NOT want to include these extensions because of the potential security risks
@@ -101,13 +95,6 @@ class JinjaInterpolation(Interpolation):
101
95
  elif equivalent in context:
102
96
  context[alias] = context[equivalent]
103
97
 
104
- for variable_name in _UNSUPPORTED_INTERPOLATION_VARIABLES:
105
- if variable_name in input_str:
106
- raise AirbyteTracedException(
107
- message=_UNSUPPORTED_INTERPOLATION_VARIABLES[variable_name],
108
- internal_message=_UNSUPPORTED_INTERPOLATION_VARIABLES[variable_name],
109
- failure_type=FailureType.config_error,
110
- )
111
98
  try:
112
99
  if isinstance(input_str, str):
113
100
  result = self._eval(input_str, context)
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
5
  import builtins
@@ -63,24 +63,10 @@ def timestamp(dt: Union[float, str]) -> Union[int, float]:
63
63
  if isinstance(dt, (int, float)):
64
64
  return int(dt)
65
65
  else:
66
- return str_to_datetime(dt).astimezone(pytz.utc).timestamp()
66
+ return _str_to_datetime(dt).astimezone(pytz.utc).timestamp()
67
67
 
68
68
 
69
- def str_to_datetime(s: str) -> datetime.datetime:
70
- """
71
- Converts a string to a datetime object with UTC timezone
72
-
73
- If the input string does not contain timezone information, UTC is assumed.
74
- Supports both basic date strings like "2022-01-14" and datetime strings with optional timezone
75
- like "2022-01-01T13:45:30+00:00".
76
-
77
- Usage:
78
- `"{{ str_to_datetime('2022-01-14') }}"`
79
-
80
- :param s: string to parse as datetime
81
- :return: datetime object in UTC timezone
82
- """
83
-
69
+ def _str_to_datetime(s: str) -> datetime.datetime:
84
70
  parsed_date = parser.isoparse(s)
85
71
  if not parsed_date.tzinfo:
86
72
  # Assume UTC if the input does not contain a timezone
@@ -169,7 +155,7 @@ def format_datetime(
169
155
  if isinstance(dt, datetime.datetime):
170
156
  return dt.strftime(format)
171
157
  dt_datetime = (
172
- datetime.datetime.strptime(dt, input_format) if input_format else str_to_datetime(dt)
158
+ datetime.datetime.strptime(dt, input_format) if input_format else _str_to_datetime(dt)
173
159
  )
174
160
  if format == "%s":
175
161
  return str(int(dt_datetime.timestamp()))
@@ -186,6 +172,5 @@ _macros_list = [
186
172
  duration,
187
173
  format_datetime,
188
174
  today_with_timezone,
189
- str_to_datetime,
190
175
  ]
191
176
  macros = {f.__name__: f for f in _macros_list}
@@ -646,7 +646,7 @@ class Rate(BaseModel):
646
646
  class Config:
647
647
  extra = Extra.allow
648
648
 
649
- limit: Union[int, str] = Field(
649
+ limit: int = Field(
650
650
  ...,
651
651
  description="The maximum number of calls allowed within the interval.",
652
652
  title="Limit",
@@ -3024,9 +3024,8 @@ class ModelToComponentFactory:
3024
3024
  )
3025
3025
 
3026
3026
  def create_rate(self, model: RateModel, config: Config, **kwargs: Any) -> Rate:
3027
- interpolated_limit = InterpolatedString.create(str(model.limit), parameters={})
3028
3027
  return Rate(
3029
- limit=int(interpolated_limit.eval(config=config)),
3028
+ limit=model.limit,
3030
3029
  interval=parse_duration(model.interval),
3031
3030
  )
3032
3031
 
@@ -123,6 +123,7 @@ class HttpRequester(Requester):
123
123
  next_page_token: Optional[Mapping[str, Any]],
124
124
  ) -> str:
125
125
  kwargs = {
126
+ "stream_state": stream_state,
126
127
  "stream_slice": stream_slice,
127
128
  "next_page_token": next_page_token,
128
129
  }