airbyte-cdk 6.14.0.dev1__tar.gz → 6.15.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 (347) hide show
  1. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/PKG-INFO +1 -1
  2. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +51 -27
  3. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +45 -0
  4. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +19 -0
  5. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +14 -0
  6. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +35 -52
  7. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +7 -10
  8. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +4 -9
  9. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +6 -11
  10. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +13 -13
  11. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +13 -14
  12. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +8 -7
  13. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +10 -10
  14. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +64 -71
  15. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +3 -3
  16. airbyte_cdk-6.15.0/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +61 -0
  17. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/pyproject.toml +1 -1
  18. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/LICENSE.txt +0 -0
  19. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/README.md +0 -0
  20. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/__init__.py +0 -0
  21. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/cli/__init__.py +0 -0
  22. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  23. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  24. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  25. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/config_observation.py +0 -0
  26. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector.py +0 -0
  27. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector_builder/README.md +0 -0
  28. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector_builder/__init__.py +0 -0
  29. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  30. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector_builder/main.py +0 -0
  31. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  32. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/connector_builder/models.py +0 -0
  33. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/__init__.py +0 -0
  34. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/destination.py +0 -0
  35. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  36. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  37. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  38. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  39. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  40. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  41. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  42. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  43. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  44. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/entrypoint.py +0 -0
  45. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/exception_handler.py +0 -0
  46. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/logger.py +0 -0
  47. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/models/__init__.py +0 -0
  48. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  49. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  50. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  51. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/models/well_known_types.py +0 -0
  52. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/py.typed +0 -0
  53. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/__init__.py +0 -0
  54. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/abstract_source.py +0 -0
  55. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  56. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  57. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  58. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  59. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  60. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  61. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  62. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/config.py +0 -0
  63. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  64. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  65. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  66. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  67. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  68. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  69. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  70. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  71. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  72. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  73. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  74. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  75. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  76. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  77. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  78. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  79. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  80. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  81. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  82. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  83. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  84. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  85. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  86. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  87. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  88. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  89. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  90. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  91. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  92. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  93. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  94. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  95. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  96. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  97. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  98. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  99. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  100. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  101. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  102. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  103. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  104. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  105. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  106. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  107. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  108. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  109. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  110. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  111. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  112. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  113. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  114. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  115. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  116. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  117. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  118. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  119. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  120. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  121. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  122. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  123. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  124. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  125. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  126. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  127. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  128. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  129. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  130. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  131. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  132. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  133. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  134. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  135. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  136. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  137. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  138. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  139. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  140. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  141. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  142. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  143. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  144. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  145. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  146. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  147. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  148. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  149. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  150. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  151. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  152. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  153. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  154. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  155. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  156. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  157. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  158. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  159. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  160. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  161. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  162. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  163. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  164. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  165. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  166. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  167. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  168. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  169. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  170. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  171. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  172. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  173. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  174. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  175. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  176. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  177. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  178. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  179. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  180. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  181. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  182. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  183. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  184. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  185. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  186. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  187. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  188. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/types.py +0 -0
  189. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  190. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  191. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  192. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  193. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/embedded/runner.py +0 -0
  194. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/embedded/tools.py +0 -0
  195. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/README.md +0 -0
  196. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  197. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  198. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  199. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  200. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  201. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  202. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  203. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  204. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  205. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  206. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  207. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  208. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  209. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  210. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  211. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  212. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  213. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  214. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  215. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  216. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  217. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  218. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  219. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  220. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  221. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  222. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  223. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  224. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  225. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  226. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  227. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  228. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  229. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  230. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  231. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  232. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  233. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  234. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  235. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  236. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  237. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  238. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  239. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  240. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  241. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/file_based/types.py +0 -0
  242. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/http_config.py +0 -0
  243. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/http_logger.py +0 -0
  244. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/message/__init__.py +0 -0
  245. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/message/repository.py +0 -0
  246. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/source.py +0 -0
  247. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/__init__.py +0 -0
  248. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  249. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  250. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  251. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  252. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  253. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  254. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  255. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  256. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  257. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  258. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  259. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  260. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  261. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  262. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  263. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  264. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  265. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  266. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  267. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  268. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  269. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  270. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  271. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  272. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  273. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  274. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  275. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  276. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/core.py +0 -0
  277. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  278. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  279. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  280. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  281. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  282. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  283. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  284. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  285. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  286. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  287. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  288. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  289. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/http.py +0 -0
  290. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  291. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  292. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  293. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  294. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  295. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  296. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  297. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  298. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/types.py +0 -0
  299. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/__init__.py +0 -0
  300. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/casing.py +0 -0
  301. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  302. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  303. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  304. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/transform.py +0 -0
  305. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sources/utils/types.py +0 -0
  306. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/__init__.py +0 -0
  307. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/_util/__init__.py +0 -0
  308. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/_util/hashing.py +0 -0
  309. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  310. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/constants.py +0 -0
  311. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/exceptions.py +0 -0
  312. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/secrets.py +0 -0
  313. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/shared/__init__.py +0 -0
  314. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  315. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  316. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/sql/types.py +0 -0
  317. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/__init__.py +0 -0
  318. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/catalog_builder.py +0 -0
  319. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  320. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  321. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  322. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  323. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/mock_http/request.py +0 -0
  324. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/mock_http/response.py +0 -0
  325. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  326. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/state_builder.py +0 -0
  327. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/utils/__init__.py +0 -0
  328. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/utils/data.py +0 -0
  329. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  330. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  331. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/test/utils/reading.py +0 -0
  332. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/__init__.py +0 -0
  333. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  334. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/analytics_message.py +0 -0
  335. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/constants.py +0 -0
  336. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  337. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/event_timing.py +0 -0
  338. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  339. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  340. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/message_utils.py +0 -0
  341. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  342. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/print_buffer.py +0 -0
  343. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  344. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/slice_hasher.py +0 -0
  345. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  346. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  347. {airbyte_cdk-6.14.0.dev1 → airbyte_cdk-6.15.0}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-cdk
