airbyte-cdk 7.3.2__tar.gz → 7.3.3__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 (466) hide show
  1. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/PKG-INFO +1 -1
  2. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +35 -0
  3. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +1 -1
  4. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +29 -1
  5. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +63 -13
  6. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +6 -6
  7. airbyte_cdk-7.3.3/airbyte_cdk/sources/declarative/retrievers/pagination_tracker.py +64 -0
  8. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +81 -62
  9. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/cursor.py +51 -2
  10. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +1 -0
  11. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/http_client.py +6 -0
  12. airbyte_cdk-7.3.3/airbyte_cdk/sources/streams/http/pagination_reset_exception.py +2 -0
  13. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/response_builder.py +45 -8
  14. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/pyproject.toml +1 -1
  15. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/LICENSE.txt +0 -0
  16. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/LICENSE_SHORT +0 -0
  17. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/README.md +0 -0
  18. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/__init__.py +0 -0
  19. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/__init__.py +0 -0
  20. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/__init__.py +0 -0
  21. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_connector.py +0 -0
  22. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_image.py +0 -0
  23. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_manifest.py +0 -0
  24. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_secrets.py +0 -0
  25. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/_version.py +0 -0
  26. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/airbyte_cdk/exceptions.py +0 -0
  27. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/README.md +0 -0
  28. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  29. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  30. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  31. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/config_observation.py +0 -0
  32. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector.py +0 -0
  33. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/README.md +0 -0
  34. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/__init__.py +0 -0
  35. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  36. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/main.py +0 -0
  37. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/models.py +0 -0
  38. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  39. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  40. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  41. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  42. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  43. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/__init__.py +0 -0
  44. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/destination.py +0 -0
  45. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  46. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  47. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  48. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  49. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  50. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  51. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  52. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  53. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  54. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/entrypoint.py +0 -0
  55. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/exception_handler.py +0 -0
  56. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/__init__.py +0 -0
  57. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/__init__.py +0 -0
  58. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/__init__.py +0 -0
  59. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/declarative_source.py +0 -0
  60. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/declarative_stream.py +0 -0
  61. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/__init__.py +0 -0
  62. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  63. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/declarative_cursor.py +0 -0
  64. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/global_substream_cursor.py +0 -0
  65. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/per_partition_cursor.py +0 -0
  66. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/per_partition_with_global.py +0 -0
  67. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  68. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/legacy/sources/declarative/manifest_declarative_source.py +0 -0
  69. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/logger.py +0 -0
  70. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/README.md +0 -0
  71. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/__init__.py +0 -0
  72. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/exceptions.py +0 -0
  73. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/manifest_migration.py +0 -0
  74. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migration_handler.py +0 -0
  75. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/__init__.py +0 -0
  76. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +0 -0
  77. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +0 -0
  78. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +0 -0
  79. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations/registry.yaml +0 -0
  80. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_migrations/migrations_registry.py +0 -0
  81. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/Dockerfile +0 -0
  82. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/README.md +0 -0
  83. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/__init__.py +0 -0
  84. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/__init__.py +0 -0
  85. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/capabilities.py +0 -0
  86. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/dicts.py +0 -0
  87. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/manifest.py +0 -0
  88. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/api_models/stream.py +0 -0
  89. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/app.py +0 -0
  90. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/__init__.py +0 -0
  91. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_common.py +0 -0
  92. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_info.py +0 -0
  93. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_openapi.py +0 -0
  94. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/_start.py +0 -0
  95. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/cli/run.py +0 -0
  96. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/command_processor/__init__.py +0 -0
  97. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/command_processor/processor.py +0 -0
  98. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/command_processor/utils.py +0 -0
  99. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/helpers/__init__.py +0 -0
  100. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/helpers/auth.py +0 -0
  101. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/helpers/tracing.py +0 -0
  102. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/main.py +0 -0
  103. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/openapi.yaml +0 -0
  104. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/__init__.py +0 -0
  105. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/capabilities.py +0 -0
  106. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/health.py +0 -0
  107. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/manifest_server/routers/manifest.py +0 -0
  108. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/__init__.py +0 -0
  109. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  110. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  111. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/connector_metadata.py +0 -0
  112. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/models/well_known_types.py +0 -0
  113. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/py.typed +0 -0
  114. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/__init__.py +0 -0
  115. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/abstract_source.py +0 -0
  116. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  117. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  118. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  119. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  120. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  121. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  122. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  123. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/config.py +0 -0
  124. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  125. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  126. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  127. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  128. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  129. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  130. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  131. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  132. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  133. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  134. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  135. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  136. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  137. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  138. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  139. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  140. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  141. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  142. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  143. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  144. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  145. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  146. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  147. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  148. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  149. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  150. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  151. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  152. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  153. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
  154. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  155. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  156. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  157. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  158. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  159. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  160. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  161. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  162. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  163. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  164. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  165. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  166. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  167. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  168. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  169. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  170. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  171. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  172. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  173. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  174. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  175. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  176. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  177. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  178. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  179. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  180. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  181. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  182. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +0 -0
  183. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  184. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  185. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  186. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  187. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +0 -0
  188. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  189. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  190. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  191. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  192. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
  193. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  194. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  195. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  196. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  197. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  198. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  199. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  200. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  201. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  202. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  203. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  204. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  205. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  206. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  207. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  208. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  209. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  210. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  211. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  212. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  213. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  214. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  215. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  216. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  217. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  218. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  219. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  220. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  221. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  222. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  223. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
  224. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
  225. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
  226. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
  227. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
  228. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
  229. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
  230. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  231. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  232. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  233. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  234. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  235. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  236. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  237. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/per_partition_request_option_provider.py +0 -0
  238. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  239. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  240. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  241. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  242. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  243. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  244. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  245. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/resolvers/parametrized_components_resolver.py +0 -0
  246. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  247. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  248. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +0 -0
  249. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +0 -0
  250. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py +0 -0
  251. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +0 -0
  252. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +0 -0
  253. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +0 -0
  254. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +0 -0
  255. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  256. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  257. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/composite_schema_loader.py +0 -0
  258. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  259. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  260. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  261. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  262. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  263. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  264. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  265. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  266. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  267. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  268. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer_test_read_decorator.py +0 -0
  269. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  270. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  271. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/__init__.py +0 -0
  272. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/add_fields.py +0 -0
  273. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/config_transformation.py +0 -0
  274. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/remap_field.py +0 -0
  275. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/config_transformations/remove_fields.py +0 -0
  276. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  277. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  278. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  279. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  280. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  281. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  282. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  283. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/types.py +0 -0
  284. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/__init__.py +0 -0
  285. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/dpath_validator.py +0 -0
  286. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/predicate_validator.py +0 -0
  287. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/validate_adheres_to_schema.py +0 -0
  288. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/validation_strategy.py +0 -0
  289. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/validators/validator.py +0 -0
  290. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  291. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/README.md +0 -0
  292. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  293. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  294. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  295. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  296. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  297. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  298. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  299. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  300. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  301. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  302. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  303. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  304. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  305. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  306. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  307. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  308. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  309. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  310. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  311. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
  312. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  313. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
  314. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  315. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  316. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  317. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  318. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  319. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  320. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  321. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  322. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  323. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  324. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  325. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  326. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  327. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  328. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  329. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  330. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  331. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  332. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  333. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  334. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  335. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  336. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  337. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  338. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  339. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  340. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  341. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  342. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/file_based/types.py +0 -0
  343. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/http_config.py +0 -0
  344. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/http_logger.py +0 -0
  345. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/message/__init__.py +0 -0
  346. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/message/concurrent_repository.py +0 -0
  347. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/message/repository.py +0 -0
  348. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/source.py +0 -0
  349. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  350. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/__init__.py +0 -0
  351. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  352. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  353. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  354. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  355. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  356. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  357. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  358. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  359. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  360. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  361. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  362. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  363. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  364. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  365. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  366. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  367. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  368. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  369. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  370. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  371. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  372. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  373. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  374. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  375. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  376. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  377. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  378. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  379. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  380. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  381. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/core.py +0 -0
  382. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  383. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  384. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  385. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  386. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  387. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  388. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  389. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  390. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  391. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  392. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  393. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/http.py +0 -0
  394. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  395. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  396. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  397. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  398. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  399. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  400. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  401. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  402. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/types.py +0 -0
  403. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/__init__.py +0 -0
  404. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/casing.py +0 -0
  405. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/files_directory.py +0 -0
  406. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  407. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  408. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  409. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/transform.py +0 -0
  410. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sources/utils/types.py +0 -0
  411. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/__init__.py +0 -0
  412. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/_util/__init__.py +0 -0
  413. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/_util/hashing.py +0 -0
  414. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  415. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/constants.py +0 -0
  416. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/exceptions.py +0 -0
  417. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/secrets.py +0 -0
  418. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/shared/__init__.py +0 -0
  419. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  420. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  421. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/sql/types.py +0 -0
  422. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/__init__.py +0 -0
  423. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/catalog_builder.py +0 -0
  424. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  425. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  426. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  427. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  428. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/request.py +0 -0
  429. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/mock_http/response.py +0 -0
  430. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/models/__init__.py +0 -0
  431. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/models/outcome.py +0 -0
  432. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/models/scenario.py +0 -0
  433. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
  434. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/_job_runner.py +0 -0
  435. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/connector_base.py +0 -0
  436. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/declarative_sources.py +0 -0
  437. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
  438. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/docker_base.py +0 -0
  439. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
  440. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
  441. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/standard_tests/util.py +0 -0
  442. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/state_builder.py +0 -0
  443. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/__init__.py +0 -0
  444. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/data.py +0 -0
  445. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  446. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  447. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/test/utils/reading.py +0 -0
  448. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/__init__.py +0 -0
  449. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  450. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/analytics_message.py +0 -0
  451. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/connector_paths.py +0 -0
  452. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/constants.py +0 -0
  453. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  454. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  455. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/docker.py +0 -0
  456. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/event_timing.py +0 -0
  457. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  458. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  459. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/message_utils.py +0 -0
  460. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  461. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/print_buffer.py +0 -0
  462. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  463. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/slice_hasher.py +0 -0
  464. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  465. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  466. {airbyte_cdk-7.3.2 → airbyte_cdk-7.3.3}/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: 7.3.2
