airbyte-cdk 6.41.2.dev0__tar.gz → 6.41.4__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 (366) hide show
  1. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +38 -10
  3. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +10 -45
  4. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +1 -2
  5. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +7 -42
  6. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +24 -41
  7. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -4
  8. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +55 -5
  9. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -7
  10. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/mock_http/mocker.py +13 -8
  11. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/pyproject.toml +1 -1
  12. airbyte_cdk-6.41.2.dev0/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -150
  13. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/LICENSE.txt +0 -0
  14. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/LICENSE_SHORT +0 -0
  15. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/README.md +0 -0
  16. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/__init__.py +0 -0
  17. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/cli/__init__.py +0 -0
  18. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  19. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  20. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  21. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/config_observation.py +0 -0
  22. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector.py +0 -0
  23. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/README.md +0 -0
  24. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/__init__.py +0 -0
  25. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  26. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/main.py +0 -0
  27. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/models.py +0 -0
  28. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  29. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  30. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  31. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  32. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  33. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/__init__.py +0 -0
  34. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/destination.py +0 -0
  35. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  36. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  37. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  38. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  39. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  40. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  41. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  42. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  43. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  44. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/entrypoint.py +0 -0
  45. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/exception_handler.py +0 -0
  46. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/logger.py +0 -0
  47. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/models/__init__.py +0 -0
  48. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  49. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  50. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  51. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/models/well_known_types.py +0 -0
  52. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/py.typed +0 -0
  53. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/__init__.py +0 -0
  54. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/abstract_source.py +0 -0
  55. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  56. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  57. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  58. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  59. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  60. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  61. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  62. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/config.py +0 -0
  63. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  64. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  65. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  66. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  67. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  68. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  69. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  70. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  71. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  72. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  73. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  74. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  75. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  76. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  77. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  78. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  79. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  80. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  81. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  82. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  83. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  84. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  85. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  86. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  87. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  88. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  89. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  90. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  91. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  92. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  93. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
  94. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  95. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  96. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  97. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  98. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  99. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  100. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  101. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  102. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  103. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  104. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  105. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  106. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  107. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  108. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  109. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  110. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  111. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  112. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  113. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  114. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  115. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  116. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  117. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  118. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  119. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  120. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  121. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  122. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  123. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  124. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  125. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  126. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  127. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  128. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  129. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  130. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  131. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  132. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  133. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  134. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  135. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  136. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  137. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  138. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  139. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  140. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  141. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  142. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  143. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  144. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  145. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  146. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  147. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  148. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  149. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  150. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  151. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  152. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  153. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  154. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  155. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  156. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  157. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  158. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  159. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  160. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  161. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  162. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  163. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  164. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  165. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  166. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  167. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  168. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  169. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  170. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  171. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  172. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  173. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  174. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  175. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  176. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  177. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  178. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  179. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  180. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  181. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  182. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  183. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  184. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  185. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  186. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  187. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  188. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  189. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  190. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  191. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  192. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  193. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  194. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  195. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  196. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  197. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  198. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  199. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  200. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  201. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  202. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  203. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/types.py +0 -0
  204. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  205. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/README.md +0 -0
  206. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  207. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  208. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  209. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  210. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  211. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  212. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  213. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  214. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  215. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  216. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  217. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  218. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  219. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  220. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  221. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  222. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  223. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  224. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  225. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
  226. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  227. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  228. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  229. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  230. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  231. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  232. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  233. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  234. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  235. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  236. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  237. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  238. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  239. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  240. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  241. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  242. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  243. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  244. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  245. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  246. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  247. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  248. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  249. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  250. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  251. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  252. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  253. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  254. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  255. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/file_based/types.py +0 -0
  256. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/http_config.py +0 -0
  257. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/http_logger.py +0 -0
  258. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/message/__init__.py +0 -0
  259. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/message/repository.py +0 -0
  260. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/source.py +0 -0
  261. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  262. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/__init__.py +0 -0
  263. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  264. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  265. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  266. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  267. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  268. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  269. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  270. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  271. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  272. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  273. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  274. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  275. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  276. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  277. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  278. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  279. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  280. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  281. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  282. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  283. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  284. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  285. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  286. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  287. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  288. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  289. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  290. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  291. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  292. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  293. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  294. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/core.py +0 -0
  295. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  296. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  297. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  298. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  299. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  300. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  301. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  302. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  303. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  304. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  305. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  306. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  307. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/http.py +0 -0
  308. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  309. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  310. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  311. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  312. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  313. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  314. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  315. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  316. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  317. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/types.py +0 -0
  318. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/__init__.py +0 -0
  319. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/casing.py +0 -0
  320. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  321. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  322. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  323. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/transform.py +0 -0
  324. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sources/utils/types.py +0 -0
  325. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/__init__.py +0 -0
  326. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/_util/__init__.py +0 -0
  327. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/_util/hashing.py +0 -0
  328. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  329. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/constants.py +0 -0
  330. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/exceptions.py +0 -0
  331. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/secrets.py +0 -0
  332. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/shared/__init__.py +0 -0
  333. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  334. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  335. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/sql/types.py +0 -0
  336. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/__init__.py +0 -0
  337. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/catalog_builder.py +0 -0
  338. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  339. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  340. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  341. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/mock_http/request.py +0 -0
  342. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/mock_http/response.py +0 -0
  343. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  344. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/state_builder.py +0 -0
  345. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/utils/__init__.py +0 -0
  346. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/utils/data.py +0 -0
  347. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  348. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  349. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/test/utils/reading.py +0 -0
  350. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/__init__.py +0 -0
  351. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  352. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/analytics_message.py +0 -0
  353. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/constants.py +0 -0
  354. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  355. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  356. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/event_timing.py +0 -0
  357. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  358. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  359. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/message_utils.py +0 -0
  360. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  361. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/print_buffer.py +0 -0
  362. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  363. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/slice_hasher.py +0 -0
  364. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  365. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  366. {airbyte_cdk-6.41.2.dev0 → airbyte_cdk-6.41.4}/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.41.2.dev0