3
- Version: 6.14.0.dev1
3
+ Version: 6.15.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -3,7 +3,7 @@
3
3
  #
4
4
 
5
5
  import logging
6
- from typing import Any, Generic, Iterator, List, Mapping, Optional, Tuple
6
+ from typing import Any, Callable, Generic, Iterator, List, Mapping, Optional, Tuple, Union
7
7
 
8
8
  from airbyte_cdk.models import (
9
9
  AirbyteCatalog,
@@ -28,11 +28,15 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
28
28
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
29
29
  DatetimeBasedCursor as DatetimeBasedCursorModel,
30
30
  )
31
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
32
+ DeclarativeStream as DeclarativeStreamModel,
33
+ )
31
34
  from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
35
+ ComponentDefinition,
32
36
  ModelToComponentFactory,
33
37
  )
34
38
  from airbyte_cdk.sources.declarative.requesters import HttpRequester
35
- from airbyte_cdk.sources.declarative.retrievers import SimpleRetriever
39
+ from airbyte_cdk.sources.declarative.retrievers import Retriever, SimpleRetriever
36
40
  from airbyte_cdk.sources.declarative.stream_slicers.declarative_partition_generator import (
37
41
  DeclarativePartitionFactory,
38
42
  StreamSlicerPartitionGenerator,
@@ -48,6 +52,7 @@ from airbyte_cdk.sources.streams.concurrent.availability_strategy import (
48
52
  from airbyte_cdk.sources.streams.concurrent.cursor import FinalStateCursor
49
53
  from airbyte_cdk.sources.streams.concurrent.default_stream import DefaultStream
50
54
  from airbyte_cdk.sources.streams.concurrent.helpers import get_primary_key_from_stream
55
+ from airbyte_cdk.sources.types import Config, StreamState
51
56
 
52
57
 
53
58
  class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
@@ -189,11 +194,10 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
189
194
  # Some low-code sources use a combination of DeclarativeStream and regular Python streams. We can't inspect
190
195
  # these legacy Python streams the way we do low-code streams to determine if they are concurrent compatible,
191
196
  # so we need to treat them as synchronous
192
- if isinstance(declarative_stream, DeclarativeStream) and (
193
- name_to_stream_mapping[declarative_stream.name]["retriever"]["type"]
197
+ if (
198
+ isinstance(declarative_stream, DeclarativeStream)
199
+ and name_to_stream_mapping[declarative_stream.name]["retriever"]["type"]
194
200
  == "SimpleRetriever"
195
- or name_to_stream_mapping[declarative_stream.name]["retriever"]["type"]
196
- == "AsyncRetriever"
197
201
  ):
198
202
  incremental_sync_component_definition = name_to_stream_mapping[
199
203
  declarative_stream.name
@@ -213,11 +217,6 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
213
217
  and not incremental_sync_component_definition
214
218
  )
215
219
 
216
- is_async_job_stream = (
217
- name_to_stream_mapping[declarative_stream.name].get("retriever", {}).get("type")
218
- == "AsyncRetriever"
219
- )
220
-
221
220
  if self._is_datetime_incremental_without_partition_routing(
222
221
  declarative_stream, incremental_sync_component_definition
223
222
  ):
@@ -235,25 +234,15 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
235
234
  stream_state=stream_state,
236
235
  )
237
236
 
238
- retriever = declarative_stream.retriever
239
-
240
- # This is an optimization so that we don't invoke any cursor or state management flows within the
241
- # low-code framework because state management is handled through the ConcurrentCursor.
242
- if declarative_stream and isinstance(retriever, SimpleRetriever):
243
- # Also a temporary hack. In the legacy Stream implementation, as part of the read,
244
- # set_initial_state() is called to instantiate incoming state on the cursor. Although we no
245
- # longer rely on the legacy low-code cursor for concurrent checkpointing, low-code components
246
- # like StopConditionPaginationStrategyDecorator and ClientSideIncrementalRecordFilterDecorator
247
- # still rely on a DatetimeBasedCursor that is properly initialized with state.
248
- if retriever.cursor:
249
- retriever.cursor.set_initial_state(stream_state=stream_state)
250
- retriever.cursor = None
251
-
252
237
  partition_generator = StreamSlicerPartitionGenerator(
253
238
  DeclarativePartitionFactory(
254
239
  declarative_stream.name,
255
240
  declarative_stream.get_json_schema(),
256
- retriever,
241
+ self._retriever_factory(
242
+ name_to_stream_mapping[declarative_stream.name],
243
+ config,
244
+ stream_state,
245
+ ),
257
246
  self.message_repository,
258
247
  ),
259
248
  cursor,
@@ -283,7 +272,11 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
283
272
  DeclarativePartitionFactory(
284
273
  declarative_stream.name,
285
274
  declarative_stream.get_json_schema(),
286
- declarative_stream.retriever,
275
+ self._retriever_factory(
276
+ name_to_stream_mapping[declarative_stream.name],
277
+ config,
278
+ {},
279
+ ),
287
280
  self.message_repository,
288
281
  ),
289
282
  declarative_stream.retriever.stream_slicer,
@@ -422,3 +415,34 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
422
415
  if stream.stream.name not in concurrent_stream_names
423
416
  ]
424
417
  )
418
+
419
+ def _retriever_factory(
420
+ self, stream_config: ComponentDefinition, source_config: Config, stream_state: StreamState
421
+ ) -> Callable[[], Retriever]:
422
+ def _factory_method() -> Retriever:
423
+ declarative_stream: DeclarativeStream = self._constructor.create_component(
424
+ DeclarativeStreamModel,
425
+ stream_config,
426
+ source_config,
427
+ emit_connector_builder_messages=self._emit_connector_builder_messages,
428
+ )
429
+
430
+ # This is an optimization so that we don't invoke any cursor or state management flows within the
431
+ # low-code framework because state management is handled through the ConcurrentCursor.
432
+ if (
433
+ declarative_stream
434
+ and declarative_stream.retriever
435
+ and isinstance(declarative_stream.retriever, SimpleRetriever)
436
+ ):
437
+ # Also a temporary hack. In the legacy Stream implementation, as part of the read, set_initial_state() is
438
+ # called to instantiate incoming state on the cursor. Although we no longer rely on the legacy low-code cursor
439
+ # for concurrent checkpointing, low-code components like StopConditionPaginationStrategyDecorator and
440
+ # ClientSideIncrementalRecordFilterDecorator still rely on a DatetimeBasedCursor that is properly initialized
441
+ # with state.
442
+ if declarative_stream.retriever.cursor:
443
+ declarative_stream.retriever.cursor.set_initial_state(stream_state=stream_state)
444
+ declarative_stream.retriever.cursor = None
445
+
446
+ return declarative_stream.retriever
447
+
448
+ return _factory_method
@@ -1241,6 +1241,7 @@ definitions:
1241
1241
  - "$ref": "#/definitions/KeysToLower"
1242
1242
  - "$ref": "#/definitions/KeysToSnakeCase"
1243
1243
  - "$ref": "#/definitions/FlattenFields"
1244
+ - "$ref": "#/definitions/KeysReplace"
1244
1245
  state_migrations:
1245
1246
  title: State Migrations
1246
1247
  description: Array of state migrations to be applied on the input state
@@ -1785,6 +1786,7 @@ definitions:
1785
1786
  - "$ref": "#/definitions/KeysToLower"
1786
1787
  - "$ref": "#/definitions/KeysToSnakeCase"
1787
1788
  - "$ref": "#/definitions/FlattenFields"
1789
+ - "$ref": "#/definitions/KeysReplace"
1788
1790
  schema_type_identifier:
1789
1791
  "$ref": "#/definitions/SchemaTypeIdentifier"
1790
1792
  $parameters:
@@ -1883,6 +1885,49 @@ definitions:
1883
1885
  $parameters:
1884
1886
  type: object
1885
1887
  additionalProperties: true
1888
+ KeysReplace:
1889
+ title: Keys Replace
1890
+ description: A transformation that replaces symbols in keys.
1891
+ type: object
1892
+ required:
1893
+ - type
1894
+ - old
1895
+ - new
1896
+ properties:
1897
+ type:
1898
+ type: string
1899
+ enum: [KeysReplace]
1900
+ old:
1901
+ type: string
1902
+ title: Old value
1903
+ description: Old value to replace.
1904
+ examples:
1905
+ - " "
1906
+ - "{{ record.id }}"
1907
+ - "{{ config['id'] }}"
1908
+ - "{{ stream_slice['id'] }}"
1909
+ interpolation_context:
1910
+ - config
1911
+ - record
1912
+ - stream_state
1913
+ - stream_slice
1914
+ new:
1915
+ type: string
1916
+ title: New value
1917
+ description: New value to set.
1918
+ examples:
1919
+ - "_"
1920
+ - "{{ record.id }}"
1921
+ - "{{ config['id'] }}"
1922
+ - "{{ stream_slice['id'] }}"
1923
+ interpolation_context:
1924
+ - config
1925
+ - record
1926
+ - stream_state
1927
+ - stream_slice
1928
+ $parameters:
1929
+ type: object
1930
+ additionalProperties: true
1886
1931
  IterableDecoder:
1887
1932
  title: Iterable Decoder
1888
1933
  description: Use this if the response consists of strings separated by new lines (`\n`). The Decoder will wrap each row into a JSON object with the `record` key.
@@ -721,6 +721,23 @@ class KeysToSnakeCase(BaseModel):
721
721
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
722
722
 
723
723
 
724
+ class KeysReplace(BaseModel):
725
+ type: Literal["KeysReplace"]
726
+ old: str = Field(
727
+ ...,
728
+ description="Old value to replace.",
729
+ examples=[" ", "{{ record.id }}", "{{ config['id'] }}", "{{ stream_slice['id'] }}"],
730
+ title="Old value",
731
+ )
732
+ new: str = Field(
733
+ ...,
734
+ description="New value to set.",
735
+ examples=["_", "{{ record.id }}", "{{ config['id'] }}", "{{ stream_slice['id'] }}"],
736
+ title="New value",
737
+ )
738
+ parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
739
+
740
+
724
741
  class FlattenFields(BaseModel):
725
742
  type: Literal["FlattenFields"]
726
743
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
@@ -1701,6 +1718,7 @@ class DeclarativeStream(BaseModel):
1701
1718
  KeysToLower,
1702
1719
  KeysToSnakeCase,
1703
1720
  FlattenFields,
1721
+ KeysReplace,
1704
1722
  ]