3
+ Version: 7.3.3
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -2279,12 +2279,14 @@ definitions:
2279
2279
  - FAIL
2280
2280
  - RETRY
2281
2281
  - IGNORE
2282
+ - RESET_PAGINATION
2282
2283
  - RATE_LIMITED
2283
2284
  examples:
2284
2285
  - SUCCESS
2285
2286
  - FAIL
2286
2287
  - RETRY
2287
2288
  - IGNORE
2289
+ - RESET_PAGINATION
2288
2290
  - RATE_LIMITED
2289
2291
  failure_type:
2290
2292
  title: Failure Type
@@ -3707,6 +3709,9 @@ definitions:
3707
3709
  anyOf:
3708
3710
  - "$ref": "#/definitions/DefaultPaginator"
3709
3711
  - "$ref": "#/definitions/NoPagination"
3712
+ pagination_reset:
3713
+ description: Describes what triggers pagination reset and how to handle it.
3714
+ "$ref": "#/definitions/PaginationReset"
3710
3715
  ignore_stream_slicer_parameters_on_paginated_requests:
3711
3716
  description: If true, the partition router and incremental request options will be ignored when paginating requests. Request options set directly on the requester will not be ignored.
3712
3717
  type: boolean
@@ -3730,6 +3735,36 @@ definitions:
3730
3735
  $parameters:
