airbyte-cdk 6.41.6__tar.gz → 6.41.8__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.6 → airbyte_cdk-6.41.8}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +42 -0
  3. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +2 -1
  4. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +41 -2
  5. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +40 -0
  6. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +4 -0
  7. airbyte_cdk-6.41.8/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +150 -0
  8. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +4 -0
  9. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/pyproject.toml +1 -1
  10. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/LICENSE.txt +0 -0
  11. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/LICENSE_SHORT +0 -0
  12. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/README.md +0 -0
  13. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/__init__.py +0 -0
  14. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/__init__.py +0 -0
  15. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  16. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  17. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  18. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/config_observation.py +0 -0
  19. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector.py +0 -0
  20. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/README.md +0 -0
  21. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/__init__.py +0 -0
  22. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  23. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/main.py +0 -0
  24. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/models.py +0 -0
  25. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  26. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  27. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  28. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  29. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  30. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/__init__.py +0 -0
  31. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/destination.py +0 -0
  32. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  33. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  34. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  35. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  36. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  37. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  38. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  39. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  40. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  41. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/entrypoint.py +0 -0
  42. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/exception_handler.py +0 -0
  43. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/logger.py +0 -0
  44. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/__init__.py +0 -0
  45. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  46. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  47. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  48. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/models/well_known_types.py +0 -0
  49. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/py.typed +0 -0
  50. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/__init__.py +0 -0
  51. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/abstract_source.py +0 -0
  52. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  53. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  54. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  55. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  56. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  57. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  58. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  59. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/config.py +0 -0
  60. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  61. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  62. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  63. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  64. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  65. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  66. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  67. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  68. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  69. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  70. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  71. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  72. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  73. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  74. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  75. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  76. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  77. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  78. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  79. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  80. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  81. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  82. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  83. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  84. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  85. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  86. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  87. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  88. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  89. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  90. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  91. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
  92. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  93. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  94. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  95. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  96. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  97. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  98. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  99. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  100. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  101. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  102. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  103. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  104. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  105. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  106. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  107. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  108. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  109. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  110. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  111. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  112. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  113. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  114. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  115. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  116. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  117. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  118. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  119. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  120. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  121. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  122. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  123. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  124. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  125. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  126. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  127. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  128. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  129. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  130. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  131. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  132. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  133. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  134. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  135. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  136. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  137. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  138. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  139. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  140. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  141. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  142. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  143. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  144. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  145. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  146. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  147. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  148. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  149. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  150. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  151. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  152. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  153. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  154. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  155. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  156. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  157. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  158. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  159. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  160. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  161. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  162. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  163. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  164. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  165. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  166. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  167. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  168. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  169. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  170. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  171. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  172. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  173. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  174. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  175. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  176. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  177. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  178. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  179. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  180. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  181. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  182. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  183. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  184. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  185. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  186. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  187. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  188. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  189. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  190. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  191. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  192. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  193. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  194. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  195. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  196. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  197. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  198. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  199. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  200. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  201. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  202. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  203. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/types.py +0 -0
  204. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  205. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/README.md +0 -0
  206. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  207. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  208. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  209. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  210. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  211. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  212. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  213. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  214. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  215. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  216. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  217. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  218. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  219. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  220. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  221. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  222. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  223. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  224. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  225. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
  226. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  227. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  228. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  229. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  230. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  231. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  232. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  233. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  234. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  235. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  236. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  237. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  238. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  239. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  240. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  241. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  242. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  243. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  244. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  245. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  246. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  247. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  248. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  249. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  250. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  251. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  252. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  253. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  254. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  255. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/file_based/types.py +0 -0
  256. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/http_config.py +0 -0
  257. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/http_logger.py +0 -0
  258. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/message/__init__.py +0 -0
  259. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/message/repository.py +0 -0
  260. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/source.py +0 -0
  261. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  262. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/__init__.py +0 -0
  263. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  264. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  265. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  266. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  267. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  268. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  269. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  270. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  271. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  272. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  273. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  274. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  275. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  276. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  277. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  278. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  279. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  280. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  281. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  282. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  283. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  284. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  285. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  286. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  287. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  288. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  289. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  290. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  291. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  292. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  293. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/core.py +0 -0
  294. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  295. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  296. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  297. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  298. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  299. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  300. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  301. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  302. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  303. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  304. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  305. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  306. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/http.py +0 -0
  307. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  308. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  309. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  310. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  311. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  312. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  313. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  314. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  315. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  316. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/types.py +0 -0
  317. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/__init__.py +0 -0
  318. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/casing.py +0 -0
  319. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  320. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  321. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  322. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/transform.py +0 -0
  323. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sources/utils/types.py +0 -0
  324. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/__init__.py +0 -0
  325. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/_util/__init__.py +0 -0
  326. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/_util/hashing.py +0 -0
  327. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  328. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/constants.py +0 -0
  329. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/exceptions.py +0 -0
  330. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/secrets.py +0 -0
  331. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/shared/__init__.py +0 -0
  332. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  333. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  334. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/sql/types.py +0 -0
  335. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/__init__.py +0 -0
  336. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/catalog_builder.py +0 -0
  337. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  338. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  339. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  340. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  341. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/request.py +0 -0
  342. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/response.py +0 -0
  343. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  344. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/state_builder.py +0 -0
  345. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/__init__.py +0 -0
  346. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/data.py +0 -0
  347. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  348. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  349. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/test/utils/reading.py +0 -0
  350. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/__init__.py +0 -0
  351. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  352. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/analytics_message.py +0 -0
  353. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/constants.py +0 -0
  354. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  355. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  356. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/event_timing.py +0 -0
  357. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  358. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  359. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/message_utils.py +0 -0
  360. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  361. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/print_buffer.py +0 -0
  362. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  363. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/slice_hasher.py +0 -0
  364. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  365. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  366. {airbyte_cdk-6.41.6 → airbyte_cdk-6.41.8}/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.6