1705
1723
  ]
1706
1724
  ] = Field(
@@ -1875,6 +1893,7 @@ class DynamicSchemaLoader(BaseModel):
1875
1893
  KeysToLower,
1876
1894
  KeysToSnakeCase,
1877
1895
  FlattenFields,
1896
+ KeysReplace,
1878
1897
  ]
1879
1898
  ]
1880
1899
  ] = Field(
@@ -254,6 +254,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
254
254
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
255
255
  JwtPayload as JwtPayloadModel,
256
256
  )
257
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
258
+ KeysReplace as KeysReplaceModel,
259
+ )
257
260
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
258
261
  KeysToLower as KeysToLowerModel,
259
262
  )
@@ -417,6 +420,9 @@ from airbyte_cdk.sources.declarative.transformations.add_fields import AddedFiel
417
420
  from airbyte_cdk.sources.declarative.transformations.flatten_fields import (
418
421
  FlattenFields,
419
422
  )
423
+ from airbyte_cdk.sources.declarative.transformations.keys_replace_transformation import (
424
+ KeysReplaceTransformation,
425
+ )
420
426
  from airbyte_cdk.sources.declarative.transformations.keys_to_lower_transformation import (
421
427
  KeysToLowerTransformation,
422
428
  )
@@ -509,6 +515,7 @@ class ModelToComponentFactory:
509
515
  GzipParserModel: self.create_gzip_parser,
