airbyte-cdk 6.41.2__tar.gz → 6.41.2.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 (366) hide show
  1. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +45 -10
  3. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +2 -1
  4. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +42 -7
  5. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +41 -24
  6. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +4 -0
  7. airbyte_cdk-6.41.2.dev0/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +150 -0
  8. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +1 -3
  9. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +7 -0
  10. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/pyproject.toml +1 -1
  11. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/LICENSE.txt +0 -0
  12. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/LICENSE_SHORT +0 -0
  13. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/README.md +0 -0
  14. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/__init__.py +0 -0
  15. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/cli/__init__.py +0 -0
  16. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  17. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  18. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  19. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/config_observation.py +0 -0
  20. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector.py +0 -0
  21. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/README.md +0 -0
  22. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/__init__.py +0 -0
  23. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  24. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/main.py +0 -0
  25. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/models.py +0 -0
  26. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  27. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  28. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  29. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  30. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  31. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/__init__.py +0 -0
  32. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/destination.py +0 -0
  33. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  34. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  35. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  36. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  37. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  38. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  39. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  40. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  41. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  42. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/entrypoint.py +0 -0
  43. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/exception_handler.py +0 -0
  44. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/logger.py +0 -0
  45. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/models/__init__.py +0 -0
  46. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  47. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  48. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  49. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/models/well_known_types.py +0 -0
  50. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/py.typed +0 -0
  51. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/__init__.py +0 -0
  52. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/abstract_source.py +0 -0
  53. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  54. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  55. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  56. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  57. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  58. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  59. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  60. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/config.py +0 -0
  61. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  62. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  63. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  64. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  65. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  66. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  67. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  68. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  69. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  70. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  71. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  72. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  73. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  74. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  75. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  76. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  77. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  78. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  79. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  80. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  81. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  82. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  83. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  84. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  85. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  86. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  87. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  88. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  89. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  90. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  91. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  92. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
  93. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  94. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  95. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  96. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  97. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  98. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  99. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  100. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  101. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  102. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  103. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  104. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  105. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  106. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  107. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  108. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  109. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  110. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  111. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  112. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  113. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  114. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  115. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  116. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  117. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  118. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  119. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  120. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  121. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  122. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  123. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  124. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  125. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  126. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  127. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  128. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  129. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  130. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  131. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  132. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  133. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  134. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  135. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  136. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  137. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  138. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  139. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  140. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  141. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  142. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  143. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  144. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  145. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  146. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  147. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  148. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  149. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  150. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  151. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  152. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  153. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  154. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  155. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  156. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  157. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  158. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  159. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  160. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  161. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  162. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  163. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  164. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  165. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  166. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  167. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  168. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  169. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  170. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  171. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  172. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  173. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  174. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  175. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  176. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  177. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  178. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  179. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  180. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  181. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  182. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  183. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  184. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  185. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  186. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  187. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  188. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  189. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  190. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  191. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  192. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  193. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  194. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  195. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  196. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  197. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  198. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  199. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  200. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  201. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  202. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/types.py +0 -0
  203. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  204. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/README.md +0 -0
  205. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  206. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  207. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  208. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  209. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  210. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  211. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  212. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  213. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  214. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  215. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  216. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  217. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  218. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  219. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  220. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  221. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  222. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  223. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  224. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
  225. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  226. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  227. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  228. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  229. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  230. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  231. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  232. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  233. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  234. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  235. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  236. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  237. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  238. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  239. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  240. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  241. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  242. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  243. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  244. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  245. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  246. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  247. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  248. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  249. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  250. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  251. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  252. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  253. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  254. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/file_based/types.py +0 -0
  255. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/http_config.py +0 -0
  256. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/http_logger.py +0 -0
  257. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/message/__init__.py +0 -0
  258. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/message/repository.py +0 -0
  259. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/source.py +0 -0
  260. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  261. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/__init__.py +0 -0
  262. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  263. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  264. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  265. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  266. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  267. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  268. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  269. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  270. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  271. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  272. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  273. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  274. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  275. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  276. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  277. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  278. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  279. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  280. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  281. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  282. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  283. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  284. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  285. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  286. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  287. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  288. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  289. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  290. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  291. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  292. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  293. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/core.py +0 -0
  294. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  295. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  296. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  297. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  298. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  299. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  300. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  301. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  302. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  303. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  304. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  305. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  306. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/http.py +0 -0
  307. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  308. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  309. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  310. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  311. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  312. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  313. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  314. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  315. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  316. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/types.py +0 -0
  317. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/__init__.py +0 -0
  318. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/casing.py +0 -0
  319. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  320. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  321. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  322. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/transform.py +0 -0
  323. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sources/utils/types.py +0 -0
  324. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/__init__.py +0 -0
  325. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/_util/__init__.py +0 -0
  326. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/_util/hashing.py +0 -0
  327. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  328. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/constants.py +0 -0
  329. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/exceptions.py +0 -0
  330. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/secrets.py +0 -0
  331. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/shared/__init__.py +0 -0
  332. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  333. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  334. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/sql/types.py +0 -0
  335. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/__init__.py +0 -0
  336. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/catalog_builder.py +0 -0
  337. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  338. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  339. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  340. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  341. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/mock_http/request.py +0 -0
  342. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/mock_http/response.py +0 -0
  343. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  344. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/state_builder.py +0 -0
  345. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/utils/__init__.py +0 -0
  346. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/utils/data.py +0 -0
  347. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  348. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  349. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/test/utils/reading.py +0 -0
  350. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/__init__.py +0 -0
  351. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  352. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/analytics_message.py +0 -0
  353. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/constants.py +0 -0
  354. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  355. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  356. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/event_timing.py +0 -0
  357. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  358. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  359. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/message_utils.py +0 -0
  360. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  361. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/print_buffer.py +0 -0
  362. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  363. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/slice_hasher.py +0 -0
  364. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  365. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.dev0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  366. {airbyte_cdk-6.41.2 → airbyte_cdk-6.41.2.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.41.2
3
+ Version: 6.41.2.dev0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -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,12 +3254,14 @@ definitions:
3254
3254
  - "$ref": "#/definitions/CustomPartitionRouter"
3255
3255
  - "$ref": "#/definitions/ListPartitionRouter"
3256
3256
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3257
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3257
3258
  - type: array
3258
3259
  items:
3259
3260
  anyOf:
3260
3261
  - "$ref": "#/definitions/CustomPartitionRouter"
3261
3262
  - "$ref": "#/definitions/ListPartitionRouter"
3262
3263
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3264
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3263
3265
  decoder:
3264
3266
  title: Decoder
3265
3267
  description: Component decoding the response so records can be extracted.
@@ -3333,7 +3335,7 @@ definitions:
3333
3335
  items:
3334
3336
  type: string
3335
3337
  AsyncRetriever:
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."
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."
3337
3339
  type: object
3338
3340
  required:
3339
3341
  - type
@@ -3381,13 +3383,6 @@ definitions:
3381
3383
  anyOf:
3382
3384
  - "$ref": "#/definitions/CustomRequester"
3383
3385
  - "$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
3391
3386
  download_target_requester:
3392
3387
  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.
3393
3388
  anyOf:
@@ -3421,12 +3416,14 @@ definitions:
3421
3416
  - "$ref": "#/definitions/CustomPartitionRouter"
3422
3417
  - "$ref": "#/definitions/ListPartitionRouter"
3423
3418
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3419
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3424
3420
  - type: array
3425
3421
  items:
3426
3422
  anyOf:
3427
3423
  - "$ref": "#/definitions/CustomPartitionRouter"
3428
3424
  - "$ref": "#/definitions/ListPartitionRouter"
3429
3425
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3426
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3430
3427
  decoder:
3431
3428
  title: Decoder
3432
3429
  description: Component decoding the response so records can be extracted.
@@ -3543,6 +3540,44 @@ definitions:
3543
3540
  $parameters:
3544
3541
  type: object
3545
3542
  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
3546
3581
  WaitUntilTimeFromHeader:
3547
3582
  title: Wait Until Time Defined In Response Header
3548
3583
  description: Extract time at which we can retry the request from response header and wait for the difference between now and that time.
@@ -79,6 +79,7 @@ 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,
82
83
  ) -> None:
