airbyte-cdk 6.32.0__tar.gz → 6.33.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/token.py +3 -8
  3. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +13 -2
  4. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +14 -4
  5. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +7 -6
  6. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +10 -4
  7. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +34 -30
  8. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +4 -2
  9. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +3 -9
  10. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +5 -1
  11. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +6 -5
  12. airbyte_cdk-6.33.0/airbyte_cdk/sources/declarative/requesters/request_option.py +117 -0
  13. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +7 -6
  14. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +4 -1
  15. airbyte_cdk-6.33.0/airbyte_cdk/utils/mapping_helpers.py +104 -0
  16. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/pyproject.toml +1 -1
  17. airbyte_cdk-6.32.0/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -38
  18. airbyte_cdk-6.32.0/airbyte_cdk/utils/mapping_helpers.py +0 -45
  19. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/LICENSE.txt +0 -0
  20. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/LICENSE_SHORT +0 -0
  21. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/README.md +0 -0
  22. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/__init__.py +0 -0
  23. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/__init__.py +0 -0
  24. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  25. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  26. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  27. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/config_observation.py +0 -0
  28. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector.py +0 -0
  29. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/README.md +0 -0
  30. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/__init__.py +0 -0
  31. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  32. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/main.py +0 -0
  33. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  34. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/connector_builder/models.py +0 -0
  35. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/__init__.py +0 -0
  36. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/destination.py +0 -0
  37. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  38. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  39. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  40. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  41. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  42. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  43. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  44. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  45. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  46. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/entrypoint.py +0 -0
  47. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/exception_handler.py +0 -0
  48. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/logger.py +0 -0
  49. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/__init__.py +0 -0
  50. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  51. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  52. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  53. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/models/well_known_types.py +0 -0
  54. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/py.typed +0 -0
  55. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/__init__.py +0 -0
  56. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/abstract_source.py +0 -0
  57. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  58. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  59. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  60. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  61. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  62. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  63. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  64. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/config.py +0 -0
  65. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  66. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  67. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  68. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  69. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  70. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  71. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  72. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  73. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  74. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  75. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  76. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  77. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  78. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  79. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  80. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  81. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  82. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  83. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  84. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  85. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  86. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  87. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  88. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  89. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  90. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  91. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  92. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  93. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  94. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  95. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  96. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  97. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  98. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  99. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  100. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  101. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  102. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  103. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  104. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  105. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  106. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  107. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  108. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  109. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
  110. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  111. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  112. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  113. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  114. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  115. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  116. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  117. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  118. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  119. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  120. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  121. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  122. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  123. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  124. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  125. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  126. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  127. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  128. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  129. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  130. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  131. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  132. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  133. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  134. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  135. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  136. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  137. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  138. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  139. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  140. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  141. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  142. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  143. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  144. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  145. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  146. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  147. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  148. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  149. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  150. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  151. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  152. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  153. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  154. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  155. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  156. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  157. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  158. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  159. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  160. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  161. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  162. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  163. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  164. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  165. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  166. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  167. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  168. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  169. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  170. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  171. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  172. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  173. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  174. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  175. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  176. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  177. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  178. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  179. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  180. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  181. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  182. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  183. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  184. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  185. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  186. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  187. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  188. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  189. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  190. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  191. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  192. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  193. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  194. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  195. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  196. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  197. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  198. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  199. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/types.py +0 -0
  200. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  201. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  202. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  203. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  204. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/runner.py +0 -0
  205. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/embedded/tools.py +0 -0
  206. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/README.md +0 -0
  207. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  208. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  209. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  210. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  211. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  212. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  213. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  214. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  215. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  216. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  217. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  218. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  219. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  220. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  221. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  222. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  223. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  224. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  225. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  226. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  227. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  228. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  229. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  230. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  231. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  232. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  233. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  234. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  235. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  236. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  237. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  238. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  239. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  240. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  241. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  242. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  243. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  244. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  245. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  246. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  247. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  248. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  249. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  250. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  251. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  252. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/file_based/types.py +0 -0
  253. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/http_config.py +0 -0
  254. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/http_logger.py +0 -0
  255. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/message/__init__.py +0 -0
  256. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/message/repository.py +0 -0
  257. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/source.py +0 -0
  258. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/__init__.py +0 -0
  259. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  260. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  261. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  262. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  263. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  264. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  265. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  266. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  267. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  268. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  269. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  270. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  271. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  272. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  273. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  274. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  275. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  276. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  277. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  278. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  279. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  280. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  281. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  282. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  283. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  284. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  285. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  286. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  287. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  288. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  289. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/core.py +0 -0
  290. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  291. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  292. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  293. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  294. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  295. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  296. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  297. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  298. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  299. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  300. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  301. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  302. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/http.py +0 -0
  303. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  304. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  305. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  306. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  307. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  308. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  309. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  310. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  311. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/types.py +0 -0
  312. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/__init__.py +0 -0
  313. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/casing.py +0 -0
  314. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  315. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  316. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  317. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/transform.py +0 -0
  318. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sources/utils/types.py +0 -0
  319. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/__init__.py +0 -0
  320. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/_util/__init__.py +0 -0
  321. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/_util/hashing.py +0 -0
  322. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  323. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/constants.py +0 -0
  324. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/exceptions.py +0 -0
  325. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/secrets.py +0 -0
  326. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/shared/__init__.py +0 -0
  327. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  328. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  329. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/sql/types.py +0 -0
  330. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/__init__.py +0 -0
  331. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/catalog_builder.py +0 -0
  332. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  333. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  334. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  335. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  336. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/request.py +0 -0
  337. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/response.py +0 -0
  338. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  339. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/state_builder.py +0 -0
  340. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/__init__.py +0 -0
  341. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/data.py +0 -0
  342. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  343. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  344. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/test/utils/reading.py +0 -0
  345. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/__init__.py +0 -0
  346. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  347. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/analytics_message.py +0 -0
  348. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/constants.py +0 -0
  349. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  350. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  351. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/event_timing.py +0 -0
  352. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  353. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/message_utils.py +0 -0
  354. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  355. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/print_buffer.py +0 -0
  356. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  357. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/slice_hasher.py +0 -0
  358. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  359. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  360. {airbyte_cdk-6.32.0 → airbyte_cdk-6.33.0}/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.32.0