510
516
  KeysToLowerModel: self.create_keys_to_lower_transformation,
511
517
  KeysToSnakeCaseModel: self.create_keys_to_snake_transformation,
518
+ KeysReplaceModel: self.create_keys_replace_transformation,
512
519
  FlattenFieldsModel: self.create_flatten_fields,
513
520
  IterableDecoderModel: self.create_iterable_decoder,
514
521
  XmlDecoderModel: self.create_xml_decoder,
@@ -630,6 +637,13 @@ class ModelToComponentFactory:
630
637
  ) -> KeysToSnakeCaseTransformation:
631
638
  return KeysToSnakeCaseTransformation()
632
639
 
640
+ def create_keys_replace_transformation(
641
+ self, model: KeysReplaceModel, config: Config, **kwargs: Any
642
+ ) -> KeysReplaceTransformation:
643
+ return KeysReplaceTransformation(
644
+ old=model.old, new=model.new, parameters=model.parameters or {}
645
+ )
646
+
633
647
  def create_flatten_fields(
634
648
  self, model: FlattenFieldsModel, config: Config, **kwargs: Any
635
649
  ) -> FlattenFields:
@@ -112,39 +112,27 @@ class DefaultPaginator(Paginator):
112
112
  )
113
113
  if isinstance(self.url_base, str):