3731
3736
  type: object
3732
3737
  additionalProperties: true
3738
+ PaginationReset:
3739
+ title: Pagination Reset
3740
+ description: Describes what triggers pagination reset and how to handle it. If SPLIT_USING_CURSOR, the connector developer is accountable for ensuring that the records are returned in ascending order.
3741
+ type: object
3742
+ required:
3743
+ - type
3744
+ - action
3745
+ properties:
3746
+ type:
3747
+ type: string
3748
+ enum: [ PaginationReset ]
3749
+ action:
3750
+ type: string
3751
+ enum:
3752
+ - SPLIT_USING_CURSOR
3753
+ - RESET
3754
+ limits:
3755
+ "$ref": "#/definitions/PaginationResetLimits"
3756
+ PaginationResetLimits:
3757
+ title: Pagination Reset Limits
3758
+ description: Describes the limits that trigger pagination reset
3759
+ type: object
3760
+ required:
3761
+ - type
3762
+ properties:
3763
+ type:
3764
+ type: string
3765
+ enum: [ PaginationResetLimits ]
3766
+ number_of_records:
3767
+ type: integer
3733
3768
  GzipDecoder:
3734
3769
  title: gzip
3735
3770
  description: Select 'gzip' for response data that is compressed with gzip. Requires specifying an inner data type/decoder to parse the decompressed data.
@@ -151,7 +151,7 @@ class ConcurrentPerPartitionCursor(Cursor):
151
151
  self._connector_state_converter = connector_state_converter
152
152
  self._cursor_field = cursor_field
153
153
 
154
- self._cursor_factory = cursor_factory
154
+ self._cursor_factory = cursor_factory # self._cursor_factory is flagged as private but is used in model_to_component_factory to ease pagination reset instantiation
155
155
  self._partition_router = partition_router
156
156
 
157
157
  # The dict is ordered to ensure that once the maximum number of partitions is reached,
@@ -539,6 +539,7 @@ class Action(Enum):
539
539
  FAIL = "FAIL"
540
540
  RETRY = "RETRY"
541
541
  IGNORE = "IGNORE"
542
+ RESET_PAGINATION = "RESET_PAGINATION"
542
543
  RATE_LIMITED = "RATE_LIMITED"
543
544
 
544
545
 
@@ -553,7 +554,14 @@ class HttpResponseFilter(BaseModel):
553
554
  action: Optional[Action] = Field(
554
555
  None,
555
556
  description="Action to execute if a response matches the filter.",
556
- examples=["SUCCESS", "FAIL", "RETRY", "IGNORE", "RATE_LIMITED"],
557
+ examples=[
558
+ "SUCCESS",
559
+ "FAIL",
560
+ "RETRY",
561
+ "IGNORE",
562
+ "RESET_PAGINATION",
563
+ "RATE_LIMITED",
564
+ ],
557
565
  title="Action",
558
566
  )