3
+ Version: 6.41.8
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -3260,12 +3260,14 @@ definitions:
3260
3260
  - "$ref": "#/definitions/CustomPartitionRouter"
3261
3261
  - "$ref": "#/definitions/ListPartitionRouter"
3262
3262
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3263
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3263
3264
  - type: array
3264
3265
  items:
3265
3266
  anyOf:
3266
3267
  - "$ref": "#/definitions/CustomPartitionRouter"
3267
3268
  - "$ref": "#/definitions/ListPartitionRouter"
3268
3269
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3270
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3269
3271
  decoder:
3270
3272
  title: Decoder
3271
3273
  description: Component decoding the response so records can be extracted.
@@ -3431,12 +3433,14 @@ definitions:
3431
3433
  - "$ref": "#/definitions/CustomPartitionRouter"
3432
3434
  - "$ref": "#/definitions/ListPartitionRouter"
3433
3435
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3436
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3434
3437
  - type: array
3435
3438
  items:
3436
3439
  anyOf:
3437
3440
  - "$ref": "#/definitions/CustomPartitionRouter"
3438
3441
  - "$ref": "#/definitions/ListPartitionRouter"
3439
3442
  - "$ref": "#/definitions/SubstreamPartitionRouter"
3443
+ - "$ref": "#/definitions/GroupingPartitionRouter"
3440
3444
  decoder:
3441
3445
  title: Decoder
3442
3446
  description: Component decoding the response so records can be extracted.
@@ -3553,6 +3557,44 @@ definitions:
3553
3557
  $parameters:
3554
3558
  type: object
3555
3559
  additionalProperties: true
3560
+ GroupingPartitionRouter:
3561
+ title: Grouping Partition Router
3562
+ description: >
3563
+ A decorator on top of a partition router that groups partitions into batches of a specified size.
3564
+ This is useful for APIs that support filtering by multiple partition keys in a single request.
3565
+ Note that per-partition incremental syncs may not work as expected because the grouping
3566
+ of partitions might change between syncs, potentially leading to inconsistent state tracking.
3567
+ type: object
3568
+ required:
3569
+ - type
3570
+ - group_size
3571
+ - underlying_partition_router
3572
+ properties:
3573
+ type:
3574
+ type: string
3575
+ enum: [GroupingPartitionRouter]
3576
+ group_size:
3577
+ title: Group Size
3578
+ description: The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.
3579
+ type: integer
3580
+ examples:
3581
+ - 10
3582
+ - 50
3583
+ underlying_partition_router:
3584
+ title: Underlying Partition Router
3585
+ description: The partition router whose output will be grouped. This can be any valid partition router component.
3586
+ anyOf:
3587
+ - "$ref": "#/definitions/CustomPartitionRouter"
3588
+ - "$ref": "#/definitions/ListPartitionRouter"
3589
+ - "$ref": "#/definitions/SubstreamPartitionRouter"
3590
+ deduplicate:
3591
+ title: Deduplicate Partitions
3592
+ description: If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.
3593
+ type: boolean
3594
+ default: true
3595
+ $parameters:
3596
+ type: object
3597
+ additionalProperties: true
3556
3598
  WaitUntilTimeFromHeader:
3557
3599
  title: Wait Until Time Defined In Response Header
3558
3600
  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
@@ -2303,7 +2303,15 @@ class SimpleRetriever(BaseModel):
2303
2303
  CustomPartitionRouter,
2304
2304
  ListPartitionRouter,
2305
2305
  SubstreamPartitionRouter,
2306
- List[Union[CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter]],
2306
+ GroupingPartitionRouter,
2307
+ List[
2308
+ Union[
2309
+ CustomPartitionRouter,
2310
+ ListPartitionRouter,
2311
+ SubstreamPartitionRouter,
2312
+ GroupingPartitionRouter,
2313
+ ]
2314
+ ],
2307
2315
  ]