114
114
  self.url_base = InterpolatedString(string=self.url_base, parameters=parameters)
115
-
116
- def get_initial_token(self) -> Optional[Any]:
117
- """
118
- Return the page token that should be used for the first request of a stream
119
-
120
- WARNING: get_initial_token() should not be used by streams that use RFR that perform checkpointing
121
- of state using page numbers. Because paginators are stateless
122
- """
123
- return self.pagination_strategy.initial_token
115
+ self._token: Optional[Any] = self.pagination_strategy.initial_token
124
116
 
125
117
  def next_page_token(
126
- self,
127
- response: requests.Response,
128
- last_page_size: int,
129
- last_record: Optional[Record],
130
- last_page_token_value: Optional[Any] = None,
118
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
131
119
  ) -> Optional[Mapping[str, Any]]:
132
- next_page_token = self.pagination_strategy.next_page_token(
133
- response=response,
134
- last_page_size=last_page_size,
135
- last_record=last_record,
136
- last_page_token_value=last_page_token_value,
120
+ self._token = self.pagination_strategy.next_page_token(
121
+ response, last_page_size, last_record
137
122
  )
138
- if next_page_token:
139
- return {"next_page_token": next_page_token}
123
+ if self._token:
124
+ return {"next_page_token": self._token}
140
125
  else:
141
126
  return None
142
127
 
143
- def path(self, next_page_token: Optional[Mapping[str, Any]]) -> Optional[str]:
144
- token = next_page_token.get("next_page_token") if next_page_token else None
145
- if token and self.page_token_option and isinstance(self.page_token_option, RequestPath):
128
+ def path(self) -> Optional[str]:
129
+ if (
130
+ self._token
131
+ and self.page_token_option
132
+ and isinstance(self.page_token_option, RequestPath)
133
+ ):
146
134
  # Replace url base to only return the path
147
- return str(token).replace(self.url_base.eval(self.config), "") # type: ignore # url_base is casted to a InterpolatedString in __post_init__
135
+ return str(self._token).replace(self.url_base.eval(self.config), "") # type: ignore # url_base is casted to a InterpolatedString in __post_init__
148
136
  else:
149
137
  return None
150
138
 
@@ -155,7 +143,7 @@ class DefaultPaginator(Paginator):
155
143
  stream_slice: Optional[StreamSlice] = None,
156
144
  next_page_token: Optional[Mapping[str, Any]] = None,
157
145
  ) -> MutableMapping[str, Any]:
158
- return self._get_request_options(RequestOptionType.request_parameter, next_page_token)
146
+ return self._get_request_options(RequestOptionType.request_parameter)
159
147
 
160
148
  def get_request_headers(
161
149
  self,
@@ -164,7 +152,7 @@ class DefaultPaginator(Paginator):
164
152
  stream_slice: Optional[StreamSlice] = None,
165
153
  next_page_token: Optional[Mapping[str, Any]] = None,
166
154
  ) -> Mapping[str, str]:
167
- return self._get_request_options(RequestOptionType.header, next_page_token)
155
+ return self._get_request_options(RequestOptionType.header)
168
156
 
