airbyte-cdk 6.37.0.dev0__tar.gz → 6.37.1__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 (368) hide show
  1. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/PKG-INFO +2 -2
  2. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/entrypoint.py +7 -7
  3. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +28 -7
  4. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +7 -1
  5. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +62 -3
  6. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +1 -0
  7. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +2 -0
  8. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +27 -3
  9. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +18 -4
  10. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +119 -7
  11. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/README.md +5 -5
  12. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +60 -17
  13. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +7 -1
  14. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +10 -3
  15. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +2 -2
  16. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +2 -1
  17. airbyte_cdk-6.37.1/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +92 -0
  18. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/pyproject.toml +2 -2
  19. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/LICENSE.txt +0 -0
  20. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/LICENSE_SHORT +0 -0
  21. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/README.md +0 -0
  22. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/__init__.py +0 -0
  23. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/__init__.py +0 -0
  24. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  25. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  26. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  27. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/config_observation.py +0 -0
  28. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector.py +0 -0
  29. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/README.md +0 -0
  30. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
  31. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  32. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/main.py +0 -0
  33. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/models.py +0 -0
  34. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  35. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  36. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  37. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  38. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  39. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/__init__.py +0 -0
  40. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/destination.py +0 -0
  41. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  42. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  43. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  44. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  45. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  46. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  47. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  48. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  49. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  50. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/exception_handler.py +0 -0
  51. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/logger.py +0 -0
  52. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/__init__.py +0 -0
  53. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  54. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  55. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  56. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/models/well_known_types.py +0 -0
  57. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/py.typed +0 -0
  58. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/__init__.py +0 -0
  59. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/abstract_source.py +0 -0
  60. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  61. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  62. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  63. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  64. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  65. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  66. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  67. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/config.py +0 -0
  68. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  69. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  70. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  71. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  72. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  73. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  74. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  75. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  76. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  77. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  78. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  79. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  80. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  81. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  82. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  83. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  84. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  85. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  86. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  87. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  88. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  89. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  90. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  91. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  92. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  93. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  94. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  95. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  96. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  97. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  98. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  99. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  100. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  101. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  102. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  103. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  104. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  105. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  106. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  107. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  108. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  109. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  110. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  111. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
  112. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  113. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  114. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  115. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  116. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  117. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  118. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  119. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  120. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  121. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  122. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  123. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  124. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  125. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  126. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  127. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  128. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  129. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  130. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  131. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  132. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  133. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  134. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  135. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  136. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  137. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  138. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  139. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  140. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  141. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  142. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  143. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  144. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  145. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  146. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  147. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  148. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  149. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  150. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  151. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  152. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  153. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  154. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  155. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  156. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  157. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  158. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  159. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  160. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  161. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  162. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  163. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  164. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  165. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  166. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  167. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  168. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  169. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  170. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  171. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  172. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  173. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  174. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  175. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  176. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  177. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  178. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  179. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  180. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  181. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  182. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  183. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  184. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  185. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  186. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  187. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  188. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  189. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  190. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  191. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  192. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  193. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  194. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  195. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  196. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  197. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  198. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  199. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  200. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  201. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  202. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/types.py +0 -0
  203. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  204. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  205. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  206. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  207. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
  208. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
  209. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/README.md +0 -0
  210. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  211. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  212. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  213. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  214. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  215. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  216. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  217. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  218. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  219. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  220. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  221. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  222. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  223. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  224. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  225. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  226. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  227. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  228. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  229. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  230. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  231. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  232. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  233. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  234. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  235. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  236. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  237. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  238. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  239. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  240. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  241. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  242. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  243. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  244. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  245. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  246. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  247. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  248. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  249. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  250. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  251. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  252. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  253. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  254. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  255. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  256. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  257. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  258. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/file_based/types.py +0 -0
  259. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/http_config.py +0 -0
  260. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/http_logger.py +0 -0
  261. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/message/__init__.py +0 -0
  262. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/message/repository.py +0 -0
  263. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/source.py +0 -0
  264. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  265. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
  266. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  267. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  268. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  269. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  270. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  271. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  272. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  273. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  274. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  275. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  276. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  277. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  278. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  279. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  280. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  281. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  282. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  283. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  284. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  285. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  286. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  287. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  288. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  289. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  290. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  291. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  292. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  293. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  294. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  295. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/core.py +0 -0
  296. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  297. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  298. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  299. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  300. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  301. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  302. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  303. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  304. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  305. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  306. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  307. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  308. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
  309. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  310. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  311. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  312. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  313. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  314. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  315. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  316. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  317. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  318. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/types.py +0 -0
  319. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
  320. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/casing.py +0 -0
  321. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  322. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  323. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  324. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/transform.py +0 -0
  325. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sources/utils/types.py +0 -0
  326. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/__init__.py +0 -0
  327. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/_util/__init__.py +0 -0
  328. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/_util/hashing.py +0 -0
  329. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  330. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/constants.py +0 -0
  331. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/exceptions.py +0 -0
  332. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/secrets.py +0 -0
  333. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/shared/__init__.py +0 -0
  334. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  335. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  336. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/sql/types.py +0 -0
  337. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/__init__.py +0 -0
  338. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/catalog_builder.py +0 -0
  339. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  340. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  341. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  342. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  343. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/request.py +0 -0
  344. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/response.py +0 -0
  345. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  346. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/state_builder.py +0 -0
  347. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/__init__.py +0 -0
  348. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/data.py +0 -0
  349. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  350. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  351. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/test/utils/reading.py +0 -0
  352. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/__init__.py +0 -0
  353. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  354. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/analytics_message.py +0 -0
  355. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/constants.py +0 -0
  356. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  357. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  358. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/event_timing.py +0 -0
  359. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  360. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  361. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/message_utils.py +0 -0
  362. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  363. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/print_buffer.py +0 -0
  364. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  365. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/slice_hasher.py +0 -0
  366. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  367. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  368. {airbyte_cdk-6.37.0.dev0 → airbyte_cdk-6.37.1}/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.37.0.dev0