2308
2316
  ] = Field(
2309
2317
  [],
@@ -2385,7 +2393,15 @@ class AsyncRetriever(BaseModel):
2385
2393
  CustomPartitionRouter,
2386
2394
  ListPartitionRouter,
2387
2395
  SubstreamPartitionRouter,
2388
- List[Union[CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter]],
2396
+ GroupingPartitionRouter,
2397
+ List[
2398
+ Union[
2399
+ CustomPartitionRouter,
2400
+ ListPartitionRouter,
2401
+ SubstreamPartitionRouter,
2402
+ GroupingPartitionRouter,
2403
+ ]
2404
+ ],
2389
2405
  ]
2390
2406
  ] = Field(
2391
2407
  [],
@@ -2437,6 +2453,29 @@ class SubstreamPartitionRouter(BaseModel):
2437
2453
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
2438
2454
 
2439
2455
 
2456
+ class GroupingPartitionRouter(BaseModel):
2457
+ type: Literal["GroupingPartitionRouter"]
2458
+ group_size: int = Field(
2459
+ ...,
2460
+ description="The number of partitions to include in each group. This determines how many partition values are batched together in a single slice.",
2461
+ examples=[10, 50],
2462
+ title="Group Size",
2463
+ )
2464
+ underlying_partition_router: Union[
2465
+ CustomPartitionRouter, ListPartitionRouter, SubstreamPartitionRouter
2466
+ ] = Field(
2467
+ ...,
2468
+ description="The partition router whose output will be grouped. This can be any valid partition router component.",
2469
+ title="Underlying Partition Router",
2470
+ )
2471
+ deduplicate: Optional[bool] = Field(
2472
+ True,
2473
+ description="If true, ensures that partitions are unique within each group by removing duplicates based on the partition key.",
2474
+ title="Deduplicate Partitions",
2475
+ )
2476
+ parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
2477
+
2478
+
2440
2479
  class HttpComponentsResolver(BaseModel):
2441
2480
  type: Literal["HttpComponentsResolver"]
2442
2481
  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,
@@ -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
@@ -3370,3 +3379,34 @@ class ModelToComponentFactory:
3370
3379
  self._api_budget = self.create_component(
3371
3380
  model_type=HTTPAPIBudgetModel, component_definition=component_definition, config=config
3372
3381
  )
3382
+
3383
+ def create_grouping_partition_router(
3384
+ self, model: GroupingPartitionRouterModel, config: Config, **kwargs: Any
3385
+ ) -> GroupingPartitionRouter:
3386
+ underlying_router = self._create_component_from_model(
3387
+ model=model.underlying_partition_router, config=config
3388
+ )
3389
+ if model.group_size < 1:
3390
+ raise ValueError(f"Group size must be greater than 0, got {model.group_size}")
3391
+
3392
+ # Request options in underlying partition routers are not supported for GroupingPartitionRouter
3393
+ # because they are specific to individual partitions and cannot be aggregated or handled
3394
+ # when grouping, potentially leading to incorrect API calls. Any request customization
3395
+ # should be managed at the stream level through the requester's configuration.
3396
+ if isinstance(underlying_router, SubstreamPartitionRouter):
3397
+ if any(
3398
+ parent_config.request_option
3399
+ for parent_config in underlying_router.parent_stream_configs
3400
+ ):
3401
+ raise ValueError("Request options are not supported for GroupingPartitionRouter.")
3402
+
3403
+ if isinstance(underlying_router, ListPartitionRouter):
3404
+ if underlying_router.request_option:
3405
+ raise ValueError("Request options are not supported for GroupingPartitionRouter.")
3406
+
3407
+ return GroupingPartitionRouter(
3408
+ group_size=model.group_size,
3409
+ underlying_partition_router=underlying_router,
3410
+ deduplicate=model.deduplicate if model.deduplicate is not None else True,
3411
+ config=config,
3412
+ )
@@ -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
@@ -71,6 +71,10 @@ class AbstractStreamStateConverter(ABC):
71
71
  for stream_slice in state.get("slices", []):
72
72
  stream_slice[self.START_KEY] = self._from_state_message(stream_slice[self.START_KEY])
73
73
  stream_slice[self.END_KEY] = self._from_state_message(stream_slice[self.END_KEY])
74
+ if self.MOST_RECENT_RECORD_KEY in stream_slice:
75
+ stream_slice[self.MOST_RECENT_RECORD_KEY] = self._from_state_message(
76
+ stream_slice[self.MOST_RECENT_RECORD_KEY]
77
+ )
74
78
  return state
75
79
 
76
80
  def serialize(
@@ -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.6" # Version will be calculated dynamically.
26
+ version = "6.41.8" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false
File without changes
File without changes
File without changes