3
+ Version: 6.41.4
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -179,7 +179,7 @@ class AsyncJobOrchestrator:
179
179
  self._non_breaking_exceptions: List[Exception] = []
180
180
 
181
181
  def _replace_failed_jobs(self, partition: AsyncPartition) -> None:
182
- failed_status_jobs = (AsyncJobStatus.FAILED, AsyncJobStatus.TIMED_OUT)
182
+ failed_status_jobs = (AsyncJobStatus.FAILED,)
183
183
  jobs_to_replace = [job for job in partition.jobs if job.status() in failed_status_jobs]
184
184
  for job in jobs_to_replace:
185
185
  new_job = self._start_job(job.job_parameters(), job.api_job_id())
@@ -359,14 +359,11 @@ class AsyncJobOrchestrator:
359
359
  self._process_partitions_with_errors(partition)
360
360
  case _:
361
361
  self._stop_timed_out_jobs(partition)
362
+ # re-allocate FAILED jobs, but TIMEOUT jobs are not re-allocated
363
+ self._reallocate_partition(current_running_partitions, partition)
362
364
 
363
- # job will be restarted in `_start_job`
364
- current_running_partitions.insert(0, partition)
365
-
366
- for job in partition.jobs:
367
- # We only remove completed jobs as we want failed/timed out jobs to be re-allocated in priority
368
- if job.status() == AsyncJobStatus.COMPLETED:
369
- self._job_tracker.remove_job(job.api_job_id())
365
+ # We only remove completed / timeout jobs jobs as we want failed jobs to be re-allocated in priority
366
+ self._remove_completed_or_timed_out_jobs(partition)
370
367
 
371
368
  # update the referenced list with running partitions
372
369
  self._running_partitions = current_running_partitions
@@ -381,8 +378,11 @@ class AsyncJobOrchestrator:
381
378
  def _stop_timed_out_jobs(self, partition: AsyncPartition) -> None:
382
379
  for job in partition.jobs:
383
380
  if job.status() == AsyncJobStatus.TIMED_OUT:
384
- # we don't free allocation here because it is expected to retry the job
385
- self._abort_job(job, free_job_allocation=False)
381
+ self._abort_job(job, free_job_allocation=True)
382
+ raise AirbyteTracedException(
383
+ internal_message=f"Job {job.api_job_id()} has timed out. Try increasing the `polling job timeout`.",
384
+ failure_type=FailureType.config_error,
385
+ )
386
386
 
387
387
  def _abort_job(self, job: AsyncJob, free_job_allocation: bool = True) -> None:
388
388
  try:
@@ -392,6 +392,34 @@ class AsyncJobOrchestrator:
392
392
  except Exception as exception:
393
393
  LOGGER.warning(f"Could not free budget for job {job.api_job_id()}: {exception}")
394
394
 