3
+ Version: 6.33.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -5,7 +5,7 @@
5
5
  import base64
6
6
  import logging
7
7
  from dataclasses import InitVar, dataclass
8
- from typing import Any, Mapping, Union
8
+ from typing import Any, Mapping, MutableMapping, Union
9
9
 
10
10
  import requests
11
11
  from cachetools import TTLCache, cached
@@ -45,11 +45,6 @@ class ApiKeyAuthenticator(DeclarativeAuthenticator):
45
45
  config: Config
46
46
  parameters: InitVar[Mapping[str, Any]]
47
47
 
48
- def __post_init__(self, parameters: Mapping[str, Any]) -> None:
49
- self._field_name = InterpolatedString.create(
50
- self.request_option.field_name, parameters=parameters
51
- )
52
-
53
48
  @property
54
49
  def auth_header(self) -> str:
55
50
  options = self._get_request_options(RequestOptionType.header)
@@ -60,9 +55,9 @@ class ApiKeyAuthenticator(DeclarativeAuthenticator):
60
55
  return self.token_provider.get_token()
61
56
 
62
57
  def _get_request_options(self, option_type: RequestOptionType) -> Mapping[str, Any]:
63
- options = {}
58
+ options: MutableMapping[str, Any] = {}
64
59
  if self.request_option.inject_into == option_type:
65
- options[self._field_name.eval(self.config)] = self.token
60
+ self.request_option.inject_into_request(options, self.token, self.config)
66
61
  return options
67
62
 
68
63
  def get_request_params(self) -> Mapping[str, Any]:
@@ -475,10 +475,21 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
475
475
  # Also a temporary hack. In the legacy Stream implementation, as part of the read,
476
476
  # set_initial_state() is called to instantiate incoming state on the cursor. Although we no
477
477
  # longer rely on the legacy low-code cursor for concurrent checkpointing, low-code components
478
- # like StopConditionPaginationStrategyDecorator and ClientSideIncrementalRecordFilterDecorator
479
- # still rely on a DatetimeBasedCursor that is properly initialized with state.
478
+ # like StopConditionPaginationStrategyDecorator still rely on a DatetimeBasedCursor that is
479
+ # properly initialized with state.
480
480
  if retriever.cursor:
481
481
  retriever.cursor.set_initial_state(stream_state=stream_state)