169
157
  def get_request_body_data(
170
158
  self,
@@ -173,7 +161,7 @@ class DefaultPaginator(Paginator):
173
161
  stream_slice: Optional[StreamSlice] = None,
174
162
  next_page_token: Optional[Mapping[str, Any]] = None,
175
163
  ) -> Mapping[str, Any]:
176
- return self._get_request_options(RequestOptionType.body_data, next_page_token)
164
+ return self._get_request_options(RequestOptionType.body_data)
177
165
 
178
166
  def get_request_body_json(
179
167
  self,
@@ -182,21 +170,25 @@ class DefaultPaginator(Paginator):
182
170
  stream_slice: Optional[StreamSlice] = None,
183
171
  next_page_token: Optional[Mapping[str, Any]] = None,
184
172
  ) -> Mapping[str, Any]:
185
- return self._get_request_options(RequestOptionType.body_json, next_page_token)
173
+ return self._get_request_options(RequestOptionType.body_json)
186
174
 
187
- def _get_request_options(
188
- self, option_type: RequestOptionType, next_page_token: Optional[Mapping[str, Any]]
189
- ) -> MutableMapping[str, Any]:
175
+ def reset(self, reset_value: Optional[Any] = None) -> None:
176
+ if reset_value:
177
+ self.pagination_strategy.reset(reset_value=reset_value)
178
+ else:
179
+ self.pagination_strategy.reset()
180
+ self._token = self.pagination_strategy.initial_token
181
+
182
+ def _get_request_options(self, option_type: RequestOptionType) -> MutableMapping[str, Any]:
190
183
  options = {}
191
184
 
192
- token = next_page_token.get("next_page_token") if next_page_token else None
193
185
  if (
194
186
  self.page_token_option
195
- and token is not None
187
+ and self._token is not None
196
188
  and isinstance(self.page_token_option, RequestOption)
197
189
  and self.page_token_option.inject_into == option_type
198
190
  ):