83
84
  self._global_cursor: Optional[StreamState] = {}
84
85
  self._stream_name = stream_name
@@ -106,7 +107,7 @@ class ConcurrentPerPartitionCursor(Cursor):
106
107
  self._lookback_window: int = 0
107
108
  self._parent_state: Optional[StreamState] = None
108
109
  self._number_of_partitions: int = 0
109
- self._use_global_cursor: bool = False
110
+ self._use_global_cursor: bool = use_global_cursor
110
111
  self._partition_serializer = PerPartitionKeySerializer()
111
112
  # Track the last time a state message was emitted
112
113
  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,7 +2301,15 @@ class SimpleRetriever(BaseModel):
2301
2301
  CustomPartitionRouter,
2302
2302
  ListPartitionRouter,
2303
2303
  SubstreamPartitionRouter,
2304
- List[Union[CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter]],
2304
+ GroupingPartitionRouter,
2305
+ List[
2306
+ Union[
2307
+ CustomPartitionRouter,
2308
+ ListPartitionRouter,
2309
+ SubstreamPartitionRouter,
2310
+ GroupingPartitionRouter,
2311
+ ]
2312
+ ],
2305
2313
  ]
2306
2314
  ] = Field(
2307
2315
  [],
@@ -2354,10 +2362,6 @@ class AsyncRetriever(BaseModel):
2354
2362
  ...,
2355
2363
  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.",
2356
2364
  )
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
- )
2361
2365
  download_target_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