482
+
483
+ # Similar to above, the ClientSideIncrementalRecordFilterDecorator cursor is a separate instance
484
+ # from the one initialized on the SimpleRetriever, so it also must also have state initialized
485
+ # for semi-incremental streams using is_client_side_incremental to filter properly
486
+ if isinstance(retriever.record_selector, RecordSelector) and isinstance(
487
+ retriever.record_selector.record_filter, ClientSideIncrementalRecordFilterDecorator
488
+ ):
489
+ retriever.record_selector.record_filter._cursor.set_initial_state(
490
+ stream_state=stream_state
491
+ ) # type: ignore # After non-concurrent cursors are deprecated we can remove these cursor workarounds
492
+
482
493
  # We zero it out here, but since this is a cursor reference, the state is still properly
483
494
  # instantiated for the other components that reference it
484
495
  retriever.cursor = None
@@ -2847,25 +2847,35 @@ definitions:
2847
2847
  enum: [RequestPath]
2848
2848
  RequestOption:
2849
2849
  title: Request Option
2850
- description: Specifies the key field and where in the request a component's value should be injected.
2850
+ description: Specifies the key field or path and where in the request a component's value should be injected.
2851
2851
  type: object
2852
2852
  required:
2853
2853
  - type
2854
- - field_name
2855
2854
  - inject_into
2856
2855
  properties:
2857
2856
  type:
2858
2857
  type: string
2859
2858
  enum: [RequestOption]
2860
2859
  field_name:
2861
- title: Request Option
2862
- description: Configures which key should be used in the location that the descriptor is being injected into
2860
+ title: Field Name
2861
+ description: Configures which key should be used in the location that the descriptor is being injected into. We hope to eventually deprecate this field in favor of `field_path` for all request_options, but must currently maintain it for backwards compatibility in the Builder.
2863
2862
  type: string
2864
2863
  examples:
2865
2864
  - segment_id
2866
2865
  interpolation_context:
2867
2866
  - config
2868
2867
  - parameters
2868
+ field_path:
2869
+ title: Field Path
2870
+ description: Configures a path to be used for nested structures in JSON body requests (e.g. GraphQL queries)
2871
+ type: array
2872
+ items:
2873
+ type: string
2874
+ examples:
2875
+ - ["data", "viewer", "id"]
2876
+ interpolation_context:
2877
+ - config
2878
+ - parameters
2869
2879
  inject_into:
2870
2880
  title: Inject Into
2871
2881
  description: Configures where the descriptor should be set on the HTTP requests. Note that request parameters that are already encoded in the URL path will not be duplicated.
@@ -365,14 +365,15 @@ class DatetimeBasedCursor(DeclarativeCursor):
365
365
  options: MutableMapping[str, Any] = {}
366
366
  if not stream_slice:
367
367
  return options
368
+
368
369
  if self.start_time_option and self.start_time_option.inject_into == option_type:
369
- options[self.start_time_option.field_name.eval(config=self.config)] = stream_slice.get( # type: ignore # field_name is always casted to an interpolated string
370
- self._partition_field_start.eval(self.config)
371
- )
370
+ start_time_value = stream_slice.get(self._partition_field_start.eval(self.config))
371
+ self.start_time_option.inject_into_request(options, start_time_value, self.config)
372
+
372
373
  if self.end_time_option and self.end_time_option.inject_into == option_type:
373
- options[self.end_time_option.field_name.eval(config=self.config)] = stream_slice.get( # type: ignore [union-attr]
374
- self._partition_field_end.eval(self.config)
375
- )
374
+ end_time_value = stream_slice.get(self._partition_field_end.eval(self.config))
375
+ self.end_time_option.inject_into_request(options, end_time_value, self.config)
376
+
376
377
  return options
377
378
 
378
379
  def should_be_synced(self, record: Record) -> bool:
@@ -1200,11 +1200,17 @@ class InjectInto(Enum):
1200
1200
 
1201
1201
  class RequestOption(BaseModel):
1202
1202
  type: Literal["RequestOption"]