3
+ Version: 6.37.1
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -22,8 +22,8 @@ Provides-Extra: sql
22
22
  Provides-Extra: vector-db-based
23
23
  Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
24
24
  Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
25
- Requires-Dist: Unidecode (>=1.3,<2.0)
26
25
  Requires-Dist: airbyte-protocol-models-dataclasses (>=0.14,<0.15)
26
+ Requires-Dist: anyascii (>=0.3.2,<0.4.0)
27
27
  Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
28
28
  Requires-Dist: backoff
29
29
  Requires-Dist: cachetools
@@ -37,8 +37,8 @@ from airbyte_cdk.sources import Source
37
37
  from airbyte_cdk.sources.connector_state_manager import HashableStreamDescriptor
38
38
  from airbyte_cdk.sources.utils.schema_helpers import check_config_against_spec_or_exit, split_config
39
39
 
40
- from airbyte_cdk.utils import PrintBuffer, is_cloud_environment, message_utils # add PrintBuffer back once fixed
41
- # from airbyte_cdk.utils import is_cloud_environment, message_utils
40
+ # from airbyte_cdk.utils import PrintBuffer, is_cloud_environment, message_utils # add PrintBuffer back once fixed
41
+ from airbyte_cdk.utils import is_cloud_environment, message_utils
42
42
  from airbyte_cdk.utils.airbyte_secrets_utils import get_secrets, update_secrets
43
43
  from airbyte_cdk.utils.constants import ENV_REQUEST_CACHE_PATH
44
44
  from airbyte_cdk.utils.traced_exception import AirbyteTracedException
@@ -337,11 +337,11 @@ def launch(source: Source, args: List[str]) -> None:
337
337
  parsed_args = source_entrypoint.parse_args(args)
338
338
  # temporarily removes the PrintBuffer because we're seeing weird print behavior for concurrent syncs
339
339
  # Refer to: https://github.com/airbytehq/oncall/issues/6235
340
- with PrintBuffer():
341
- for message in source_entrypoint.run(parsed_args):
342
- # simply printing is creating issues for concurrent CDK as Python uses different two instructions to print: one for the message and
343
- # the other for the break line. Adding `\n` to the message ensure that both are printed at the same time
344
- print(f"{message}\n", end="", flush=True)
340
+ # with PrintBuffer():
341
+ for message in source_entrypoint.run(parsed_args):
342
+ # simply printing is creating issues for concurrent CDK as Python uses different two instructions to print: one for the message and
343
+ # the other for the break line. Adding `\n` to the message ensure that both are printed at the same time
344
+ print(f"{message}\n", end="", flush=True)
345
345
 
346
346
 
347
347
  def _init_internal_request_filter() -> None:
@@ -31,6 +31,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
31
31
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
32
32
  DatetimeBasedCursor as DatetimeBasedCursorModel,
33
33
  )
34
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
35
+ IncrementingCountCursor as IncrementingCountCursorModel,
36
+ )
34
37
  from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import (
35
38
  ModelToComponentFactory,
36
39
  )
@@ -222,7 +225,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
222
225
  and not incremental_sync_component_definition
223
226
  )
224
227
 