559
567
  failure_type: Optional[FailureType] = Field(
@@ -1173,6 +1181,16 @@ class LegacySessionTokenAuthenticator(BaseModel):
1173
1181
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
1174
1182
 
1175
1183
 
1184
+ class Action1(Enum):
1185
+ SPLIT_USING_CURSOR = "SPLIT_USING_CURSOR"
1186
+ RESET = "RESET"
1187
+
1188
+
1189
+ class PaginationResetLimits(BaseModel):
1190
+ type: Literal["PaginationResetLimits"]
1191
+ number_of_records: Optional[int] = None
1192
+
1193
+
1176
1194
  class CsvDecoder(BaseModel):
1177
1195
  type: Literal["CsvDecoder"]
1178
1196
  encoding: Optional[str] = "utf-8"
@@ -2054,6 +2072,12 @@ class RecordSelector(BaseModel):
2054
2072
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
2055
2073
 
2056
2074
 
2075
+ class PaginationReset(BaseModel):
2076
+ type: Literal["PaginationReset"]
2077
+ action: Action1
2078
+ limits: Optional[PaginationResetLimits] = None
2079
+
2080
+
2057
2081
  class GzipDecoder(BaseModel):
2058
2082
  type: Literal["GzipDecoder"]
2059
2083
  decoder: Union[CsvDecoder, GzipDecoder, JsonDecoder, JsonlDecoder]
@@ -2822,6 +2846,10 @@ class SimpleRetriever(BaseModel):
2822
2846
  None,
2823
2847
  description="Paginator component that describes how to navigate through the API's pages.",
2824
2848
  )
2849
+ pagination_reset: Optional[PaginationReset] = Field(
2850
+ None,
2851
+ description="Describes what triggers pagination reset and how to handle it.",
2852
+ )
2825
2853
  ignore_stream_slicer_parameters_on_paginated_requests: Optional[bool] = Field(
2826
2854
  False,
2827
2855
  description="If true, the partition router and incremental request options will be ignored when paginating requests. Request options set directly on the requester will not be ignored.",
@@ -116,11 +116,15 @@ from airbyte_cdk.sources.declarative.migrations.legacy_to_per_partition_state_mi
116
116
  )
117
117
  from airbyte_cdk.sources.declarative.models import (
118
118
  CustomStateMigration,
119
+ PaginationResetLimits,
119
120
  )
120
121
  from airbyte_cdk.sources.declarative.models.base_model_with_deprecations import (
121
122
  DEPRECATION_LOGS_TAG,
122
123
  BaseModelWithDeprecations,
123
124
  )
125
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
126
+ Action1 as PaginationResetActionModel,
127
+ )
124
128
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
125
129
  AddedFieldDefinition as AddedFieldDefinitionModel,
126
130
  )
@@ -358,6 +362,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
358
362
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
359
363
  PageIncrement as PageIncrementModel,
360
364
  )
365
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
366
+ PaginationReset as PaginationResetModel,
367
+ )
361
368
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
362
369
  ParametrizedComponentsResolver as ParametrizedComponentsResolverModel,
363
370
  )
@@ -529,6 +536,7 @@ from airbyte_cdk.sources.declarative.retrievers.file_uploader import (
529
536
  LocalFileSystemFileWriter,
530
537
  NoopFileWriter,
531
538
  )
539
+ from airbyte_cdk.sources.declarative.retrievers.pagination_tracker import PaginationTracker
532
540
  from airbyte_cdk.sources.declarative.schema import (
533
541
  ComplexFieldType,
534
542
  DefaultSchemaLoader,
@@ -644,6 +652,8 @@ _NO_STREAM_SLICING = SinglePartitionRouter(parameters={})
644
652
  # this would be a circular import
645
653
  MAX_SLICES = 5
646
654
 
655
+ LOGGER = logging.getLogger(f"airbyte.model_to_component_factory")
656
+
647
657
 
648
658
  class ModelToComponentFactory:
649
659
  EPOCH_DATETIME_FORMAT = "%s"
@@ -2043,6 +2053,7 @@ class ModelToComponentFactory:
2043
2053
  if isinstance(concurrent_cursor, FinalStateCursor)
2044
2054
  else concurrent_cursor
2045
2055
  )