2362
2366
  None,
2363
2367
  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.",
@@ -2383,7 +2387,15 @@ class AsyncRetriever(BaseModel):
2383
2387
  CustomPartitionRouter,
2384
2388
  ListPartitionRouter,
2385
2389
  SubstreamPartitionRouter,
2386
- List[Union[CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter]],
2390
+ GroupingPartitionRouter,
2391
+ List[
2392
+ Union[
2393
+ CustomPartitionRouter,
2394
+ ListPartitionRouter,
2395
+ SubstreamPartitionRouter,
2396
+ GroupingPartitionRouter,
2397
+ ]
2398
+ ],
2387
2399
  ]
2388
2400
  ] = Field(
2389
2401
  [],
@@ -2435,6 +2447,29 @@ class SubstreamPartitionRouter(BaseModel):
2435
2447
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
2436
2448
 
2437
2449
 
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
+
2438
2473
  class HttpComponentsResolver(BaseModel):
2439
2474
  type: Literal["HttpComponentsResolver"]
2440
2475
  retriever: Union[AsyncRetriever, CustomRetriever, SimpleRetriever] = Field(
@@ -227,6 +227,9 @@ 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
+ )
230
233
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
231
234
  GzipDecoder as GzipDecoderModel,
232
235
  )
@@ -385,6 +388,7 @@ from airbyte_cdk.sources.declarative.parsers.custom_code_compiler import (
385
388
  )
386
389
  from airbyte_cdk.sources.declarative.partition_routers import (
387
390
  CartesianProductStreamSlicer,
391
+ GroupingPartitionRouter,
388
392
  ListPartitionRouter,
389
393
  PartitionRouter,
390
394
  SinglePartitionRouter,
@@ -507,7 +511,7 @@ from airbyte_cdk.sources.streams.concurrent.state_converters.incrementing_count_
507
511
  IncrementingCountStreamStateConverter,
508
512
  )
509
513
  from airbyte_cdk.sources.streams.http.error_handlers.response_models import ResponseAction
510
- from airbyte_cdk.sources.types import Config
514
+ from airbyte_cdk.sources.types import Config, ConnectionDefinition
511
515
  from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer
512
516
 
513
517
  ComponentDefinition = Mapping[str, Any]
@@ -638,6 +642,7 @@ class ModelToComponentFactory:
638
642
  UnlimitedCallRatePolicyModel: self.create_unlimited_call_rate_policy,
639
643
  RateModel: self.create_rate,
640
644
  HttpRequestRegexMatcherModel: self.create_http_request_matcher,
645
+ GroupingPartitionRouterModel: self.create_grouping_partition_router,
641
646
  }
642
647
 
643
648
  # Needed for the case where we need to perform a second parse on the fields of a custom component
@@ -1355,6 +1360,9 @@ class ModelToComponentFactory:
1355
1360
  )
1356
1361
  stream_state = self.apply_stream_state_migrations(stream_state_migrations, stream_state)
1357
1362
 
1363
+ # Per-partition state doesn't make sense for GroupingPartitionRouter, so force the global state
1364
+ use_global_cursor = isinstance(partition_router, GroupingPartitionRouter)
1365
+
1358
1366
  # Return the concurrent cursor and state converter
1359
1367
  return ConcurrentPerPartitionCursor(
1360
1368
  cursor_factory=cursor_factory,
@@ -1366,6 +1374,7 @@ class ModelToComponentFactory:
1366
1374
  connector_state_manager=state_manager,
1367
1375
  connector_state_converter=connector_state_converter,
1368
1376
  cursor_field=cursor_field,
1377
+ use_global_cursor=use_global_cursor,
1369
1378
  )
1370
1379
 
1371
1380
  @staticmethod
@@ -2939,27 +2948,6 @@ class ModelToComponentFactory:
2939
2948
  parameters={},
2940
2949
  )
2941
2950
 
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
-
2963
2951
  decoder = (
2964
2952
  self._create_component_from_model(model=model.decoder, config=config)
2965
2953
  if model.decoder
@@ -3053,7 +3041,6 @@ class ModelToComponentFactory:
3053
3041
  config=config,
3054
3042
  name=name,
3055
3043
  )
3056
-
3057
3044
  job_repository: AsyncJobRepository = AsyncHttpJobRepository(
3058
3045
  creation_requester=creation_requester,
3059
3046
  polling_requester=polling_requester,
@@ -3064,7 +3051,6 @@ class ModelToComponentFactory:
3064
3051
  status_extractor=status_extractor,
3065
3052
  status_mapping=self._create_async_job_status_mapping(model.status_mapping, config),
3066
3053
  download_target_extractor=download_target_extractor,
3067
- job_timeout=_get_job_timeout(),
3068
3054
  )
3069
3055
 
3070
3056
  async_job_partition_router = AsyncJobPartitionRouter(
@@ -3367,3 +3353,34 @@ class ModelToComponentFactory:
3367
3353
  self._api_budget = self.create_component(
3368
3354
  model_type=HTTPAPIBudgetModel, component_definition=component_definition, config=config
3369
3355
  )
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,6 +8,9 @@ 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
+ )
11
14
  from airbyte_cdk.sources.declarative.partition_routers.list_partition_router import (
12
15
  ListPartitionRouter,
13
16
  )