225
- if self._is_datetime_incremental_without_partition_routing(
228
+ if self._is_concurrent_cursor_incremental_without_partition_routing(
226
229
  declarative_stream, incremental_sync_component_definition
227
230
  ):
228
231
  stream_state = self._connector_state_manager.get_stream_state(
@@ -254,15 +257,26 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
254
257
  stream_slicer=declarative_stream.retriever.stream_slicer,
255
258
  )
256
259
  else:
257
- cursor = (
258
- self._constructor.create_concurrent_cursor_from_datetime_based_cursor(
260
+ if (
261
+ incremental_sync_component_definition
262
+ and incremental_sync_component_definition.get("type")
263
+ == IncrementingCountCursorModel.__name__
264
+ ):
265
+ cursor = self._constructor.create_concurrent_cursor_from_incrementing_count_cursor(
266
+ model_type=IncrementingCountCursorModel,
267
+ component_definition=incremental_sync_component_definition, # type: ignore # Not None because of the if condition above
268
+ stream_name=declarative_stream.name,
269
+ stream_namespace=declarative_stream.namespace,
270
+ config=config or {},
271
+ )
272
+ else:
273
+ cursor = self._constructor.create_concurrent_cursor_from_datetime_based_cursor(
259
274
  model_type=DatetimeBasedCursorModel,
260
275
  component_definition=incremental_sync_component_definition, # type: ignore # Not None because of the if condition above
261
276
  stream_name=declarative_stream.name,
262
277
  stream_namespace=declarative_stream.namespace,
263
278
  config=config or {},
264
279
  )
265
- )
266
280
  partition_generator = StreamSlicerPartitionGenerator(
267
281
  partition_factory=DeclarativePartitionFactory(
268
282
  declarative_stream.name,
@@ -389,7 +403,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
389
403
 
390
404
  return concurrent_streams, synchronous_streams
391
405
 
392
- def _is_datetime_incremental_without_partition_routing(
406
+ def _is_concurrent_cursor_incremental_without_partition_routing(
393
407
  self,
394
408
  declarative_stream: DeclarativeStream,
395
409
  incremental_sync_component_definition: Mapping[str, Any] | None,
@@ -397,11 +411,18 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
397
411
  return (
398
412
  incremental_sync_component_definition is not None
399
413
  and bool(incremental_sync_component_definition)
400
- and incremental_sync_component_definition.get("type", "")
401
- == DatetimeBasedCursorModel.__name__
414
+ and (
415
+ incremental_sync_component_definition.get("type", "")
416
+ in (DatetimeBasedCursorModel.__name__, IncrementingCountCursorModel.__name__)
417
+ )
402
418
  and hasattr(declarative_stream.retriever, "stream_slicer")
403
419
  and (
404
420
  isinstance(declarative_stream.retriever.stream_slicer, DatetimeBasedCursor)
421
+ # IncrementingCountCursorModel is hardcoded to be of type DatetimeBasedCursor
422
+ # add isintance check here if we want to create a Declarative IncrementingCountCursor
423
+ # or isinstance(
424
+ # declarative_stream.retriever.stream_slicer, IncrementingCountCursor
425
+ # )
405
426
  or isinstance(declarative_stream.retriever.stream_slicer, AsyncJobPartitionRouter)
406
427
  )
407
428
  )
@@ -31,7 +31,8 @@ class DatetimeParser:
31
31
  return datetime.datetime.fromtimestamp(float(date), tz=datetime.timezone.utc)
32
32
  elif format == "%ms":
33
33
  return self._UNIX_EPOCH + datetime.timedelta(milliseconds=int(date))
34
-
34
+ elif "%_ms" in format:
35
+ format = format.replace("%_ms", "%f")
35
36
  parsed_datetime = datetime.datetime.strptime(str(date), format)
36
37
  if self._is_naive(parsed_datetime):
37
38
  return parsed_datetime.replace(tzinfo=datetime.timezone.utc)
@@ -48,6 +49,11 @@ class DatetimeParser:
48
49
  if format == "%ms":
49
50
  # timstamp() returns a float representing the number of seconds since the unix epoch
50
51
  return str(int(dt.timestamp() * 1000))
52
+ if "%_ms" in format:
53
+ _format = format.replace("%_ms", "%f")
54
+ milliseconds = int(dt.microsecond / 1000)
55
+ formatted_dt = dt.strftime(_format).replace(dt.strftime("%f"), "%03d" % milliseconds)
56
+ return formatted_dt
51
57
  else:
52
58
  return dt.strftime(format)
53
59
 
@@ -777,6 +777,44 @@ definitions:
777
777
  type:
778
778
  type: string
779
779
  enum: [LegacyToPerPartitionStateMigration]
780
+ IncrementingCountCursor:
781
+ title: Incrementing Count Cursor
782
+ description: Cursor that allows for incremental sync according to a continuously increasing integer.
783
+ type: object
784
+ required:
785
+ - type
786
+ - cursor_field
787
+ properties:
788
+ type:
789
+ type: string
790
+ enum: [IncrementingCountCursor]
791
+ cursor_field:
792
+ title: Cursor Field
793
+ description: The location of the value on a record that will be used as a bookmark during sync. To ensure no data loss, the API must return records in ascending order based on the cursor field. Nested fields are not supported, so the field must be at the top level of the record. You can use a combination of Add Field and Remove Field transformations to move the nested field to the top.
794
+ type: string
795
+ interpolation_context:
796
+ - config
797
+ examples:
798
+ - "created_at"
799
+ - "{{ config['record_cursor'] }}"
800
+ start_value:
801
+ title: Start Value
802
+ description: The value that determines the earliest record that should be synced.
803
+ anyOf:
804
+ - type: string
805
+ - type: integer
806
+ interpolation_context:
807
+ - config
808
+ examples:
809
+ - 0
810
+ - "{{ config['start_value'] }}"
811
+ start_value_option:
812
+ title: Inject Start Value Into Outgoing HTTP Request
813
+ description: Optionally configures how the start value will be sent in requests to the source API.
814
+ "$ref": "#/definitions/RequestOption"
815
+ $parameters:
816
+ type: object
817
+ additionalProperties: true
780
818
  DatetimeBasedCursor:
781
819
  title: Datetime Based Cursor
782
820
  description: Cursor to provide incremental capabilities over datetime.
@@ -844,6 +882,7 @@ definitions:
844
882
  * **%M**: Minute (zero-padded) - `00`, `01`, ..., `59`
845
883
  * **%S**: Second (zero-padded) - `00`, `01`, ..., `59`
846
884
  * **%f**: Microsecond (zero-padded to 6 digits) - `000000`
885
+ * **%_ms**: Millisecond (zero-padded to 3 digits) - `000`
847
886
  * **%z**: UTC offset - `(empty)`, `+0000`, `-04:00`
848
887
  * **%Z**: Time zone name - `(empty)`, `UTC`, `GMT`
849
888
  * **%j**: Day of the year (zero-padded) - `001`, `002`, ..., `366`
@@ -1318,6 +1357,7 @@ definitions:
1318
1357
  anyOf:
1319
1358
  - "$ref": "#/definitions/CustomIncrementalSync"
1320
1359
  - "$ref": "#/definitions/DatetimeBasedCursor"
1360
+ - "$ref": "#/definitions/IncrementingCountCursor"
1321
1361
  name:
1322
1362
  title: Name
1323
1363
  description: The stream name.
@@ -1779,6 +1819,9 @@ definitions:
1779
1819
  - stream_interval
1780
1820
  - stream_partition
1781
1821
  - stream_slice
1822
+ - creation_response
1823
+ - polling_response
1824
+ - download_target
1782
1825
  examples:
1783
1826
  - "/products"
1784
1827
  - "/quotes/{{ stream_partition['id'] }}/quote_line_groups"
@@ -2398,6 +2441,7 @@ definitions:
2398
2441
  * **%M**: Minute (zero-padded) - `00`, `01`, ..., `59`
2399
2442
  * **%S**: Second (zero-padded) - `00`, `01`, ..., `59`
2400
2443
  * **%f**: Microsecond (zero-padded to 6 digits) - `000000`, `000001`, ..., `999999`
2444
+ * **%_ms**: Millisecond (zero-padded to 3 digits) - `000`, `001`, ..., `999`
2401
2445
  * **%z**: UTC offset - `(empty)`, `+0000`, `-04:00`
2402
2446
  * **%Z**: Time zone name - `(empty)`, `UTC`, `GMT`
2403
2447
  * **%j**: Day of the year (zero-padded) - `001`, `002`, ..., `366`
@@ -3223,7 +3267,7 @@ definitions:
3223
3267
  - polling_requester
3224
3268
  - download_requester
3225
3269
  - status_extractor
3226
- - urls_extractor
3270
+ - download_target_extractor
3227
3271
  properties:
3228
3272
  type:
3229
3273
  type: string
@@ -3240,7 +3284,7 @@ definitions:
3240
3284
  anyOf:
3241
3285
  - "$ref": "#/definitions/CustomRecordExtractor"
3242
3286
  - "$ref": "#/definitions/DpathExtractor"
3243
- urls_extractor:
3287
+ download_target_extractor:
3244
3288
  description: Responsible for fetching the final result `urls` provided by the completed / finished / ready async job.
3245
3289
  anyOf:
3246
3290
  - "$ref": "#/definitions/CustomRecordExtractor"
@@ -3261,7 +3305,7 @@ definitions:
3261
3305
  anyOf:
3262
3306
  - "$ref": "#/definitions/CustomRequester"
3263
3307
  - "$ref": "#/definitions/HttpRequester"
3264
- url_requester:
3308
+ download_target_requester:
3265
3309
  description: Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.
3266
3310
  anyOf:
3267
3311
  - "$ref": "#/definitions/CustomRequester"
@@ -3667,6 +3711,21 @@ interpolation:
3667
3711
  self: https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=
3668
3712
  next: https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=0236d6d2
3669
3713
  count: 82
3714
+ - title: creation_response
3715
+ description: The response received from the creation_requester in the AsyncRetriever component.
3716
+ type: object
3717
+ examples:
3718
+ - id: "1234"
3719
+ - title: polling_response
3720
+ description: The response received from the polling_requester in the AsyncRetriever component.
3721
+ type: object
3722
+ examples:
3723
+ - id: "1234"
3724
+ - title: download_target
3725
+ description: The `URL` received from the polling_requester in the AsyncRetriever with jobStatus as `COMPLETED`.
3726
+ type: string
3727
+ examples:
3728
+ - "https://api.sendgrid.com/v3/marketing/lists?page_size=1&page_token=0236d6d2&filename=xxx_yyy_zzz.csv"
3670
3729
  - title: stream_interval
3671
3730
  description: The current stream interval being processed. The keys are defined by the incremental sync component. Default keys are `start_time` and `end_time`.
3672
3731
  type: object
@@ -136,6 +136,7 @@ class ResponseToFileExtractor(RecordExtractor):
136
136
  """
137
137
 
138
138
  try:
139
+ # TODO: Add support for other file types, like `json`, with `pd.read_json()`
139
140
  with open(path, "r", encoding=file_encoding) as data:
140
141
  chunks = pd.read_csv(
141
142
  data, chunksize=chunk_size, iterator=True, dialect="unix", dtype=object
@@ -173,6 +173,8 @@ def format_datetime(
173
173
  )
174
174
  if format == "%s":
175
175
  return str(int(dt_datetime.timestamp()))
176
+ elif format == "%ms":
177
+ return str(int(dt_datetime.timestamp() * 1_000_000))
176
178
  return dt_datetime.strftime(format)
177
179
 
178
180
 
@@ -1508,6 +1508,28 @@ class AuthFlow(BaseModel):
1508
1508
  oauth_config_specification: Optional[OAuthConfigSpecification] = None
1509
1509
 
1510
1510
 
1511
+ class IncrementingCountCursor(BaseModel):
1512
+ type: Literal["IncrementingCountCursor"]
1513
+ cursor_field: str = Field(
1514
+ ...,
1515
+ description="The location of the value on a record that will be used as a bookmark during sync. To ensure no data loss, the API must return records in ascending order based on the cursor field. Nested fields are not supported, so the field must be at the top level of the record. You can use a combination of Add Field and Remove Field transformations to move the nested field to the top.",
1516
+ examples=["created_at", "{{ config['record_cursor'] }}"],
1517
+ title="Cursor Field",
1518
+ )
1519
+ start_value: Optional[Union[str, int]] = Field(
1520
+ None,
1521
+ description="The value that determines the earliest record that should be synced.",
1522
+ examples=[0, "{{ config['start_value'] }}"],
1523
+ title="Start Value",
1524
+ )
1525
+ start_value_option: Optional[RequestOption] = Field(
1526
+ None,
1527
+ description="Optionally configures how the start value will be sent in requests to the source API.",
1528
+ title="Inject Start Value Into Outgoing HTTP Request",
1529
+ )
1530
+ parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
1531
+
1532
+
1511
1533
  class DatetimeBasedCursor(BaseModel):
1512
1534
  type: Literal["DatetimeBasedCursor"]
1513
1535
  clamping: Optional[Clamping] = Field(
@@ -1948,7 +1970,9 @@ class DeclarativeStream(BaseModel):
1948
1970
  description="Component used to coordinate how records are extracted across stream slices and request pages.",
1949
1971
  title="Retriever",
1950
1972
  )
1951
- incremental_sync: Optional[Union[CustomIncrementalSync, DatetimeBasedCursor]] = Field(
1973
+ incremental_sync: Optional[
1974
+ Union[CustomIncrementalSync, DatetimeBasedCursor, IncrementingCountCursor]
1975
+ ] = Field(
1952
1976
  None,
1953
1977
  description="Component used to fetch data incrementally based on a time field in the data.",
1954
1978
  title="Incremental Sync",
@@ -2263,7 +2287,7 @@ class AsyncRetriever(BaseModel):
2263
2287
  status_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
2264
2288
  ..., description="Responsible for fetching the actual status of the async job."
2265
2289
  )
2266
- urls_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
2290
+ download_target_extractor: Union[CustomRecordExtractor, DpathExtractor] = Field(
2267
2291
  ...,
2268
2292
  description="Responsible for fetching the final result `urls` provided by the completed / finished / ready async job.",
2269
2293
  )
@@ -2278,7 +2302,7 @@ class AsyncRetriever(BaseModel):
2278
2302
  ...,
2279
2303
  description="Requester component that describes how to prepare HTTP requests to send to the source API to fetch the status of the running async job.",
2280
2304
  )
2281
- url_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
2305
+ download_target_requester: Optional[Union[CustomRequester, HttpRequester]] = Field(
2282
2306
  None,
2283
2307
  description="Requester component that describes how to prepare HTTP requests to send to the source API to extract the url from polling response by the completed async job.",
2284
2308
  )
@@ -45,7 +45,7 @@ class AirbyteCustomCodeNotPermittedError(Exception):
45
45
  def _hash_text(input_text: str, hash_type: str = "md5") -> str:
46
46
  """Return the hash of the input text using the specified hash type."""
47
47
  if not input_text:
48
- raise ValueError("Input text cannot be empty.")
48
+ raise ValueError("Hash input text cannot be empty.")
49
49
 
50
50
  hash_object = CHECKSUM_FUNCTIONS[hash_type]()
51
51
  hash_object.update(input_text.encode())
@@ -68,6 +68,10 @@ def validate_python_code(
68
68
 
69
69
  Currently we fail if no checksums are provided, although this may change in the future.
70
70
  """
71
+ if not code_text:
72
+ # No code provided, nothing to validate.
73
+ return
74
+
71
75
  if not checksums:
72
76
  raise ValueError(f"A checksum is required to validate the code. Received: {checksums}")
73
77
 
@@ -77,8 +81,18 @@ def validate_python_code(
77
81
  f"Unsupported checksum type: {checksum_type}. Supported checksum types are: {CHECKSUM_FUNCTIONS.keys()}"
78
82
  )
79
83
 
80
- if _hash_text(code_text, checksum_type) != checksum:
81
- raise AirbyteCodeTamperedError(f"{checksum_type} checksum does not match.")
84
+ calculated_checksum = _hash_text(code_text, checksum_type)
85
+ if calculated_checksum != checksum:
86
+ raise AirbyteCodeTamperedError(
87
+ f"{checksum_type} checksum does not match."
88
+ + str(
89
+ {
90
+ "expected_checksum": checksum,
91
+ "actual_checksum": calculated_checksum,
92
+ "code_text": code_text,
93
+ }
94
+ ),
95
+ )
82
96
 
83
97
 
84
98
  def get_registered_components_module(
@@ -94,7 +108,7 @@ def get_registered_components_module(
94
108
 
95
109
  Returns `None` if no components is provided and the `components` module is not found.
96
110
  """
97
- if config and INJECTED_COMPONENTS_PY in config:
111
+ if config and config.get(INJECTED_COMPONENTS_PY, None):
98
112
  if not custom_code_execution_permitted():
99
113
  raise AirbyteCustomCodeNotPermittedError
100
114
 
@@ -245,6 +245,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
245
245
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
246
246
  HttpResponseFilter as HttpResponseFilterModel,
247
247
  )
248
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
249
+ IncrementingCountCursor as IncrementingCountCursorModel,
250
+ )
248
251
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
249
252
  InlineSchemaLoader as InlineSchemaLoaderModel,
250
253
  )
@@ -496,6 +499,9 @@ from airbyte_cdk.sources.streams.concurrent.state_converters.datetime_stream_sta
496
499
  CustomFormatConcurrentStreamStateConverter,
497
500
  DateTimeStreamStateConverter,
498
501
  )
502
+ from airbyte_cdk.sources.streams.concurrent.state_converters.incrementing_count_stream_state_converter import (
503
+ IncrementingCountStreamStateConverter,
504
+ )
499
505
  from airbyte_cdk.sources.streams.http.error_handlers.response_models import ResponseAction
500
506
  from airbyte_cdk.sources.types import Config
501
507
  from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer
@@ -584,6 +590,7 @@ class ModelToComponentFactory:
584
590
  FlattenFieldsModel: self.create_flatten_fields,
585
591
  DpathFlattenFieldsModel: self.create_dpath_flatten_fields,
586
592
  IterableDecoderModel: self.create_iterable_decoder,
593
+ IncrementingCountCursorModel: self.create_incrementing_count_cursor,
587
594
  XmlDecoderModel: self.create_xml_decoder,
588
595
  JsonFileSchemaLoaderModel: self.create_json_file_schema_loader,
589
596
  DynamicSchemaLoaderModel: self.create_dynamic_schema_loader,
@@ -1189,6 +1196,70 @@ class ModelToComponentFactory:
1189
1196
  clamping_strategy=clamping_strategy,
1190
1197
  )
1191
1198
 
1199
+ def create_concurrent_cursor_from_incrementing_count_cursor(
1200
+ self,
1201
+ model_type: Type[BaseModel],
1202
+ component_definition: ComponentDefinition,
1203
+ stream_name: str,
1204
+ stream_namespace: Optional[str],
1205
+ config: Config,
1206
+ message_repository: Optional[MessageRepository] = None,
1207
+ **kwargs: Any,
1208
+ ) -> ConcurrentCursor:
1209
+ # Per-partition incremental streams can dynamically create child cursors which will pass their current
1210
+ # state via the stream_state keyword argument. Incremental syncs without parent streams use the
1211
+ # incoming state and connector_state_manager that is initialized when the component factory is created
1212
+ stream_state = (
1213
+ self._connector_state_manager.get_stream_state(stream_name, stream_namespace)
1214
+ if "stream_state" not in kwargs
1215
+ else kwargs["stream_state"]
1216
+ )
1217
+
1218
+ component_type = component_definition.get("type")
1219
+ if component_definition.get("type") != model_type.__name__:
1220
+ raise ValueError(
1221
+ f"Expected manifest component of type {model_type.__name__}, but received {component_type} instead"
1222
+ )
1223
+
1224
+ incrementing_count_cursor_model = model_type.parse_obj(component_definition)
1225
+
1226
+ if not isinstance(incrementing_count_cursor_model, IncrementingCountCursorModel):
1227
+ raise ValueError(
1228
+ f"Expected {model_type.__name__} component, but received {incrementing_count_cursor_model.__class__.__name__}"
1229
+ )
1230
+
1231
+ interpolated_start_value = (
1232
+ InterpolatedString.create(
1233
+ incrementing_count_cursor_model.start_value, # type: ignore
1234
+ parameters=incrementing_count_cursor_model.parameters or {},
1235
+ )
1236
+ if incrementing_count_cursor_model.start_value
1237
+ else 0
1238
+ )
1239
+
1240
+ interpolated_cursor_field = InterpolatedString.create(
1241
+ incrementing_count_cursor_model.cursor_field,
1242
+ parameters=incrementing_count_cursor_model.parameters or {},
1243
+ )
1244
+ cursor_field = CursorField(interpolated_cursor_field.eval(config=config))
1245
+
1246
+ connector_state_converter = IncrementingCountStreamStateConverter(
1247
+ is_sequential_state=True, # ConcurrentPerPartitionCursor only works with sequential state
1248
+ )
1249
+
1250
+ return ConcurrentCursor(
1251
+ stream_name=stream_name,
1252
+ stream_namespace=stream_namespace,
1253
+ stream_state=stream_state,
1254
+ message_repository=message_repository or self._message_repository,
1255
+ connector_state_manager=self._connector_state_manager,
1256
+ connector_state_converter=connector_state_converter,
1257
+ cursor_field=cursor_field,
1258
+ slice_boundary_fields=None,
1259
+ start=interpolated_start_value, # type: ignore # Having issues w/ inspection for GapType and CursorValueType as shown in existing tests. Confirmed functionality is working in practice
1260
+ end_provider=connector_state_converter.get_end_provider(), # type: ignore # Having issues w/ inspection for GapType and CursorValueType as shown in existing tests. Confirmed functionality is working in practice
1261
+ )
1262
+
1192
1263
  def _assemble_weekday(self, weekday: str) -> Weekday:
1193
1264
  match weekday:
1194
1265
  case "MONDAY":
@@ -1622,6 +1693,31 @@ class ModelToComponentFactory:
1622
1693
  config=config,
1623
1694
  parameters=model.parameters or {},
1624
1695
  )
1696
+ elif model.incremental_sync and isinstance(
1697
+ model.incremental_sync, IncrementingCountCursorModel
1698
+ ):
1699
+ cursor_model: IncrementingCountCursorModel = model.incremental_sync # type: ignore
1700
+
1701
+ start_time_option = (
1702
+ self._create_component_from_model(
1703
+ cursor_model.start_value_option, # type: ignore # mypy still thinks cursor_model of type DatetimeBasedCursor
1704
+ config,
1705
+ parameters=cursor_model.parameters or {},
1706
+ )
1707
+ if cursor_model.start_value_option # type: ignore # mypy still thinks cursor_model of type DatetimeBasedCursor
1708
+ else None
1709
+ )
1710
+
1711
+ # The concurrent engine defaults the start/end fields on the slice to "start" and "end", but
1712
+ # the default DatetimeBasedRequestOptionsProvider() sets them to start_time/end_time
1713
+ partition_field_start = "start"
1714
+
1715
+ request_options_provider = DatetimeBasedRequestOptionsProvider(
1716
+ start_time_option=start_time_option,
1717
+ partition_field_start=partition_field_start,
1718
+ config=config,
1719
+ parameters=model.parameters or {},
1720
+ )
1625
1721
  else:
1626
1722
  request_options_provider = None
1627
1723
 
@@ -2111,6 +2207,22 @@ class ModelToComponentFactory:
2111
2207
  stream_response=False if self._emit_connector_builder_messages else True,
2112
2208
  )
2113
2209
 
2210
+ @staticmethod
2211
+ def create_incrementing_count_cursor(
2212
+ model: IncrementingCountCursorModel, config: Config, **kwargs: Any
2213
+ ) -> DatetimeBasedCursor:
2214
+ # This should not actually get used anywhere at runtime, but needed to add this to pass checks since
2215
+ # we still parse models into components. The issue is that there's no runtime implementation of a
2216
+ # IncrementingCountCursor.
2217
+ # A known and expected issue with this stub is running a check with the declared IncrementingCountCursor because it is run without ConcurrentCursor.
2218
+ return DatetimeBasedCursor(
2219
+ cursor_field=model.cursor_field,
2220
+ datetime_format="%Y-%m-%d",
2221
+ start_datetime="2024-12-12",
2222
+ config=config,
2223
+ parameters={},
2224
+ )
2225
+
2114
2226
  @staticmethod
2115
2227
  def create_iterable_decoder(
2116
2228
  model: IterableDecoderModel, config: Config, **kwargs: Any
@@ -2744,32 +2856,32 @@ class ModelToComponentFactory:
2744
2856
  if model.delete_requester
2745
2857
  else None
2746
2858
  )
2747
- url_requester = (
2859
+ download_target_requester = (
2748
2860
  self._create_component_from_model(
2749
- model=model.url_requester,
2861
+ model=model.download_target_requester,
2750
2862
  decoder=decoder,
2751
2863
  config=config,
2752
2864
  name=f"job extract_url - {name}",
2753
2865
  )
2754
- if model.url_requester
2866
+ if model.download_target_requester
2755
2867
  else None
2756
2868
  )
2757
2869
  status_extractor = self._create_component_from_model(
2758
2870
  model=model.status_extractor, decoder=decoder, config=config, name=name
2759
2871
  )
2760
- urls_extractor = self._create_component_from_model(
2761
- model=model.urls_extractor, decoder=decoder, config=config, name=name
2872
+ download_target_extractor = self._create_component_from_model(
2873
+ model=model.download_target_extractor, decoder=decoder, config=config, name=name
2762
2874
  )
2763
2875
  job_repository: AsyncJobRepository = AsyncHttpJobRepository(
2764
2876
  creation_requester=creation_requester,
2765
2877
  polling_requester=polling_requester,
2766
2878
  download_retriever=download_retriever,
2767
- url_requester=url_requester,
2879
+ download_target_requester=download_target_requester,
2768
2880
  abort_requester=abort_requester,
2769
2881
  delete_requester=delete_requester,
2770
2882
  status_extractor=status_extractor,
2771
2883
  status_mapping=self._create_async_job_status_mapping(model.status_mapping, config),
2772
- urls_extractor=urls_extractor,
2884
+ download_target_extractor=download_target_extractor,
2773
2885
  )
2774
2886
 
2775
2887
  async_job_partition_router = AsyncJobPartitionRouter(
@@ -1,8 +1,8 @@
1
1
  # AsyncHttpJobRepository sequence diagram
2
2
 
3
3
  - Components marked as optional are not required and can be ignored.
4
- - if `url_requester` is not provided, `urls_extractor` will get urls from the `polling_job_response`
5
- - interpolation_context, e.g. `create_job_response` or `polling_job_response` can be obtained from stream_slice
4
+ - if `download_target_requester` is not provided, `download_target_extractor` will get urls from the `polling_response`
5
+ - interpolation_context, e.g. `creation_response` or `polling_response` can be obtained from stream_slice
6
6
 
7
7
  ```mermaid
8
8
  ---
@@ -12,7 +12,7 @@ sequenceDiagram
12
12
  participant AsyncHttpJobRepository as AsyncOrchestrator
13
13
  participant CreationRequester as creation_requester
14
14
  participant PollingRequester as polling_requester
15
- participant UrlRequester as url_requester (Optional)
15
+ participant UrlRequester as download_target_requester (Optional)
16
16
  participant DownloadRetriever as download_retriever
17
17
  participant AbortRequester as abort_requester (Optional)
18
18
  participant DeleteRequester as delete_requester (Optional)
@@ -25,14 +25,14 @@ sequenceDiagram
25
25
 
26
26
  loop Poll for job status
27
27
  AsyncHttpJobRepository ->> PollingRequester: Check job status
28
- PollingRequester ->> Reporting Server: Status request (interpolation_context: `create_job_response`)
28
+ PollingRequester ->> Reporting Server: Status request (interpolation_context: `creation_response`)
29
29
  Reporting Server -->> PollingRequester: Status response
30
30
  PollingRequester -->> AsyncHttpJobRepository: Job status
31
31
  end
32
32
 
33
33
  alt Status: Ready
34
34
  AsyncHttpJobRepository ->> UrlRequester: Request download URLs (if applicable)
35
- UrlRequester ->> Reporting Server: URL request (interpolation_context: `polling_job_response`)
35
+ UrlRequester ->> Reporting Server: URL request (interpolation_context: `polling_response`)
36
36
  Reporting Server -->> UrlRequester: Download URLs
37
37
  UrlRequester -->> AsyncHttpJobRepository: Download URLs
38
38