2056
+
2046
2057
  retriever = self._create_component_from_model(
2047
2058
  model=model.retriever,
2048
2059
  config=config,
@@ -2051,12 +2062,9 @@ class ModelToComponentFactory:
2051
2062
  request_options_provider=request_options_provider,
2052
2063
  stream_slicer=stream_slicer,
2053
2064
  partition_router=partition_router,
2054
- stop_condition_cursor=concurrent_cursor
2055
- if self._is_stop_condition_on_cursor(model)
2056
- else None,
2057
- client_side_incremental_sync={"cursor": concurrent_cursor}
2058
- if self._is_client_side_filtering_enabled(model)
2059
- else None,
2065
+ has_stop_condition_cursor=self._is_stop_condition_on_cursor(model),
2066
+ is_client_side_incremental_sync=self._is_client_side_filtering_enabled(model),
2067
+ cursor=concurrent_cursor,
2060
2068
  transformations=transformations,
2061
2069
  file_uploader=file_uploader,
2062
2070
  incremental_sync=model.incremental_sync,
@@ -3049,7 +3057,7 @@ class ModelToComponentFactory:
3049
3057
  name: str,
3050
3058
  transformations: List[RecordTransformation] | None = None,
3051
3059
  decoder: Decoder | None = None,
3052
- client_side_incremental_sync: Dict[str, Any] | None = None,
3060
+ client_side_incremental_sync_cursor: Optional[Cursor] = None,
3053
3061
  file_uploader: Optional[DefaultFileUploader] = None,
3054
3062
  **kwargs: Any,
3055
3063
  ) -> RecordSelector:
@@ -3065,14 +3073,14 @@ class ModelToComponentFactory:
3065
3073
  transform_before_filtering = (
3066
3074
  False if model.transform_before_filtering is None else model.transform_before_filtering
3067
3075
  )
3068
- if client_side_incremental_sync:
3076
+ if client_side_incremental_sync_cursor:
3069
3077
  record_filter = ClientSideIncrementalRecordFilterDecorator(
3070
3078
  config=config,
3071
3079
  parameters=model.parameters,
3072
3080
  condition=model.record_filter.condition
3073
3081
  if (model.record_filter and hasattr(model.record_filter, "condition"))
3074
3082
  else None,
3075
- **client_side_incremental_sync,
3083
+ cursor=client_side_incremental_sync_cursor,
3076
3084
  )
3077
3085
  transform_before_filtering = (
3078
3086
  True
@@ -3150,8 +3158,9 @@ class ModelToComponentFactory:
3150
3158
  name: str,
3151
3159
  primary_key: Optional[Union[str, List[str], List[List[str]]]],
3152
3160
  request_options_provider: Optional[RequestOptionsProvider] = None,
3153
- stop_condition_cursor: Optional[Cursor] = None,
3154
- client_side_incremental_sync: Optional[Dict[str, Any]] = None,
3161
+ cursor: Optional[Cursor] = None,
3162
+ has_stop_condition_cursor: bool = False,
3163
+ is_client_side_incremental_sync: bool = False,
3155
3164
  transformations: List[RecordTransformation],
3156
3165
  file_uploader: Optional[DefaultFileUploader] = None,
3157
3166
  incremental_sync: Optional[
@@ -3181,6 +3190,9 @@ class ModelToComponentFactory:
3181
3190
 
3182
3191
  return _url or _url_base
3183
3192
 
3193
+ if cursor is None:
3194
+ cursor = FinalStateCursor(name, None, self._message_repository)
3195
+
3184
3196
  decoder = (
3185
3197
  self._create_component_from_model(model=model.decoder, config=config)
3186
3198
  if model.decoder
@@ -3192,7 +3204,7 @@ class ModelToComponentFactory:
3192
3204
  config=config,
3193
3205
  decoder=decoder,
3194
3206
  transformations=transformations,
3195
- client_side_incremental_sync=client_side_incremental_sync,
3207
+ client_side_incremental_sync_cursor=cursor if is_client_side_incremental_sync else None,
3196
3208
  file_uploader=file_uploader,
3197
3209
  )
3198
3210
 
@@ -3280,7 +3292,7 @@ class ModelToComponentFactory:
3280
3292
  url_base=_get_url(requester),
3281
3293
  extractor_model=model.record_selector.extractor,
3282
3294
  decoder=decoder,
3283
- cursor_used_for_stop_condition=stop_condition_cursor or None,
3295
+ cursor_used_for_stop_condition=cursor if has_stop_condition_cursor else None,
3284
3296
  )
3285
3297
  if model.paginator
3286
3298
  else NoPagination(parameters={})
@@ -3329,6 +3341,13 @@ class ModelToComponentFactory:
3329
3341
  parameters=model.parameters or {},
3330
3342
  )
3331
3343
 
3344
+ if (
3345
+ model.record_selector.record_filter
3346
+ and model.pagination_reset
3347
+ and model.pagination_reset.limits
3348
+ ):
3349
+ raise ValueError("PaginationResetLimits are not supported while having record filter.")
3350
+
3332
3351
  return SimpleRetriever(
3333
3352
  name=name,
3334
3353
  paginator=paginator,
@@ -3342,9 +3361,40 @@ class ModelToComponentFactory:
3342
3361
  ignore_stream_slicer_parameters_on_paginated_requests=ignore_stream_slicer_parameters_on_paginated_requests,
3343
3362
  additional_query_properties=query_properties,
3344
3363
  log_formatter=self._get_log_formatter(log_formatter, name),
3364
+ pagination_tracker_factory=self._create_pagination_tracker_factory(
3365
+ model.pagination_reset, cursor
3366
+ ),
3345
3367
  parameters=model.parameters or {},
3346
3368
  )