199
- options[self.page_token_option.field_name.eval(config=self.config)] = token # type: ignore # field_name is always cast to an interpolated string
191
+ options[self.page_token_option.field_name.eval(config=self.config)] = self._token # type: ignore # field_name is always cast to an interpolated string
200
192
  if (
201
193
  self.page_size_option
202
194
  and self.pagination_strategy.get_page_size()
@@ -212,9 +204,6 @@ class PaginatorTestReadDecorator(Paginator):
212
204
  """
213
205
  In some cases, we want to limit the number of requests that are made to the backend source. This class allows for limiting the number of
214
206
  pages that are queried throughout a read command.
215
-
216
- WARNING: This decorator is not currently thread-safe like the rest of the low-code framework because it has
217
- an internal state to track the current number of pages counted so that it can exit early during a test read
218
207
  """
219
208
 
220
209
  _PAGE_COUNT_BEFORE_FIRST_NEXT_CALL = 1
@@ -228,27 +217,17 @@ class PaginatorTestReadDecorator(Paginator):
228
217
  self._decorated = decorated
229
218
  self._page_count = self._PAGE_COUNT_BEFORE_FIRST_NEXT_CALL
230
219
 
231
- def get_initial_token(self) -> Optional[Any]:
232
- self._page_count = self._PAGE_COUNT_BEFORE_FIRST_NEXT_CALL
233
- return self._decorated.get_initial_token()
234
-
235
220
  def next_page_token(
236
- self,
237
- response: requests.Response,
238
- last_page_size: int,
239
- last_record: Optional[Record],
240
- last_page_token_value: Optional[Any] = None,
221
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
241
222
  ) -> Optional[Mapping[str, Any]]:
242
223
  if self._page_count >= self._maximum_number_of_pages:
243
224
  return None
244
225
 
245
226
  self._page_count += 1
246
- return self._decorated.next_page_token(
247
- response, last_page_size, last_record, last_page_token_value
248
- )
227
+ return self._decorated.next_page_token(response, last_page_size, last_record)
249
228
 
250
- def path(self, next_page_token: Optional[Mapping[str, Any]]) -> Optional[str]:
251
- return self._decorated.path(next_page_token)
229
+ def path(self) -> Optional[str]:
230
+ return self._decorated.path()
252
231
 
253
232
  def get_request_params(
254
233
  self,
@@ -293,3 +272,7 @@ class PaginatorTestReadDecorator(Paginator):
293
272
  return self._decorated.get_request_body_json(
294
273
  stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token
295
274
  )
275
+
276
+ def reset(self, reset_value: Optional[Any] = None) -> None:
277
+ self._decorated.reset()
278
+ self._page_count = self._PAGE_COUNT_BEFORE_FIRST_NEXT_CALL
@@ -19,7 +19,7 @@ class NoPagination(Paginator):
19
19
 
20
20
  parameters: InitVar[Mapping[str, Any]]
21
21
 
22
- def path(self, next_page_token: Optional[Mapping[str, Any]]) -> Optional[str]:
22
+ def path(self) -> Optional[str]:
23
23
  return None
24
24
 
25
25
  def get_request_params(
@@ -58,14 +58,11 @@ class NoPagination(Paginator):
58
58
  ) -> Mapping[str, Any]:
59
59
  return {}
60
60
 
61
- def get_initial_token(self) -> Optional[Any]:
62
- return None
63
-
64
61
  def next_page_token(
65
- self,
66
- response: requests.Response,
67
- last_page_size: int,
68
- last_record: Optional[Record],
69
- last_page_token_value: Optional[Any],
70
- ) -> Optional[Mapping[str, Any]]:
62
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
63
+ ) -> Mapping[str, Any]:
71
64
  return {}
65
+
66
+ def reset(self, reset_value: Optional[Any] = None) -> None:
67
+ # No state to reset
68
+ pass
@@ -24,18 +24,14 @@ class Paginator(ABC, RequestOptionsProvider):
24
24
  """
25
25
 
26
26
  @abstractmethod
27
- def get_initial_token(self) -> Optional[Any]:
27
+ def reset(self, reset_value: Optional[Any] = None) -> None:
28
28
  """
29
- Get the page token that should be included in the request to get the first page of records
29
+ Reset the pagination's inner state
30
30
  """
31
31
 
32
32
  @abstractmethod
33
33
  def next_page_token(
34
- self,
35
- response: requests.Response,
36
- last_page_size: int,
37
- last_record: Optional[Record],
38
- last_page_token_value: Optional[Any],
34
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
39
35
  ) -> Optional[Mapping[str, Any]]:
40
36
  """
41
37
  Returns the next_page_token to use to fetch the next page of records.
@@ -43,13 +39,12 @@ class Paginator(ABC, RequestOptionsProvider):
43
39
  :param response: the response to process
44
40
  :param last_page_size: the number of records read from the response
45
41
  :param last_record: the last record extracted from the response
46
- :param last_page_token_value: The current value of the page token made on the last request
47
42
  :return: A mapping {"next_page_token": <token>} for the next page from the input response object. Returning None means there are no more pages to read in this response.
48
43
  """
49
44
  pass
50
45
 
51
46
  @abstractmethod
52
- def path(self, next_page_token: Optional[Mapping[str, Any]]) -> Optional[str]:
47
+ def path(self) -> Optional[str]:
53
48
  """
54
49
  Returns the URL path to hit to fetch the next page of records
55
50
 
@@ -43,6 +43,7 @@ class CursorPaginationStrategy(PaginationStrategy):
43
43
  )
44
44
 
45
45
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
46
+ self._initial_cursor = None
46
47
  if isinstance(self.cursor_value, str):
47
48
  self._cursor_value = InterpolatedString.create(self.cursor_value, parameters=parameters)
48
49
  else:
@@ -56,19 +57,10 @@ class CursorPaginationStrategy(PaginationStrategy):
56
57
 
57
58
  @property
58
59
  def initial_token(self) -> Optional[Any]:
59
- """
60
- CursorPaginationStrategy does not have an initial value because the next cursor is typically included
61
- in the response of the first request. For Resumable Full Refresh streams that checkpoint the page
62
- cursor, the next cursor should be read from the state or stream slice object.
63
- """
64
- return None
60
+ return self._initial_cursor
65
61
 
66
62
  def next_page_token(
67
- self,
68
- response: requests.Response,
69
- last_page_size: int,
70
- last_record: Optional[Record],
71
- last_page_token_value: Optional[Any] = None,
63
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
72
64
  ) -> Optional[Any]:
73
65
  decoded_response = next(self.decoder.decode(response))
74
66
 
@@ -95,5 +87,8 @@ class CursorPaginationStrategy(PaginationStrategy):
95
87
  )
96
88
  return token if token else None
97
89
 
90
+ def reset(self, reset_value: Optional[Any] = None) -> None:
91
+ self._initial_cursor = reset_value
92
+
98
93
  def get_page_size(self) -> Optional[int]:
99
94
  return self.page_size