@@ -22,6 +25,7 @@ from airbyte_cdk.sources.declarative.partition_routers.substream_partition_route
22
25
  __all__ = [
23
26
  "AsyncJobPartitionRouter",
24
27
  "CartesianProductStreamSlicer",
28
+ "GroupingPartitionRouter",
25
29
  "ListPartitionRouter",
26
30
  "SinglePartitionRouter",
27
31
  "SubstreamPartitionRouter",
@@ -0,0 +1,150 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ from dataclasses import dataclass
6
+ from typing import Any, Iterable, Mapping, Optional
7
+
8
+ from airbyte_cdk.sources.declarative.partition_routers.partition_router import PartitionRouter
9
+ from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
10
+
11
+
12
+ @dataclass
13
+ class GroupingPartitionRouter(PartitionRouter):
14
+ """
15
+ A partition router that groups partitions from an underlying partition router into batches of a specified size.
16
+ This is useful for APIs that support filtering by multiple partition keys in a single request.
17
+
18
+ Attributes:
19
+ group_size (int): The number of partitions to include in each group.
20
+ underlying_partition_router (PartitionRouter): The partition router whose output will be grouped.
21
+ deduplicate (bool): If True, ensures unique partitions within each group by removing duplicates based on the partition key.
22
+ config (Config): The connector configuration.
23
+ parameters (Mapping[str, Any]): Additional parameters for interpolation and configuration.
24
+ """
25
+
26
+ group_size: int
27
+ underlying_partition_router: PartitionRouter
28
+ config: Config
29
+ deduplicate: bool = True
30
+
31
+ def __post_init__(self) -> None:
32
+ self._state: Optional[Mapping[str, StreamState]] = {}
33
+
34
+ def stream_slices(self) -> Iterable[StreamSlice]:
35
+ """
36
+ Lazily groups partitions from the underlying partition router into batches of size `group_size`.
37
+
38
+ This method processes partitions one at a time from the underlying router, maintaining a batch buffer.
39
+ When the buffer reaches `group_size` or the underlying router is exhausted, it yields a grouped slice.
40
+ If deduplication is enabled, it tracks seen partition keys to ensure uniqueness within the current batch.
41
+
42
+ Yields:
43
+ Iterable[StreamSlice]: An iterable of StreamSlice objects, where each slice contains a batch of partition values.
44
+ """
45
+ batch = []
46
+ seen_keys = set()
47
+
48
+ # Iterate over partitions lazily from the underlying router
49
+ for partition in self.underlying_partition_router.stream_slices():
50
+ # Extract the partition key (assuming single key-value pair, e.g., {"board_ids": value})
51
+ partition_keys = list(partition.partition.keys())
52
+ # skip parent_slice as it is part of SubstreamPartitionRouter partition
53
+ if "parent_slice" in partition_keys:
54
+ partition_keys.remove("parent_slice")
55
+ if len(partition_keys) != 1:
56
+ raise ValueError(
57
+ f"GroupingPartitionRouter expects a single partition key-value pair. Got {partition.partition}"
58
+ )
59
+ key = partition.partition[partition_keys[0]]
60
+
61
+ # Skip duplicates if deduplication is enabled
62
+ if self.deduplicate and key in seen_keys:
63
+ continue
64
+
65
+ # Add partition to the batch
66
+ batch.append(partition)
67
+ if self.deduplicate:
68
+ seen_keys.add(key)
69
+
70
+ # Yield the batch when it reaches the group_size
71
+ if len(batch) == self.group_size:
72
+ self._state = self.underlying_partition_router.get_stream_state()
73
+ yield self._create_grouped_slice(batch)
74
+ batch = [] # Reset the batch
75
+
76
+ self._state = self.underlying_partition_router.get_stream_state()
77
+ # Yield any remaining partitions if the batch isn't empty
78
+ if batch:
79
+ yield self._create_grouped_slice(batch)
80
+
81
+ def _create_grouped_slice(self, batch: list[StreamSlice]) -> StreamSlice:
82
+ """
83
+ Creates a grouped StreamSlice from a batch of partitions, aggregating extra fields into a dictionary with list values.
84
+
85
+ Args:
86
+ batch (list[StreamSlice]): A list of StreamSlice objects to group.
87
+
88
+ Returns:
89
+ StreamSlice: A single StreamSlice with combined partition and extra field values.
90
+ """
91
+ # Combine partition values into a single dict with lists
92
+ grouped_partition = {
93
+ key: [p.partition.get(key) for p in batch] for key in batch[0].partition.keys()
94
+ }
95
+
96
+ # Aggregate extra fields into a dict with list values
97
+ extra_fields_dict = (
98
+ {
99
+ key: [p.extra_fields.get(key) for p in batch]
100
+ for key in set().union(*(p.extra_fields.keys() for p in batch if p.extra_fields))
101
+ }
102
+ if any(p.extra_fields for p in batch)
103
+ else {}
104
+ )
105
+ return StreamSlice(
106
+ partition=grouped_partition,
107
+ cursor_slice={}, # Cursor is managed by the underlying router or incremental sync
108
+ extra_fields=extra_fields_dict,
109
+ )
110
+
111
+ def get_request_params(
112
+ self,
113
+ stream_state: Optional[StreamState] = None,
114
+ stream_slice: Optional[StreamSlice] = None,
115
+ next_page_token: Optional[Mapping[str, Any]] = None,
116
+ ) -> Mapping[str, Any]:
117
+ return {}
118
+
119
+ def get_request_headers(
120
+ self,
121
+ stream_state: Optional[StreamState] = None,
122
+ stream_slice: Optional[StreamSlice] = None,
123
+ next_page_token: Optional[Mapping[str, Any]] = None,
124
+ ) -> Mapping[str, Any]:
125
+ return {}
126
+
127
+ def get_request_body_data(
128
+ self,
129
+ stream_state: Optional[StreamState] = None,
130
+ stream_slice: Optional[StreamSlice] = None,
131
+ next_page_token: Optional[Mapping[str, Any]] = None,
132
+ ) -> Mapping[str, Any]:
133
+ return {}
134
+
135
+ def get_request_body_json(
136
+ self,
137
+ stream_state: Optional[StreamState] = None,
138
+ stream_slice: Optional[StreamSlice] = None,
139
+ next_page_token: Optional[Mapping[str, Any]] = None,
140
+ ) -> Mapping[str, Any]:
141
+ return {}
142
+
143
+ def set_initial_state(self, stream_state: StreamState) -> None:
144
+ """Delegate state initialization to the underlying partition router."""
145
+ self.underlying_partition_router.set_initial_state(stream_state)
146
+ self._state = self.underlying_partition_router.get_stream_state()
147
+
148
+ def get_stream_state(self) -> Optional[Mapping[str, StreamState]]:
149
+ """Delegate state retrieval to the underlying partition router."""
150
+ return self._state
@@ -45,9 +45,7 @@ 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`
49
48
  job_timeout: Optional[timedelta] = None
50
-
51
49
  record_extractor: RecordExtractor = field(
52
50
  init=False, repr=False, default_factory=lambda: ResponseToFileExtractor({})
53
51
  )
@@ -133,7 +131,7 @@ class AsyncHttpJobRepository(AsyncJobRepository):
133
131
  log_formatter=lambda response: format_http_message(
134
132
  response=response,
135
133
  title="Async Job -- Create",
136
- description=f"Create the server-side async job. Timeout after: {self.job_timeout}",
134
+ description="Create the server-side async job.",
137
135
  stream_name=None,
138
136
  is_auxiliary=True,
139
137
  type="ASYNC_CREATE",
@@ -4,17 +4,24 @@
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
+
7
9
  from airbyte_cdk.sources.declarative.async_job.job import AsyncJob
8
10
  from airbyte_cdk.sources.declarative.extractors.record_selector import RecordSelector
9
11
  from airbyte_cdk.sources.declarative.partition_routers.async_job_partition_router import (
10
12
  AsyncJobPartitionRouter,
11
13
  )
12
14
  from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
15
+ from airbyte_cdk.sources.source import ExperimentalClassWarning
13
16
  from airbyte_cdk.sources.streams.core import StreamData
14
17
  from airbyte_cdk.sources.types import Config, StreamSlice, StreamState
15
18
  from airbyte_cdk.sources.utils.slice_logger import AlwaysLogSliceLogger
16
19
 
17
20
 
21
+ @deprecated(
22
+ "This class is experimental. Use at your own risk.",
23
+ category=ExperimentalClassWarning,
24
+ )
18
25
  @dataclass
19
26
  class AsyncRetriever(Retriever):
20
27
  config: Config
@@ -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.2" # Version will be calculated dynamically.
26
+ version = "6.41.2dev0" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false