3347
3369
 
3370
+ def _create_pagination_tracker_factory(
3371
+ self, model: Optional[PaginationResetModel], cursor: Cursor
3372
+ ) -> Callable[[], PaginationTracker]:
3373
+ if model is None:
3374
+ return lambda: PaginationTracker()
3375
+
3376
+ # Until we figure out a way to use any cursor for PaginationTracker, we will have to have this cursor selector logic
3377
+ cursor_factory: Callable[[], Optional[ConcurrentCursor]] = lambda: None
3378
+ if model.action == PaginationResetActionModel.RESET:
3379
+ # in that case, we will let cursor_factory to return None even if the stream has a cursor
3380
+ pass
3381
+ elif model.action == PaginationResetActionModel.SPLIT_USING_CURSOR:
3382
+ if isinstance(cursor, ConcurrentCursor):
3383
+ cursor_factory = lambda: cursor.copy_without_state() # type: ignore # the if condition validates that it is a ConcurrentCursor
3384
+ elif isinstance(cursor, ConcurrentPerPartitionCursor):
3385
+ cursor_factory = lambda: cursor._cursor_factory.create( # type: ignore # if this becomes a problem, we would need to extract the cursor_factory instantiation logic and make it accessible here
3386
+ {}, datetime.timedelta(0)
3387
+ )
3388
+ elif not isinstance(cursor, FinalStateCursor):
3389
+ LOGGER.warning(
3390
+ "Unknown cursor for PaginationTracker. Pagination resets might not work properly"
3391
+ )
3392
+ else:
3393
+ raise ValueError(f"Unknown PaginationReset action: {model.action}")
3394
+
3395
+ limit = model.limits.number_of_records if model and model.limits else None
3396
+ return lambda: PaginationTracker(cursor_factory(), limit)
3397
+
3348
3398
  def _get_log_formatter(
3349
3399
  self, log_formatter: Callable[[Response], Any] | None, name: str
3350
3400
  ) -> Callable[[Response], Any] | None:
@@ -66,14 +66,14 @@ class CompositeErrorHandler(ErrorHandler):
66
66
  if not isinstance(matched_error_resolution, ErrorResolution):
67
67
  continue
68
68
 
69
- if matched_error_resolution.response_action == ResponseAction.SUCCESS:
69
+ if matched_error_resolution.response_action in [
70
+ ResponseAction.SUCCESS,
71
+ ResponseAction.RETRY,
72
+ ResponseAction.IGNORE,
73
+ ResponseAction.RESET_PAGINATION,
74
+ ]:
70
75
  return matched_error_resolution
71
76
 
72
- if (
73
- matched_error_resolution.response_action == ResponseAction.RETRY
74
- or matched_error_resolution.response_action == ResponseAction.IGNORE
75
- ):
76
- return matched_error_resolution
77
77
  if matched_error_resolution:
78
78
  return matched_error_resolution
79
79
 
@@ -0,0 +1,64 @@
1
+ from typing import Optional
2
+
3
+ from airbyte_cdk.sources.declarative.models import FailureType
4
+ from airbyte_cdk.sources.declarative.types import Record, StreamSlice
5
+ from airbyte_cdk.sources.streams.concurrent.cursor import ConcurrentCursor
6
+ from airbyte_cdk.utils.traced_exception import AirbyteTracedException
7
+
8
+
9
+ class PaginationTracker:
10
+ _record_count: int
11
+ _number_of_attempt_with_same_slice: int
12
+
13
+ def __init__(
14
+ self, cursor: Optional[ConcurrentCursor] = None, max_number_of_records: Optional[int] = None
15
+ ) -> None:
16
+ """
17
+ Ideally, we would have passed the `Cursor` interface here instead of `ConcurrentCursor` but not all
18
+ implementations of `Cursor` can support this use case. For example, if the `ConcurrentPerPartitionCursor`
19
+ switch to global state, we stop keeping track of the state per partition and therefore can't get an accurate
20
+ view for a specific stream_slice. In order to solve that, we decided to scope this feature to use only
21
+ ConcurrentCursor which is the only "leaf" cursor that actually emits stream slices with `cursor_partition`.
22
+ """
23
+ self._cursor = cursor
24
+ self._limit = max_number_of_records
25
+ self._reset()
26
+
27
+ """
28
+ Given we have a cursor, we do not allow for the same slice to be processed twice because we assume we will
29
+ always process the same slice.
30
+
31
+ Given no cursor, we assume that the pagination reset is for retrying purposes and we allow to retry once.
32
+ """
33
+ self._allowed_number_of_attempt_with_same_slice = 1 if self._cursor else 2
34
+ self._number_of_attempt_with_same_slice = 0
35
+
36
+ def observe(self, record: Record) -> None:
37
+ self._record_count += 1
38
+ if self._cursor:
39
+ self._cursor.observe(record)
40
+
41
+ def has_reached_limit(self) -> bool:
42
+ return self._limit is not None and self._record_count >= self._limit
43
+
44
+ def _reset(self) -> None:
45
+ self._record_count = 0
46
+
47
+ def reduce_slice_range_if_possible(self, stream_slice: StreamSlice) -> StreamSlice:
48
+ new_slice = self._cursor.reduce_slice_range(stream_slice) if self._cursor else stream_slice
49
+
50
+ if new_slice == stream_slice:
51
+ self._number_of_attempt_with_same_slice += 1
52
+ if (
53
+ self._number_of_attempt_with_same_slice
54
+ >= self._allowed_number_of_attempt_with_same_slice
55
+ ):
56
+ raise AirbyteTracedException(
57
+ internal_message=f"There were {self._number_of_attempt_with_same_slice} attempts with the same slice already while the max allowed is {self._allowed_number_of_attempt_with_same_slice}",
58
+ failure_type=FailureType.system_error,
59
+ )
60
+ else:
61
+ self._number_of_attempt_with_same_slice = 0
62
+
63
+ self._reset()
64
+ return new_slice
@@ -3,10 +3,10 @@
3
3
  #