1203
- field_name: str = Field(
1204
- ...,
1205
- description="Configures which key should be used in the location that the descriptor is being injected into",
1203
+ field_name: Optional[str] = Field(
1204
+ None,
1205
+ description="Configures which key should be used in the location that the descriptor is being injected into. We hope to eventually deprecate this field in favor of `field_path` for all request_options, but must currently maintain it for backwards compatibility in the Builder.",
1206
1206
  examples=["segment_id"],
1207
- title="Request Option",
1207
+ title="Field Name",
1208
+ )
1209
+ field_path: Optional[List[str]] = Field(
1210
+ None,
1211
+ description="Configures a path to be used for nested structures in JSON body requests (e.g. GraphQL queries)",
1212
+ examples=[["data", "viewer", "id"]],
1213
+ title="Field Path",
1208
1214
  )
1209
1215
  inject_into: InjectInto = Field(
1210
1216
  ...,
@@ -733,8 +733,8 @@ class ModelToComponentFactory:
733
733
  }
734
734
  return names_to_types[value_type]
735
735
 
736
- @staticmethod
737
736
  def create_api_key_authenticator(
737
+ self,
738
738
  model: ApiKeyAuthenticatorModel,
739
739
  config: Config,
740
740
  token_provider: Optional[TokenProvider] = None,
@@ -756,10 +756,8 @@ class ModelToComponentFactory:
756
756
  )
757
757
 
758
758
  request_option = (
759
- RequestOption(
760
- inject_into=RequestOptionType(model.inject_into.inject_into.value),
761
- field_name=model.inject_into.field_name,
762
- parameters=model.parameters or {},
759
+ self._create_component_from_model(
760
+ model.inject_into, config, parameters=model.parameters or {}
763
761
  )
764
762
  if model.inject_into
765
763
  else RequestOption(
@@ -768,6 +766,7 @@ class ModelToComponentFactory:
768
766
  parameters=model.parameters or {},
769
767
  )
770
768
  )
769
+
771
770
  return ApiKeyAuthenticator(
772
771
  token_provider=(
773
772
  token_provider
@@ -849,7 +848,7 @@ class ModelToComponentFactory:
849
848
  token_provider=token_provider,
850
849
  )
851
850
  else:
852
- return ModelToComponentFactory.create_api_key_authenticator(
851
+ return self.create_api_key_authenticator(
853
852
  ApiKeyAuthenticatorModel(
854
853
  type="ApiKeyAuthenticator",
855
854
  api_token="",
@@ -1489,19 +1488,15 @@ class ModelToComponentFactory:
1489
1488
  )
1490
1489
 
1491
1490
  end_time_option = (
1492
- RequestOption(
1493
- inject_into=RequestOptionType(model.end_time_option.inject_into.value),
1494
- field_name=model.end_time_option.field_name,
1495
- parameters=model.parameters or {},
1491
+ self._create_component_from_model(
1492
+ model.end_time_option, config, parameters=model.parameters or {}
1496
1493
  )
1497
1494
  if model.end_time_option
1498
1495
  else None
1499
1496
  )
1500
1497
  start_time_option = (
1501
- RequestOption(
1502
- inject_into=RequestOptionType(model.start_time_option.inject_into.value),
1503
- field_name=model.start_time_option.field_name,
1504
- parameters=model.parameters or {},
1498
+ self._create_component_from_model(
1499
+ model.start_time_option, config, parameters=model.parameters or {}
1505
1500
  )
1506
1501
  if model.start_time_option
1507
1502
  else None
@@ -1572,19 +1567,15 @@ class ModelToComponentFactory:
1572
1567
  cursor_model = model.incremental_sync
1573
1568
 
1574
1569
  end_time_option = (
1575
- RequestOption(
1576
- inject_into=RequestOptionType(cursor_model.end_time_option.inject_into.value),
1577
- field_name=cursor_model.end_time_option.field_name,
1578
- parameters=cursor_model.parameters or {},
1570
+ self._create_component_from_model(
1571
+ cursor_model.end_time_option, config, parameters=cursor_model.parameters or {}
1579
1572
  )
1580
1573
  if cursor_model.end_time_option
1581
1574
  else None
1582
1575
  )
1583
1576
  start_time_option = (
1584
- RequestOption(
1585
- inject_into=RequestOptionType(cursor_model.start_time_option.inject_into.value),
1586
- field_name=cursor_model.start_time_option.field_name,
1587
- parameters=cursor_model.parameters or {},
1577
+ self._create_component_from_model(
1578
+ cursor_model.start_time_option, config, parameters=cursor_model.parameters or {}
1588
1579
  )
1589
1580
  if cursor_model.start_time_option
1590
1581
  else None
@@ -2150,16 +2141,11 @@ class ModelToComponentFactory:
2150
2141
  additional_jwt_payload=model.additional_jwt_payload,
2151
2142
  )
2152
2143
 
2153
- @staticmethod
2154
2144
  def create_list_partition_router(
2155
- model: ListPartitionRouterModel, config: Config, **kwargs: Any
2145
+ self, model: ListPartitionRouterModel, config: Config, **kwargs: Any
2156
2146
  ) -> ListPartitionRouter:
2157
2147
  request_option = (
2158
- RequestOption(
2159
- inject_into=RequestOptionType(model.request_option.inject_into.value),
2160
- field_name=model.request_option.field_name,
2161
- parameters=model.parameters or {},
2162
- )
2148
+ self._create_component_from_model(model.request_option, config)
2163
2149
  if model.request_option
2164
2150
  else None
2165
2151
  )
@@ -2355,7 +2341,25 @@ class ModelToComponentFactory:
2355
2341
  model: RequestOptionModel, config: Config, **kwargs: Any
2356
2342
  ) -> RequestOption:
2357
2343
  inject_into = RequestOptionType(model.inject_into.value)
2358
- return RequestOption(field_name=model.field_name, inject_into=inject_into, parameters={})
2344
+ field_path: Optional[List[Union[InterpolatedString, str]]] = (
2345
+ [
2346
+ InterpolatedString.create(segment, parameters=kwargs.get("parameters", {}))
2347
+ for segment in model.field_path
2348
+ ]
2349
+ if model.field_path
2350
+ else None
2351
+ )
2352
+ field_name = (
2353
+ InterpolatedString.create(model.field_name, parameters=kwargs.get("parameters", {}))
2354
+ if model.field_name
2355
+ else None
2356
+ )
2357
+ return RequestOption(
2358
+ field_name=field_name,
2359
+ field_path=field_path,
2360
+ inject_into=inject_into,
2361
+ parameters=kwargs.get("parameters", {}),
2362
+ )
2359
2363
 
2360
2364
  def create_record_selector(
2361
2365
  self,
@@ -3,7 +3,7 @@
3
3
  #
4
4
 
5
5
  from dataclasses import InitVar, dataclass
6
- from typing import Any, Iterable, List, Mapping, Optional, Union
6
+ from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Union
7
7
 
8
8
  from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
9
9
  from airbyte_cdk.sources.declarative.partition_routers.partition_router import PartitionRouter
@@ -100,7 +100,9 @@ class ListPartitionRouter(PartitionRouter):
100
100
  ):
101
101
  slice_value = stream_slice.get(self._cursor_field.eval(self.config))
102
102
  if slice_value:
103
- return {self.request_option.field_name.eval(self.config): slice_value} # type: ignore # field_name is always casted to InterpolatedString
103
+ options: MutableMapping[str, Any] = {}
104
+ self.request_option.inject_into_request(options, slice_value, self.config)
105
+ return options
104
106
  else:
105
107
  return {}
106
108
  else:
@@ -4,7 +4,7 @@
4
4
  import copy
5
5
  import logging
6
6
  from dataclasses import InitVar, dataclass
7
- from typing import TYPE_CHECKING, Any, Iterable, List, Mapping, Optional, Union
7
+ from typing import TYPE_CHECKING, Any, Iterable, List, Mapping, MutableMapping, Optional, Union
8
8
 
9
9
  import dpath
10
10
 
@@ -118,7 +118,7 @@ class SubstreamPartitionRouter(PartitionRouter):
118
118
  def _get_request_option(
119
119
  self, option_type: RequestOptionType, stream_slice: Optional[StreamSlice]
120
120
  ) -> Mapping[str, Any]:
121
- params = {}
121
+ params: MutableMapping[str, Any] = {}
122
122
  if stream_slice:
123
123
  for parent_config in self.parent_stream_configs:
124
124
  if (
@@ -128,13 +128,7 @@ class SubstreamPartitionRouter(PartitionRouter):
128
128
  key = parent_config.partition_field.eval(self.config) # type: ignore # partition_field is always casted to an interpolated string
129
129
  value = stream_slice.get(key)
130
130
  if value:
131
- params.update(
132
- {
133
- parent_config.request_option.field_name.eval( # type: ignore [union-attr]
134
- config=self.config
135
- ): value
136
- }
137
- )
131
+ parent_config.request_option.inject_into_request(params, value, self.config)
138
132
  return params
139
133
 
140
134
  def stream_slices(self) -> Iterable[StreamSlice]:
@@ -199,6 +199,9 @@ class HttpRequester(Requester):
199
199
  Raise a ValueError if there's a key collision
200
200
  Returned merged mapping otherwise
201
201
  """
202
+
203
+ is_body_json = requester_method.__name__ == "get_request_body_json"
204
+
202
205
  return combine_mappings(
203
206
  [
204
207
  requester_method(
@@ -208,7 +211,8 @@ class HttpRequester(Requester):
208
211
  ),
209
212
  auth_options_method(),
210
213
  extra_options,
211
- ]
214
+ ],
215
+ allow_same_value_merge=is_body_json,
212
216
  )
213
217
 
214
218
  def _request_headers(
@@ -187,7 +187,7 @@ class DefaultPaginator(Paginator):
187
187
  def _get_request_options(
188
188
  self, option_type: RequestOptionType, next_page_token: Optional[Mapping[str, Any]]
189
189
  ) -> MutableMapping[str, Any]:
190
- options = {}
190
+ options: MutableMapping[str, Any] = {}
191
191
 
192
192
  token = next_page_token.get("next_page_token") if next_page_token else None
193
193
  if (
@@ -196,15 +196,16 @@ class DefaultPaginator(Paginator):
196
196
  and isinstance(self.page_token_option, RequestOption)
197
197
  and self.page_token_option.inject_into == option_type
198
198
  ):
199
- options[self.page_token_option.field_name.eval(config=self.config)] = token # type: ignore # field_name is always cast to an interpolated string
199
+ self.page_token_option.inject_into_request(options, token, self.config)
200
+
200
201
  if (
201
202
  self.page_size_option
202
203
  and self.pagination_strategy.get_page_size()
203
204
  and self.page_size_option.inject_into == option_type
204
205
  ):
205
- options[self.page_size_option.field_name.eval(config=self.config)] = ( # type: ignore [union-attr]
206
- self.pagination_strategy.get_page_size()
207
- ) # type: ignore # field_name is always cast to an interpolated string
206
+ page_size = self.pagination_strategy.get_page_size()
207
+ self.page_size_option.inject_into_request(options, page_size, self.config)
208
+
208
209
  return options
209
210
 
210
211
 
@@ -0,0 +1,117 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ from dataclasses import InitVar, dataclass
6
+ from enum import Enum
7
+ from typing import Any, List, Literal, Mapping, MutableMapping, Optional, Union
8
+
9
+ from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
10
+ from airbyte_cdk.sources.types import Config
11
+
12
+
13
+ class RequestOptionType(Enum):
14
+ """
15
+ Describes where to set a value on a request
16
+ """
17
+
18
+ request_parameter = "request_parameter"
19
+ header = "header"
20
+ body_data = "body_data"
21
+ body_json = "body_json"
22
+
23
+
24
+ @dataclass
25
+ class RequestOption:
26
+ """
27
+ Describes an option to set on a request
28
+
29
+ Attributes:
30
+ field_name (str): Describes the name of the parameter to inject. Mutually exclusive with field_path.
31
+ field_path (list(str)): Describes the path to a nested field as a list of field names.
32
+ Only valid for body_json injection type, and mutually exclusive with field_name.
33
+ inject_into (RequestOptionType): Describes where in the HTTP request to inject the parameter
34
+ """
35
+
36
+ inject_into: RequestOptionType
37
+ parameters: InitVar[Mapping[str, Any]]
38
+ field_name: Optional[Union[InterpolatedString, str]] = None
39
+ field_path: Optional[List[Union[InterpolatedString, str]]] = None
40
+
41
+ def __post_init__(self, parameters: Mapping[str, Any]) -> None:
42
+ # Validate inputs. We should expect either field_name or field_path, but not both
43
+ if self.field_name is None and self.field_path is None:
44
+ raise ValueError("RequestOption requires either a field_name or field_path")
45
+
46
+ if self.field_name is not None and self.field_path is not None:
47
+ raise ValueError(
48
+ "Only one of field_name or field_path can be provided to RequestOption"
49
+ )
50
+
51
+ # Nested field injection is only supported for body JSON injection
52
+ if self.field_path is not None and self.inject_into != RequestOptionType.body_json:
53
+ raise ValueError(
54
+ "Nested field injection is only supported for body JSON injection. Please use a top-level field_name for other injection types."
55
+ )
56
+
57
+ # Convert field_name and field_path into InterpolatedString objects if they are strings
58
+ if self.field_name is not None:
59
+ self.field_name = InterpolatedString.create(self.field_name, parameters=parameters)
60
+ elif self.field_path is not None:
61
+ self.field_path = [
62
+ InterpolatedString.create(segment, parameters=parameters)
63
+ for segment in self.field_path
64
+ ]
65
+
66
+ @property
67
+ def _is_field_path(self) -> bool:
68
+ """Returns whether this option is a field path (ie, a nested field)"""
69
+ return self.field_path is not None
70
+
71
+ def inject_into_request(
72
+ self,
73
+ target: MutableMapping[str, Any],
74
+ value: Any,
75
+ config: Config,
76
+ ) -> None:
77
+ """
78
+ Inject a request option value into a target request structure using either field_name or field_path.
79
+ For non-body-json injection, only top-level field names are supported.
80
+ For body-json injection, both field names and nested field paths are supported.
81
+
82
+ Args:
83
+ target: The request structure to inject the value into
84
+ value: The value to inject
85
+ config: The config object to use for interpolation
86
+ """
87
+ if self._is_field_path:
88
+ if self.inject_into != RequestOptionType.body_json:
89
+ raise ValueError(
90
+ "Nested field injection is only supported for body JSON injection. Please use a top-level field_name for other injection types."
91
+ )
92
+
93
+ assert self.field_path is not None # for type checker
94
+ current = target
95
+ # Convert path segments into strings, evaluating any interpolated segments
96
+ # Example: ["data", "{{ config[user_type] }}", "id"] -> ["data", "admin", "id"]
97
+ *path_parts, final_key = [
98
+ str(
99
+ segment.eval(config=config)
100
+ if isinstance(segment, InterpolatedString)
101
+ else segment
102
+ )
103
+ for segment in self.field_path
104
+ ]
105
+
106
+ # Build a nested dictionary structure and set the final value at the deepest level
107
+ for part in path_parts:
108
+ current = current.setdefault(part, {})
109
+ current[final_key] = value
110
+ else:
111
+ # For non-nested fields, evaluate the field name if it's an interpolated string
112
+ key = (
113
+ self.field_name.eval(config=config)
114
+ if isinstance(self.field_name, InterpolatedString)
115
+ else self.field_name
116
+ )
117
+ target[str(key)] = value
@@ -80,12 +80,13 @@ class DatetimeBasedRequestOptionsProvider(RequestOptionsProvider):
80
80
  options: MutableMapping[str, Any] = {}
81
81
  if not stream_slice:
82
82
  return options
83
+
83
84
  if self.start_time_option and self.start_time_option.inject_into == option_type:
84
- options[self.start_time_option.field_name.eval(config=self.config)] = stream_slice.get( # type: ignore # field_name is always casted to an interpolated string
85
- self._partition_field_start.eval(self.config)
86
- )
85
+ start_time_value = stream_slice.get(self._partition_field_start.eval(self.config))
86
+ self.start_time_option.inject_into_request(options, start_time_value, self.config)
87
+
87
88
  if self.end_time_option and self.end_time_option.inject_into == option_type:
88
- options[self.end_time_option.field_name.eval(config=self.config)] = stream_slice.get( # type: ignore [union-attr]
89
- self._partition_field_end.eval(self.config)
90
- )
89
+ end_time_value = stream_slice.get(self._partition_field_end.eval(self.config))
90
+ self.end_time_option.inject_into_request(options, end_time_value, self.config)
91
+
91
92
  return options
@@ -128,6 +128,9 @@ class SimpleRetriever(Retriever):
128
128
  Returned merged mapping otherwise
129
129
  """
130
130
  # FIXME we should eventually remove the usage of stream_state as part of the interpolation
131
+
132
+ is_body_json = paginator_method.__name__ == "get_request_body_json"
133
+
131
134
  mappings = [
132
135
  paginator_method(
133
136
  stream_state=stream_state,
@@ -143,7 +146,7 @@ class SimpleRetriever(Retriever):
143
146
  next_page_token=next_page_token,
144
147
  )
145
148
  )
146
- return combine_mappings(mappings)
149
+ return combine_mappings(mappings, allow_same_value_merge=is_body_json)
147
150
 
148
151
  def _request_headers(
149
152
  self,
@@ -0,0 +1,104 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+
6
+ import copy
7
+ from typing import Any, Dict, List, Mapping, Optional, Union
8
+
9
+
10
+ def _merge_mappings(
11
+ target: Dict[str, Any],
12
+ source: Mapping[str, Any],
13
+ path: Optional[List[str]] = None,
14
+ allow_same_value_merge: bool = False,
15
+ ) -> None:
16
+ """
17
+ Recursively merge two dictionaries, raising an error if there are any conflicts.
18
+ For body_json requests (allow_same_value_merge=True), a conflict occurs only when the same path has different values.
19
+ For other request types (allow_same_value_merge=False), any duplicate key is a conflict, regardless of value.
20
+
21
+ Args:
22
+ target: The dictionary to merge into
23
+ source: The dictionary to merge from
24
+ path: The current path in the nested structure (for error messages)
25
+ allow_same_value_merge: Whether to allow merging the same value into the same key. Set to false by default, should only be true for body_json injections
26
+ """
27
+ path = path or []
28
+ for key, source_value in source.items():
29
+ current_path = path + [str(key)]
30
+
31
+ if key in target:
32
+ target_value = target[key]
33
+ if isinstance(target_value, dict) and isinstance(source_value, dict):
34
+ # Only body_json supports nested_structures
35
+ if not allow_same_value_merge:
36
+ raise ValueError(f"Duplicate keys found: {'.'.join(current_path)}")
37
+ # If both are dictionaries, recursively merge them
38
+ _merge_mappings(target_value, source_value, current_path, allow_same_value_merge)
39
+
40
+ elif not allow_same_value_merge or target_value != source_value:
41
+ # If same key has different values, that's a conflict
42
+ raise ValueError(f"Duplicate keys found: {'.'.join(current_path)}")
43
+ else:
44
+ # No conflict, just copy the value (using deepcopy for nested structures)
45
+ target[key] = copy.deepcopy(source_value)
46
+
47
+
48
+ def combine_mappings(
49
+ mappings: List[Optional[Union[Mapping[str, Any], str]]],
50
+ allow_same_value_merge: bool = False,
51
+ ) -> Union[Mapping[str, Any], str]:
52
+ """
53
+ Combine multiple mappings into a single mapping.
54
+
55
+ For body_json requests (allow_same_value_merge=True):
56
+ - Supports nested structures (e.g., {"data": {"user": {"id": 1}}})
57
+ - Allows duplicate keys if their values match
58
+ - Raises error if same path has different values
59
+
60
+ For other request types (allow_same_value_merge=False):
61
+ - Only supports flat structures
62
+ - Any duplicate key raises an error, regardless of value
63
+
64
+ Args:
65
+ mappings: List of mappings to combine
66
+ allow_same_value_merge: Whether to allow duplicate keys with matching values.
67
+ Should only be True for body_json requests.
68
+
69
+ Returns:
70
+ A single mapping combining all inputs, or a string if there is exactly one
71
+ string mapping and no other non-empty mappings.
72
+
73
+ Raises:
74
+ ValueError: If there are:
75
+ - Multiple string mappings
76
+ - Both a string mapping and non-empty dictionary mappings
77
+ - Conflicting keys/paths based on allow_same_value_merge setting
78
+ """
79
+ if not mappings:
80
+ return {}
81
+
82
+ # Count how many string options we have, ignoring None values
83
+ string_options = sum(isinstance(mapping, str) for mapping in mappings if mapping is not None)
84
+ if string_options > 1:
85
+ raise ValueError("Cannot combine multiple string options")
86
+
87
+ # Filter out None values and empty mappings
88
+ non_empty_mappings = [
89
+ m for m in mappings if m is not None and not (isinstance(m, Mapping) and not m)
90
+ ]
91
+
92
+ # If there is only one string option and no other non-empty mappings, return it
93
+ if string_options == 1:
94
+ if len(non_empty_mappings) > 1:
95
+ raise ValueError("Cannot combine multiple options if one is a string")
96
+ return next(m for m in non_empty_mappings if isinstance(m, str))
97
+
98
+ # Start with an empty result and merge each mapping into it
99
+ result: Dict[str, Any] = {}
100
+ for mapping in non_empty_mappings:
101
+ if mapping and isinstance(mapping, Mapping):
102
+ _merge_mappings(result, mapping, allow_same_value_merge=allow_same_value_merge)
103
+
104
+ return result
@@ -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.32.0" # Version will be calculated dynamically.
26
+ version = "6.33.0" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false