395
+ def _remove_completed_or_timed_out_jobs(self, partition: AsyncPartition) -> None:
396
+ """
397
+ Remove completed or timed out jobs from the partition.
398
+
399
+ Args:
400
+ partition (AsyncPartition): The partition to process.
401
+ """
402
+ for job in partition.jobs:
403
+ if job.status() in [AsyncJobStatus.COMPLETED, AsyncJobStatus.TIMED_OUT]:
404
+ self._job_tracker.remove_job(job.api_job_id())
405
+
406
+ def _reallocate_partition(
407
+ self,
408
+ current_running_partitions: List[AsyncPartition],
409
+ partition: AsyncPartition,
410
+ ) -> None:
411
+ """
412
+ Reallocate the partition by starting a new job for each job in the
413
+ partition.
414
+ Args:
415
+ current_running_partitions (list): The list of currently running partitions.
416
+ partition (AsyncPartition): The partition to reallocate.
417
+ """
418
+ for job in partition.jobs:
419
+ if job.status() != AsyncJobStatus.TIMED_OUT:
420
+ # allow the FAILED jobs to be re-allocated for partition
421
+ current_running_partitions.insert(0, partition)
422
+
395
423
  def _process_partitions_with_errors(self, partition: AsyncPartition) -> None:
396
424
  """
397
425
  Process a partition with status errors (FAILED and TIMEOUT).
@@ -2894,7 +2894,7 @@ definitions:
2894
2894
  title: Lazy Read Pointer
2895
2895
  description: If set, this will enable lazy reading, using the initial read of parent records to extract child records.
2896
2896
  type: array
2897
- default: []
2897
+ default: [ ]
2898
2898
  items:
2899
2899
  - type: string
2900
2900
  interpolation_context:
@@ -3199,7 +3199,7 @@ definitions:
3199
3199
  properties:
3200
3200
  type:
3201
3201
  type: string
3202
- enum: [StateDelegatingStream]
3202
+ enum: [ StateDelegatingStream ]
3203
3203
  name:
3204
3204
  title: Name
3205
3205
  description: The stream name.
@@ -3254,14 +3254,12 @@ definitions:
3254
3254
  - "$ref": "#/definitions/CustomPartitionRouter"
3255
3255
  - "$ref": "#/definitions/ListPartitionRouter"
3256
3256
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3257
- - "$ref": "#/definitions/GroupingPartitionRouter"
3258
3257
  - type: array
3259
3258
  items:
3260
3259
  anyOf:
3261
3260
  - "$ref": "#/definitions/CustomPartitionRouter"
3262
3261
  - "$ref": "#/definitions/ListPartitionRouter"
3263
3262
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3264
- - "$ref": "#/definitions/GroupingPartitionRouter"
3265
3263
  decoder:
3266
3264
  title: Decoder
3267
3265
  description: Component decoding the response so records can be extracted.
@@ -3335,7 +3333,7 @@ definitions:
3335
3333
  items:
3336
3334
  type: string
3337
3335
  AsyncRetriever:
3338
- description: "[Experimental - We expect the interface to change shortly and we reserve the right to not consider this a breaking change] Retrieves records by Asynchronously sending requests to fetch records. The retriever acts as an orchestrator between the requester, the record selector, the paginator, and the partition router."
3336
+ description: "Retrieves records by Asynchronously sending requests to fetch records. The retriever acts as an orchestrator between the requester, the record selector, the paginator, and the partition router."
3339
3337
  type: object
3340
3338
  required:
3341
3339
  - type
@@ -3383,6 +3381,13 @@ definitions:
3383
3381
  anyOf:
3384
3382
  - "$ref": "#/definitions/CustomRequester"
3385
3383
  - "$ref": "#/definitions/HttpRequester"
3384
+ polling_job_timeout:
3385
+ description: The time in minutes after which the single Async Job should be considered as Timed Out.
3386
+ anyOf:
3387
+ - type: integer
3388
+ - type: string
3389
+ interpolation_context:
3390
+ - config
3386
3391
  download_target_requester:
3387
3392
  description: Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.
3388
3393
  anyOf:
@@ -3416,14 +3421,12 @@ definitions:
3416
3421
  - "$ref": "#/definitions/CustomPartitionRouter"
3417
3422
  - "$ref": "#/definitions/ListPartitionRouter"
3418
3423
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3419
- - "$ref": "#/definitions/GroupingPartitionRouter"
3420
3424
  - type: array
3421
3425
  items:
3422
3426
  anyOf:
3423
3427
  - "$ref": "#/definitions/CustomPartitionRouter"
3424
3428
  - "$ref": "#/definitions/ListPartitionRouter"
3425
3429
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3426
- - "$ref": "#/definitions/GroupingPartitionRouter"
3427
3430
  decoder:
3428
3431
  title: Decoder
3429
3432
  description: Component decoding the response so records can be extracted.
@@ -3540,44 +3543,6 @@ definitions:
3540
3543
  $parameters:
3541
3544
  type: object
3542
3545
  additionalProperties: true
3543
- GroupingPartitionRouter:
3544
- title: Grouping Partition Router
3545
- description: >
3546
- A decorator on top of a partition router that groups partitions into batches of a specified size.
3547
- This is useful for APIs that support filtering by multiple partition keys in a single request.
3548
- Note that per-partition incremental syncs may not work as expected because the grouping
3549
- of partitions might change between syncs, potentially leading to inconsistent state tracking.
3550
- type: object
3551
- required:
3552
- - type
3553
- - group_size
3554
- - underlying_partition_router
3555
- properties:
3556
- type:
3557
- type: string
3558
- enum: [GroupingPartitionRouter]
3559
- group_size:
3560
- title: Group Size
3561
- description: The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.
3562
- type: integer
3563
- examples:
3564
- - 10
3565
- - 50
3566
- underlying_partition_router:
3567
- title: Underlying Partition Router
3568
- description: The partition router whose output will be grouped. This can be any valid partition router component.
3569
- anyOf:
3570
- - "$ref": "#/definitions/CustomPartitionRouter"
3571
- - "$ref": "#/definitions/ListPartitionRouter"
3572
- - "$ref": "#/definitions/SubstreamPartitionRouter"
3573
- deduplicate:
3574
- title: Deduplicate Partitions
3575
- description: If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.
3576
- type: boolean
3577
- default: true
3578
- $parameters:
3579
- type: object
3580
- additionalProperties: true
3581
3546
  WaitUntilTimeFromHeader:
3582
3547
  title: Wait Until Time Defined In Response Header
3583
3548
  description: Extract time at which we can retry the request from response header and wait for the difference between now and that time.
@@ -79,7 +79,6 @@ class ConcurrentPerPartitionCursor(Cursor):
79
79
  connector_state_manager: ConnectorStateManager,
80
80
  connector_state_converter: AbstractStreamStateConverter,
81
81
  cursor_field: CursorField,
82
- use_global_cursor: bool = False,
83
82
  ) -> None:
84
83
  self._global_cursor: Optional[StreamState] = {}
85
84
  self._stream_name = stream_name
@@ -107,7 +106,7 @@ class ConcurrentPerPartitionCursor(Cursor):
107
106
  self._lookback_window: int = 0
108
107
  self._parent_state: Optional[StreamState] = None
109
108
  self._number_of_partitions: int = 0
110
- self._use_global_cursor: bool = use_global_cursor
109
+ self._use_global_cursor: bool = False
111
110
  self._partition_serializer = PerPartitionKeySerializer()
112
111
  # Track the last time a state message was emitted
113
112
  self._last_emission_time: float = 0.0
@@ -1467,7 +1467,7 @@ class AddFields(BaseModel):
1467
1467
  )
1468
1468
  condition: Optional[str] = Field(
1469
1469
  "",
1470
- description="Fields will be added if expression is evaluated to True.,",
1470
+ description="Fields will be added if expression is evaluated to True.",
1471
1471
  examples=[
1472
1472
  "{{ property|string == '' }}",
1473
1473
  "{{ property is integer }}",
@@ -2301,15 +2301,7 @@ class SimpleRetriever(BaseModel):
2301
2301
  CustomPartitionRouter,
2302
2302
  ListPartitionRouter,
2303
2303
  SubstreamPartitionRouter,
2304
- GroupingPartitionRouter,
2305
- List[
2306
- Union[
2307
- CustomPartitionRouter,
2308
- ListPartitionRouter,
2309
- SubstreamPartitionRouter,
2310
- GroupingPartitionRouter,
2311
- ]
2312
- ],
2304
+ List[Union[CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter]],
2313
2305
  ]
2314
2306
  ] = Field(
2315
2307
  [],
@@ -2362,6 +2354,10 @@ class AsyncRetriever(BaseModel):
2362
2354
  ...,
2363
2355
  description="Requester component that describes how to prepare HTTP requests to send to the source API to fetch the status of the running async job.",
2364
2356
  )
2357
+ polling_job_timeout: Optional[Union[int, str]] = Field(
2358
+ None,
2359
+ description="The time in minutes after which the single Async Job should be considered as Timed Out.",
2360
+ )
2365
2361
  download_target_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
2366
2362
  None,
2367
2363
  description="Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.",
@@ -2387,15 +2383,7 @@ class AsyncRetriever(BaseModel):
2387
2383
  CustomPartitionRouter,
2388
2384
  ListPartitionRouter,
2389
2385
  SubstreamPartitionRouter,
2390
- GroupingPartitionRouter,
2391
- List[
2392
- Union[
2393
- CustomPartitionRouter,
2394
- ListPartitionRouter,
2395
- SubstreamPartitionRouter,
2396
- GroupingPartitionRouter,
2397
- ]
2398
- ],
2386
+ List[Union[CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter]],
2399
2387
  ]
2400
2388
  ] = Field(
2401
2389
  [],
@@ -2447,29 +2435,6 @@ class SubstreamPartitionRouter(BaseModel):
2447
2435
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
2448
2436
 
2449
2437
 
2450
- class GroupingPartitionRouter(BaseModel):
2451
- type: Literal["GroupingPartitionRouter"]
2452
- group_size: int = Field(
2453
- ...,
2454
- description="The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.",
2455
- examples=[10, 50],
2456
- title="Group Size",
2457
- )
2458
- underlying_partition_router: Union[
2459
- CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter
2460
- ] = Field(
2461
- ...,
2462
- description="The partition router whose output will be grouped. This can be any valid partition router component.",
2463
- title="Underlying Partition Router",
2464
- )
2465
- deduplicate: Optional[bool] = Field(
2466
- True,
2467
- description="If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.",
2468
- title="Deduplicate Partitions",
2469
- )
2470
- parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
2471
-
2472
-
2473
2438
  class HttpComponentsResolver(BaseModel):
2474
2439
  type: Literal["HttpComponentsResolver"]
2475
2440
  retriever: Union[AsyncRetriever, CustomRetriever, SimpleRetriever] = Field(
@@ -227,9 +227,6 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
227
227
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
228
228
  FlattenFields as FlattenFieldsModel,
229
229
  )
230
- from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
231
- GroupingPartitionRouter as GroupingPartitionRouterModel,
232
- )
233
230
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
234
231
  GzipDecoder as GzipDecoderModel,
235
232
  )
@@ -388,7 +385,6 @@ from airbyte_cdk.sources.declarative.parsers.custom_code_compiler import (
388
385
  )
389
386
  from airbyte_cdk.sources.declarative.partition_routers import (
390
387
  CartesianProductStreamSlicer,
391
- GroupingPartitionRouter,
392
388
  ListPartitionRouter,
393
389
  PartitionRouter,
394
390
  SinglePartitionRouter,
@@ -511,7 +507,7 @@ from airbyte_cdk.sources.streams.concurrent.state_converters.incrementing_count_
511
507
  IncrementingCountStreamStateConverter,
512
508
  )
513
509
  from airbyte_cdk.sources.streams.http.error_handlers.response_models import ResponseAction
514
- from airbyte_cdk.sources.types import Config, ConnectionDefinition
510
+ from airbyte_cdk.sources.types import Config
515
511
  from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer
516
512
 
517
513
  ComponentDefinition = Mapping[str, Any]
@@ -642,7 +638,6 @@ class ModelToComponentFactory:
642
638
  UnlimitedCallRatePolicyModel: self.create_unlimited_call_rate_policy,
643
639
  RateModel: self.create_rate,
644
640
  HttpRequestRegexMatcherModel: self.create_http_request_matcher,
645
- GroupingPartitionRouterModel: self.create_grouping_partition_router,
646
641
  }
647
642
 
648
643
  # Needed for the case where we need to perform a second parse on the fields of a custom component
@@ -1360,9 +1355,6 @@ class ModelToComponentFactory:
1360
1355
  )
1361
1356
  stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
1362
1357
 
1363
- # Per-partition state doesn't make sense for GroupingPartitionRouter, so force the global state
1364
- use_global_cursor = isinstance(partition_router, GroupingPartitionRouter)
1365
-
1366
1358
  # Return the concurrent cursor and state converter
1367
1359
  return ConcurrentPerPartitionCursor(
1368
1360
  cursor_factory=cursor_factory,
@@ -1374,7 +1366,6 @@ class ModelToComponentFactory:
1374
1366
  connector_state_manager=state_manager,
1375
1367
  connector_state_converter=connector_state_converter,
1376
1368
  cursor_field=cursor_field,
1377
- use_global_cursor=use_global_cursor,
1378
1369
  )
1379
1370
 
1380
1371
  @staticmethod
@@ -2948,6 +2939,27 @@ class ModelToComponentFactory:
2948
2939
  parameters={},
2949
2940
  )
2950
2941
 
2942
+ def _get_job_timeout() -> datetime.timedelta:
2943
+ user_defined_timeout: Optional[int] = (
2944
+ int(
2945
+ InterpolatedString.create(
2946
+ str(model.polling_job_timeout),
2947
+ parameters={},
2948
+ ).eval(config)
2949
+ )
2950
+ if model.polling_job_timeout
2951
+ else None
2952
+ )
2953
+
2954
+ # check for user defined timeout during the test read or 15 minutes
2955
+ test_read_timeout = datetime.timedelta(minutes=user_defined_timeout or 15)
2956
+ # default value for non-connector builder is 60 minutes.
2957
+ default_sync_timeout = datetime.timedelta(minutes=user_defined_timeout or 60)
2958
+
2959
+ return (
2960
+ test_read_timeout if self._emit_connector_builder_messages else default_sync_timeout
2961
+ )
2962
+
2951
2963
  decoder = (
2952
2964
  self._create_component_from_model(model=model.decoder, config=config)
2953
2965
  if model.decoder
@@ -3041,6 +3053,7 @@ class ModelToComponentFactory:
3041
3053
  config=config,
3042
3054
  name=name,
3043
3055
  )
3056
+
3044
3057
  job_repository: AsyncJobRepository = AsyncHttpJobRepository(
3045
3058
  creation_requester=creation_requester,
3046
3059
  polling_requester=polling_requester,
@@ -3051,6 +3064,7 @@ class ModelToComponentFactory:
3051
3064
  status_extractor=status_extractor,
3052
3065
  status_mapping=self._create_async_job_status_mapping(model.status_mapping, config),
3053
3066
  download_target_extractor=download_target_extractor,
3067
+ job_timeout=_get_job_timeout(),
3054
3068
  )
3055
3069
 
3056
3070
  async_job_partition_router = AsyncJobPartitionRouter(
@@ -3353,34 +3367,3 @@ class ModelToComponentFactory:
3353
3367
  self._api_budget = self.create_component(
3354
3368
  model_type=HTTPAPIBudgetModel, component_definition=component_definition, config=config
3355
3369
  )
3356
-
3357
- def create_grouping_partition_router(
3358
- self, model: GroupingPartitionRouterModel, config: Config, **kwargs: Any
3359
- ) -> GroupingPartitionRouter:
3360
- underlying_router = self._create_component_from_model(
3361
- model=model.underlying_partition_router, config=config
3362
- )
3363
- if model.group_size < 1:
3364
- raise ValueError(f"Group size must be greater than 0, got {model.group_size}")
3365
-
3366
- # Request options in underlying partition routers are not supported for GroupingPartitionRouter
3367
- # because they are specific to individual partitions and cannot be aggregated or handled
3368
- # when grouping, potentially leading to incorrect API calls. Any request customization
3369
- # should be managed at the stream level through the requester's configuration.
3370
- if isinstance(underlying_router, SubstreamPartitionRouter):
3371
- if any(
3372
- parent_config.request_option
3373
- for parent_config in underlying_router.parent_stream_configs
3374
- ):
3375
- raise ValueError("Request options are not supported for GroupingPartitionRouter.")
3376
-
3377
- if isinstance(underlying_router, ListPartitionRouter):
3378
- if underlying_router.request_option:
3379
- raise ValueError("Request options are not supported for GroupingPartitionRouter.")
3380
-
3381
- return GroupingPartitionRouter(
3382
- group_size=model.group_size,
3383
- underlying_partition_router=underlying_router,
3384
- deduplicate=model.deduplicate if model.deduplicate is not None else True,
3385
- config=config,
3386
- )
@@ -8,9 +8,6 @@ from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_route
8
8
  from airbyte_cdk.sources.declarative.partition_routers.cartesian_product_stream_slicer import (
9
9
  CartesianProductStreamSlicer,
10
10
  )
11
- from airbyte_cdk.sources.declarative.partition_routers.grouping_partition_router import (
12
- GroupingPartitionRouter,
13
- )
14
11
  from airbyte_cdk.sources.declarative.partition_routers.list_partition_router import (
15
12
  ListPartitionRouter,
16
13
  )
@@ -25,7 +22,6 @@ from airbyte_cdk.sources.declarative.partition_routers.substream_partition_route
25
22
  __all__ = [
26
23
  "AsyncJobPartitionRouter",
27
24
  "CartesianProductStreamSlicer",
28
- "GroupingPartitionRouter",
29
25
  "ListPartitionRouter",
30
26
  "SinglePartitionRouter",
31
27
  "SubstreamPartitionRouter",
@@ -45,7 +45,9 @@ class AsyncHttpJobRepository(AsyncJobRepository):
45
45
  status_mapping: Mapping[str, AsyncJobStatus]
46
46
  download_target_extractor: DpathExtractor
47
47
 
48
+ # timeout for the job to be completed, passed from `polling_job_timeout`
48
49
  job_timeout: Optional[timedelta] = None
50
+
49
51
  record_extractor: RecordExtractor = field(
50
52
  init=False, repr=False, default_factory=lambda: ResponseToFileExtractor({})
51
53
  )
@@ -131,7 +133,7 @@ class AsyncHttpJobRepository(AsyncJobRepository):
131
133
  log_formatter=lambda response: format_http_message(
132
134
  response=response,
133
135
  title="Async Job -- Create",
134
- description="Create the server-side async job.",
136
+ description=f"Create the server-side async job. Timeout after: {self.job_timeout}",
135
137
  stream_name=None,
136
138
  is_auxiliary=True,
137
139
  type="ASYNC_CREATE",
@@ -271,12 +273,59 @@ class AsyncHttpJobRepository(AsyncJobRepository):
271
273
  del self._create_job_response_by_id[job_id]
272
274
  del self._polling_job_response_by_id[job_id]
273
275
 
276
+ def _get_creation_response_interpolation_context(self, job: AsyncJob) -> Dict[str, Any]:
277
+ """
278
+ Returns the interpolation context for the creation response.
279
+
280
+ Args:
281
+ job (AsyncJob): The job for which to get the creation response interpolation context.
282
+
283
+ Returns:
284
+ Dict[str, Any]: The interpolation context as a dictionary.
285
+ """
286
+ # TODO: currently we support only JsonDecoder to decode the response to track the ids or the status
287
+ # of the Jobs. We should consider to add the support of other decoders like XMLDecoder, in the future
288
+ creation_response_context = dict(self._create_job_response_by_id[job.api_job_id()].json())
289
+ if not "headers" in creation_response_context:
290
+ creation_response_context["headers"] = self._create_job_response_by_id[
291
+ job.api_job_id()
292
+ ].headers
293
+ if not "request" in creation_response_context:
294
+ creation_response_context["request"] = self._create_job_response_by_id[
295
+ job.api_job_id()
296
+ ].request
297
+ return creation_response_context
298
+
299
+ def _get_polling_response_interpolation_context(self, job: AsyncJob) -> Dict[str, Any]:
300
+ """
301
+ Returns the interpolation context for the polling response.
302
+
303
+ Args:
304
+ job (AsyncJob): The job for which to get the polling response interpolation context.
305
+
306
+ Returns:
307
+ Dict[str, Any]: The interpolation context as a dictionary.
308
+ """
309
+ # TODO: currently we support only JsonDecoder to decode the response to track the ids or the status
310
+ # of the Jobs. We should consider to add the support of other decoders like XMLDecoder, in the future
311
+ polling_response_context = dict(self._polling_job_response_by_id[job.api_job_id()].json())
312
+ if not "headers" in polling_response_context:
313
+ polling_response_context["headers"] = self._polling_job_response_by_id[
314
+ job.api_job_id()
315
+ ].headers
316
+ if not "request" in polling_response_context:
317
+ polling_response_context["request"] = self._polling_job_response_by_id[
318
+ job.api_job_id()
319
+ ].request
320
+ return polling_response_context
321
+
274
322
  def _get_create_job_stream_slice(self, job: AsyncJob) -> StreamSlice:
275
- creation_response = self._create_job_response_by_id[job.api_job_id()].json()
276
323
  stream_slice = StreamSlice(
277
324
  partition={},
278
325
  cursor_slice={},
279
- extra_fields={"creation_response": creation_response},
326
+ extra_fields={
327
+ "creation_response": self._get_creation_response_interpolation_context(job),
328
+ },
280
329
  )
281
330
  return stream_slice
282
331
 
@@ -284,11 +333,12 @@ class AsyncHttpJobRepository(AsyncJobRepository):
284
333
  if not self.download_target_requester:
285
334
  url_response = self._polling_job_response_by_id[job.api_job_id()]
286
335
  else:
287
- polling_response = self._polling_job_response_by_id[job.api_job_id()].json()
288
336
  stream_slice: StreamSlice = StreamSlice(
289
337
  partition={},
290
338
  cursor_slice={},
291
- extra_fields={"polling_response": polling_response},
339
+ extra_fields={
340
+ "polling_response": self._get_polling_response_interpolation_context(job),
341
+ },
292
342
  )
293
343
  url_response = self.download_target_requester.send_request(stream_slice=stream_slice) # type: ignore # we expect download_target_requester to always be presented, otherwise raise an exception as we cannot proceed with the report
294
344
  if not url_response:
@@ -4,24 +4,17 @@
4
4
  from dataclasses import InitVar, dataclass, field
5
5
  from typing import Any, Iterable, Mapping, Optional
6
6
 
7
- from typing_extensions import deprecated
8
-
9
7
  from airbyte_cdk.sources.declarative.async_job.job import AsyncJob
10
8
  from airbyte_cdk.sources.declarative.extractors.record_selector import RecordSelector
11
9
  from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_router import (
12
10
  AsyncJobPartitionRouter,
13
11
  )
14
12
  from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
15
- from airbyte_cdk.sources.source import ExperimentalClassWarning
16
13
  from airbyte_cdk.sources.streams.core import StreamData
17
14
  from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
18
15
  from airbyte_cdk.sources.utils.slice_logger import AlwaysLogSliceLogger
19
16
 
20
17
 
21
- @deprecated(
22
- "This class is experimental. Use at your own risk.",
23
- category=ExperimentalClassWarning,
24
- )
25
18
  @dataclass
26
19
  class AsyncRetriever(Retriever):
27
20
  config: Config
@@ -2,9 +2,10 @@
2
2
 
3
3
  import contextlib
4
4
  import functools
5
+ from collections import defaultdict
5
6
  from enum import Enum
6
7
  from types import TracebackType
7
- from typing import Callable, List, Optional, Union
8
+ from typing import Callable, Dict, Iterable, List, Optional, Union
8
9
 
9
10
  import requests_mock
10
11
 
@@ -40,7 +41,7 @@ class HttpMocker(contextlib.ContextDecorator):
40
41
 
41
42
  def __init__(self) -> None:
42
43
  self._mocker = requests_mock.Mocker()
43
- self._matchers: List[HttpRequestMatcher] = []
44
+ self._matchers: Dict[SupportedHttpMethods, List[HttpRequestMatcher]] = defaultdict(list)
44
45
 
45
46
  def __enter__(self) -> "HttpMocker":
46
47
  self._mocker.__enter__()
@@ -55,7 +56,7 @@ class HttpMocker(contextlib.ContextDecorator):
55
56
  self._mocker.__exit__(exc_type, exc_val, exc_tb)
56
57
 
57
58
  def _validate_all_matchers_called(self) -> None:
58
- for matcher in self._matchers:
59
+ for matcher in self._get_matchers():
59
60
  if not matcher.has_expected_match_count():
60
61
  raise ValueError(f"Invalid number of matches for `{matcher}`")
61
62
 
@@ -69,9 +70,9 @@ class HttpMocker(contextlib.ContextDecorator):
69
70
  responses = [responses]
70
71
 
71
72
  matcher = HttpRequestMatcher(request, len(responses))
72
- if matcher in self._matchers:
73
+ if matcher in self._matchers[method]:
73
74
  raise ValueError(f"Request {matcher.request} already mocked")
74
- self._matchers.append(matcher)
75
+ self._matchers[method].append(matcher)
75
76
 
76
77
  getattr(self._mocker, method)(
77
78
  requests_mock.ANY,
@@ -129,7 +130,7 @@ class HttpMocker(contextlib.ContextDecorator):
129
130
 
130
131
  def assert_number_of_calls(self, request: HttpRequest, number_of_calls: int) -> None:
131
132
  corresponding_matchers = list(
132
- filter(lambda matcher: matcher.request == request, self._matchers)
133
+ filter(lambda matcher: matcher.request is request, self._get_matchers())
133
134
  )
134
135
  if len(corresponding_matchers) != 1:
135
136
  raise ValueError(
@@ -150,7 +151,7 @@ class HttpMocker(contextlib.ContextDecorator):
150
151
  result = f(*args, **kwargs)
151
152
  except requests_mock.NoMockAddress as no_mock_exception:
152
153
  matchers_as_string = "\n\t".join(
153
- map(lambda matcher: str(matcher.request), self._matchers)
154
+ map(lambda matcher: str(matcher.request), self._get_matchers())
154
155
  )
155
156
  raise ValueError(
156
157
  f"No matcher matches {no_mock_exception.args[0]} with headers `{no_mock_exception.request.headers}` "
@@ -175,6 +176,10 @@ class HttpMocker(contextlib.ContextDecorator):
175
176
 
176
177
  return wrapper
177
178
 
179
+ def _get_matchers(self) -> Iterable[HttpRequestMatcher]:
180
+ for matchers in self._matchers.values():
181
+ yield from matchers
182
+
178
183
  def clear_all_matchers(self) -> None:
179
184
  """Clears all stored matchers by resetting the _matchers list to an empty state."""
180
- self._matchers = []
185
+ self._matchers = defaultdict(list)
@@ -23,7 +23,7 @@ classifiers = [
23
23
  keywords = ["airbyte", "connector-development-kit", "cdk"]
24
24
 
25
25
  # Python CDK uses dynamic versioning: https://github.com/mtkennerly/poetry-dynamic-versioning
26
- version = "6.41.2dev0" # Version will be calculated dynamically.
26
+ version = "6.41.4" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false