4
4
 
5
5
  import json
6
+ import logging
6
7
  from collections import defaultdict
7
8
  from dataclasses import InitVar, dataclass, field
8
9
  from functools import partial
9
- from itertools import islice
10
10
  from typing import (
11
11
  Any,
12
12
  Callable,
@@ -39,14 +39,20 @@ from airbyte_cdk.sources.declarative.requesters.request_options import (
39
39
  RequestOptionsProvider,
40
40
  )
41
41
  from airbyte_cdk.sources.declarative.requesters.requester import Requester
42
+ from airbyte_cdk.sources.declarative.retrievers.pagination_tracker import PaginationTracker
42
43
  from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever
43
44
  from airbyte_cdk.sources.declarative.stream_slicers.stream_slicer import StreamSlicer
44
45
  from airbyte_cdk.sources.source import ExperimentalClassWarning
46
+ from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
45
47
  from airbyte_cdk.sources.streams.core import StreamData
48
+ from airbyte_cdk.sources.streams.http.pagination_reset_exception import (
49
+ PaginationResetRequiredException,
50
+ )
46
51
  from airbyte_cdk.sources.types import Config, Record, StreamSlice, StreamState
47
52
  from airbyte_cdk.utils.mapping_helpers import combine_mappings
48
53
 
49
54
  FULL_REFRESH_SYNC_COMPLETE_KEY = "__ab_full_refresh_sync_complete"
55
+ LOGGER = logging.getLogger("airbyte")
50
56
 
51
57
 
52
58
  @dataclass
@@ -92,8 +98,14 @@ class SimpleRetriever(Retriever):
92
98
  ignore_stream_slicer_parameters_on_paginated_requests: bool = False
93
99
  additional_query_properties: Optional[QueryProperties] = None
94
100
  log_formatter: Optional[Callable[[requests.Response], Any]] = None
101
+ pagination_tracker_factory: Callable[[], PaginationTracker] = field(
102
+ default_factory=lambda: lambda: PaginationTracker()
103
+ )
95
104
 
96
105
  def __post_init__(self, parameters: Mapping[str, Any]) -> None:
106
+ # while changing `ModelToComponentFactory.create_simple_retriever` to accept a cursor, the sources implementing
107
+ # a CustomRetriever inheriting for SimpleRetriever needed to have the following validation added.
108
+ self.cursor = None if isinstance(self.cursor, Cursor) else self.cursor
97
109
  self._paginator = self.paginator or NoPagination(parameters=parameters)
98
110
  self._parameters = parameters
99
111
  self._name = (
@@ -362,90 +374,97 @@ class SimpleRetriever(Retriever):
362
374
  stream_state: Mapping[str, Any],
363
375
  stream_slice: StreamSlice,
364
376
  ) -> Iterable[Record]:
365
- pagination_complete = False
366
- initial_token = self._paginator.get_initial_token()
367
- next_page_token: Optional[Mapping[str, Any]] = (
368
- {"next_page_token": initial_token} if initial_token is not None else None
369
- )
370
- while not pagination_complete:
371
- property_chunks: List[List[str]] = (
372
- list(
373
- self.additional_query_properties.get_request_property_chunks(
374
- stream_slice=stream_slice
375
- )
376
- )
377
- if self.additional_query_properties
378
- else [
379
- []
380
- ] # A single empty property chunk represents the case where property chunking is not configured
381
- )
382
-
377
+ pagination_tracker = self.pagination_tracker_factory()
378
+ reset_pagination = False
379
+ next_page_token = self._get_initial_next_page_token()
380
+ while True:
383
381
  merged_records: MutableMapping[str, Any] = defaultdict(dict)
384
382
  last_page_size = 0
385
383
  last_record: Optional[Record] = None
386
- response: Optional[requests.Response] = None
387
- for properties in property_chunks:
388
- if len(properties) > 0:
389
- stream_slice = StreamSlice(
390
- partition=stream_slice.partition or {},
391
- cursor_slice=stream_slice.cursor_slice or {},
392
- extra_fields={"query_properties": properties},
393
- )
394
-
395
- response = self._fetch_next_page(stream_state, stream_slice, next_page_token)
396
- for current_record in records_generator_fn(response):
397
- if (
398
- current_record
399
- and self.additional_query_properties
400
- and self.additional_query_properties.property_chunking
384
+
385
+ response = None
386
+ try:
387
+ if (
388
+ self.additional_query_properties
389
+ and self.additional_query_properties.property_chunking
390
+ ):
391
+ for properties in self.additional_query_properties.get_request_property_chunks(
392
+ stream_slice=stream_slice
401
393
  ):
402
- merge_key = (
403
- self.additional_query_properties.property_chunking.get_merge_key(
404
- current_record
394
+ stream_slice = StreamSlice(
395
+ partition=stream_slice.partition or {},
396
+ cursor_slice=stream_slice.cursor_slice or {},
397
+ extra_fields={"query_properties": properties},
398
+ )
399
+ response = self._fetch_next_page(
400
+ stream_state, stream_slice, next_page_token
401
+ )
402
+
403
+ for current_record in records_generator_fn(response):
404
+ merge_key = (
405
+ self.additional_query_properties.property_chunking.get_merge_key(
406
+ current_record
407
+ )
405
408
  )
409
+ if merge_key:
410
+ _deep_merge(merged_records[merge_key], current_record)
411
+ else:
412
+ # We should still emit records even if the record did not have a merge key
413
+ pagination_tracker.observe(current_record)
414
+ last_page_size += 1
415
+ last_record = current_record
416
+ yield current_record
417
+
418
+ for merged_record in merged_records.values():
419
+ record = Record(
420
+ data=merged_record, stream_name=self.name, associated_slice=stream_slice
406
421
  )
407
- if merge_key:
408
- _deep_merge(merged_records[merge_key], current_record)
409
- else:
410
- # We should still emit records even if the record did not have a merge key
411
- last_page_size += 1
412
- last_record = current_record
413
- yield current_record
414
- else:
422
+ pagination_tracker.observe(record)
423
+ last_page_size += 1
424
+ last_record = record
425
+ yield record
426
+ else:
427
+ response = self._fetch_next_page(stream_state, stream_slice, next_page_token)
428
+ for current_record in records_generator_fn(response):
429
+ pagination_tracker.observe(current_record)
415
430
  last_page_size += 1
416
431
  last_record = current_record
417
432
  yield current_record
418
-
419
- if (
420
- self.additional_query_properties
421
- and self.additional_query_properties.property_chunking
422
- ):
423
- for merged_record in merged_records.values():
424
- record = Record(
425
- data=merged_record, stream_name=self.name, associated_slice=stream_slice
426
- )
427
- last_page_size += 1
428
- last_record = record
429
- yield record
430
-
431
- if not response:
432
- pagination_complete = True
433
+ except PaginationResetRequiredException:
434
+ reset_pagination = True
435
+ else:
436
+ if not response:
437
+ break
438
+
439
+ if reset_pagination or pagination_tracker.has_reached_limit():
440
+ next_page_token = self._get_initial_next_page_token()
441
+ previous_slice = stream_slice
442
+ stream_slice = pagination_tracker.reduce_slice_range_if_possible(stream_slice)
443
+ LOGGER.info(
444
+ f"Hitting PaginationReset event. StreamSlice used will go from {previous_slice} to {stream_slice}"
445
+ )
446
+ reset_pagination = False
433
447
  else:
434
448
  last_page_token_value = (
435
449
  next_page_token.get("next_page_token") if next_page_token else None
436
450
  )
437
451
  next_page_token = self._next_page_token(
438
- response=response,
452
+ response=response, # type:ignore # we are breaking from the loop on the try/else if there are no response so this should be fine
439
453
  last_page_size=last_page_size,
440
454
  last_record=last_record,
441
455
  last_page_token_value=last_page_token_value,
442
456
  )
443
457
  if not next_page_token:
444
- pagination_complete = True
458
+ break
445
459
 
446
460
  # Always return an empty generator just in case no records were ever yielded
447
461
  yield from []
448
462
 
463
+ def _get_initial_next_page_token(self) -> Optional[Mapping[str, Any]]:
464
+ initial_token = self._paginator.get_initial_token()
465
+ next_page_token = {"next_page_token": initial_token} if initial_token is not None else None
466
+ return next_page_token
467
+
449
468
  def _read_single_page(
450
469
  self,
451
470
  records_generator_fn: Callable[[Optional[requests.Response]], Iterable[Record]],