@@ -52,6 +52,7 @@ class OffsetIncrement(PaginationStrategy):
52
52
  inject_on_first_request: bool = False
53
53
 
54
54
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
55
+ self._offset = 0
55
56
  page_size = str(self.page_size) if isinstance(self.page_size, int) else self.page_size
56
57
  if page_size:
57
58
  self._page_size: Optional[InterpolatedString] = InterpolatedString(
@@ -63,15 +64,11 @@ class OffsetIncrement(PaginationStrategy):
63
64
  @property
64
65
  def initial_token(self) -> Optional[Any]:
65
66
  if self.inject_on_first_request:
66
- return 0
67
+ return self._offset
67
68
  return None
68
69
 
69
70
  def next_page_token(
70
- self,
71
- response: requests.Response,
72
- last_page_size: int,
73
- last_record: Optional[Record],
74
- last_page_token_value: Optional[Any] = None,
71
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
75
72
  ) -> Optional[Any]:
76
73
  decoded_response = next(self.decoder.decode(response))
77
74
 
@@ -81,16 +78,19 @@ class OffsetIncrement(PaginationStrategy):
81
78
  and last_page_size < self._page_size.eval(self.config, response=decoded_response)
82
79
  ) or last_page_size == 0:
83
80
  return None
84
- elif last_page_token_value is None:
85
- # If the OffsetIncrement strategy does not inject on the first request, the incoming last_page_token_value
86
- # will be None. For this case, we assume that None was the first page and progress to the next offset
87
- return 0 + last_page_size
88
- elif not isinstance(last_page_token_value, int):
81
+ else:
82
+ self._offset += last_page_size
83
+ return self._offset
84
+
85
+ def reset(self, reset_value: Optional[Any] = 0) -> None:
86
+ if reset_value is None:
87
+ self._offset = 0
88
+ elif not isinstance(reset_value, int):
89
89
  raise ValueError(
90
- f"Last page token value {last_page_token_value} for OffsetIncrement pagination strategy was not an integer"
90
+ f"Reset value {reset_value} for OffsetIncrement pagination strategy was not an integer"
91
91
  )
92
92
  else:
93
- return last_page_token_value + last_page_size
93
+ self._offset = reset_value
94
94
 
95
95
  def get_page_size(self) -> Optional[int]:
96
96
  if self._page_size:
@@ -31,6 +31,7 @@ class PageIncrement(PaginationStrategy):
31
31
  inject_on_first_request: bool = False
32
32
 
33
33
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
34
+ self._page = self.start_from_page
34
35
  if isinstance(self.page_size, int) or (self.page_size is None):
35
36
  self._page_size = self.page_size
36
37
  else:
@@ -42,30 +43,28 @@ class PageIncrement(PaginationStrategy):
42
43
  @property
43
44
  def initial_token(self) -> Optional[Any]:
44
45
  if self.inject_on_first_request:
45
- return self.start_from_page
46
+ return self._page
46
47
  return None
47
48
 
48
49
  def next_page_token(
49
- self,
50
- response: requests.Response,
51
- last_page_size: int,
52
- last_record: Optional[Record],
53
- last_page_token_value: Optional[Any],
50
+ self, response: requests.Response, last_page_size: int, last_record: Optional[Record]
54
51
  ) -> Optional[Any]:
55
52
  # Stop paginating when there are fewer records than the page size or the current page has no records
56
53
  if (self._page_size and last_page_size < self._page_size) or last_page_size == 0:
57
54
  return None
58
- elif last_page_token_value is None:
59
- # If the PageIncrement strategy does not inject on the first request, the incoming last_page_token_value
60
- # may be None. When this is the case, we assume we've already requested the first page specified by
61
- # start_from_page and must now get the next page
62
- return self.start_from_page + 1
63
- elif not isinstance(last_page_token_value, int):
55
+ else:
56
+ self._page += 1
57
+ return self._page
58
+
59
+ def reset(self, reset_value: Optional[Any] = None) -> None:
60
+ if reset_value is None:
61
+ self._page = self.start_from_page
62
+ elif not isinstance(reset_value, int):
64
63
  raise ValueError(
65
- f"Last page token value {last_page_token_value} for PageIncrement pagination strategy was not an integer"
64
+ f"Reset value {reset_value} for PageIncrement pagination strategy was not an integer"
66
65
  )
67
66
  else:
68
- return last_page_token_value + 1
67
+ self._page = reset_value
69
68
 
70
69
  def get_page_size(self) -> Optional[int]:
71
70
  return self._page_size