airbyte-cdk 0.68.4__tar.gz → 0.69.1__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (472) hide show
  1. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/PKG-INFO +1 -1
  2. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/entrypoint.py +27 -7
  3. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/connector_state_manager.py +0 -1
  4. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_based_source.py +4 -2
  5. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +2 -2
  6. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +2 -2
  7. airbyte-cdk-0.68.4/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_noop_cursor.py → airbyte-cdk-0.69.1/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +21 -6
  8. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +2 -2
  9. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +27 -3
  10. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +7 -3
  11. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/entrypoint_wrapper.py +1 -1
  12. airbyte-cdk-0.69.1/airbyte_cdk/utils/message_utils.py +17 -0
  13. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/PKG-INFO +1 -1
  14. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/SOURCES.txt +3 -1
  15. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/setup.py +1 -1
  16. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/concurrent_source/test_concurrent_source_adapter.py +2 -2
  17. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/csv_scenarios.py +128 -37
  18. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/concurrent/test_adapters.py +3 -3
  19. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_file_based_scenarios.py +13 -6
  20. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_scenarios.py +32 -3
  21. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_builder.py +2 -2
  22. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_scenarios.py +16 -14
  23. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_source_builder.py +5 -4
  24. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_default_stream.py +8 -6
  25. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_stream_read.py +3 -2
  26. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_concurrent_source.py +7 -5
  27. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_source_read.py +2 -3
  28. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/test_entrypoint_wrapper.py +9 -6
  29. airbyte-cdk-0.69.1/unit_tests/utils/test_message_utils.py +91 -0
  30. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/LICENSE.txt +0 -0
  31. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/README.md +0 -0
  32. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/__init__.py +0 -0
  33. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/config_observation.py +0 -0
  34. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector.py +0 -0
  35. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
  36. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  37. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/main.py +0 -0
  38. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  39. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/connector_builder/models.py +0 -0
  40. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/__init__.py +0 -0
  41. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/destination.py +0 -0
  42. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  43. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  44. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  45. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  46. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  47. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  48. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  49. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  50. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/exception_handler.py +0 -0
  51. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/logger.py +0 -0
  52. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/models/__init__.py +0 -0
  53. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  54. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/models/well_known_types.py +0 -0
  55. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/py.typed +0 -0
  56. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/__init__.py +0 -0
  57. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/abstract_source.py +0 -0
  58. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  59. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  60. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  61. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  62. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  63. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  64. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/config.py +0 -0
  65. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  66. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  67. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  68. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  69. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  70. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  71. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  72. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  73. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  74. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  75. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/create_partial.py +0 -0
  76. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  77. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  78. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  79. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  80. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  81. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  82. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  83. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  84. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  85. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  86. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  87. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  88. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  89. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  90. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  91. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  92. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  93. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/cursor.py +0 -0
  94. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  95. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  96. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  97. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  98. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  99. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  100. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  101. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  102. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  103. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  104. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  105. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  106. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  107. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  108. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  109. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/class_types_registry.py +0 -0
  110. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  111. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py +0 -0
  112. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  113. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  114. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
  115. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  116. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  117. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  118. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  119. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  120. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  121. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  122. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  123. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  124. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  125. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  126. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  127. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  128. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  129. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  130. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  131. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  132. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_action.py +0 -0
  133. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_status.py +0 -0
  134. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  135. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  136. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  137. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  138. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  139. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  140. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  141. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  142. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  143. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  144. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  145. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  146. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  147. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  148. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  149. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  150. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  151. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  152. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  153. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  154. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  155. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  156. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  157. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  158. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  159. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  160. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  161. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  162. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  163. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  164. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/stream_slicers/cartesian_product_stream_slicer.py +0 -0
  165. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  166. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  167. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  168. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  169. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  170. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/types.py +0 -0
  171. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  172. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/deprecated/__init__.py +0 -0
  173. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/deprecated/base_source.py +0 -0
  174. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/deprecated/client.py +0 -0
  175. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  176. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  177. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  178. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
  179. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
  180. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  181. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  182. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  183. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  184. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  185. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  186. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  187. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  188. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  189. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  190. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  191. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  192. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  193. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  194. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  195. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  196. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  197. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  198. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  199. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  200. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  201. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  202. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  203. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  204. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  205. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  206. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  207. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  208. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  209. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  210. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  211. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  212. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  213. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  214. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  215. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  216. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  217. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  218. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/file_based/types.py +0 -0
  219. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/http_config.py +0 -0
  220. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/http_logger.py +0 -0
  221. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/message/__init__.py +0 -0
  222. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/message/repository.py +0 -0
  223. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/singer/__init__.py +0 -0
  224. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/singer/singer_helpers.py +0 -0
  225. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/singer/source.py +0 -0
  226. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/source.py +0 -0
  227. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
  228. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  229. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  230. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  231. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  232. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  233. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  234. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  235. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  236. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  237. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  238. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  239. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  240. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  241. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/record.py +0 -0
  242. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  243. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  244. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  245. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  246. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/core.py +0 -0
  247. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  248. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/__init__.py +0 -0
  249. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/core.py +0 -0
  250. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/oauth.py +0 -0
  251. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/auth/token.py +0 -0
  252. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  253. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  254. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
  255. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  256. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  257. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  258. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  259. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  260. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  261. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  262. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/streams/utils/stream_helper.py +0 -0
  263. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
  264. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/casing.py +0 -0
  265. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/catalog_helpers.py +0 -0
  266. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  267. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  268. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/schema_models.py +0 -0
  269. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  270. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/transform.py +0 -0
  271. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/sources/utils/types.py +0 -0
  272. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/__init__.py +0 -0
  273. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/catalog_builder.py +0 -0
  274. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  275. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  276. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  277. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/request.py +0 -0
  278. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/response.py +0 -0
  279. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  280. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/test/state_builder.py +0 -0
  281. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/__init__.py +0 -0
  282. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  283. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/analytics_message.py +0 -0
  284. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/constants.py +0 -0
  285. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  286. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/event_timing.py +0 -0
  287. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  288. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  289. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  290. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  291. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  292. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  293. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk/utils/traced_exception.py +0 -0
  294. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/dependency_links.txt +0 -0
  295. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/requires.txt +0 -0
  296. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/airbyte_cdk.egg-info/top_level.txt +0 -0
  297. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/pyproject.toml +0 -0
  298. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/setup.cfg +0 -0
  299. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/source_declarative_manifest/__init__.py +0 -0
  300. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/source_declarative_manifest/main.py +0 -0
  301. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/__init__.py +0 -0
  302. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/test_connector_builder_handler.py +0 -0
  303. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/test_message_grouper.py +0 -0
  304. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/connector_builder/utils.py +0 -0
  305. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/destinations/__init__.py +0 -0
  306. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/destinations/test_destination.py +0 -0
  307. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/singer/__init__.py +0 -0
  308. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/singer/test_singer_helpers.py +0 -0
  309. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/singer/test_singer_source.py +0 -0
  310. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/__init__.py +0 -0
  311. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/concurrent_source/__init__.py +0 -0
  312. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/__init__.py +0 -0
  313. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/__init__.py +0 -0
  314. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_oauth.py +0 -0
  315. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_selective_authenticator.py +0 -0
  316. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_session_token_auth.py +0 -0
  317. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_token_auth.py +0 -0
  318. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/auth/test_token_provider.py +0 -0
  319. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/checks/__init__.py +0 -0
  320. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/checks/test_check_stream.py +0 -0
  321. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/decoders/__init__.py +0 -0
  322. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/decoders/test_json_decoder.py +0 -0
  323. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/external_component.py +0 -0
  324. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/__init__.py +0 -0
  325. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +0 -0
  326. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/test_record_filter.py +0 -0
  327. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/extractors/test_record_selector.py +0 -0
  328. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/__init__.py +0 -0
  329. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/test_datetime_based_cursor.py +0 -0
  330. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor.py +0 -0
  331. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor_integration.py +0 -0
  332. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/__init__.py +0 -0
  333. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_filters.py +0 -0
  334. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py +0 -0
  335. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_mapping.py +0 -0
  336. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_nested_mapping.py +0 -0
  337. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_interpolated_string.py +0 -0
  338. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_jinja.py +0 -0
  339. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/interpolation/test_macros.py +0 -0
  340. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/__init__.py +0 -0
  341. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py +0 -0
  342. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py +0 -0
  343. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +0 -0
  344. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/parsers/testing_components.py +0 -0
  345. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/__init__.py +0 -0
  346. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/test_list_partition_router.py +0 -0
  347. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/test_single_partition_router.py +0 -0
  348. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/partition_routers/test_substream_partition_router.py +0 -0
  349. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/__init__.py +0 -0
  350. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  351. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  352. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_constant_backoff.py +0 -0
  353. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_exponential_backoff.py +0 -0
  354. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_header_helper.py +0 -0
  355. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_time_from_header.py +0 -0
  356. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_until_time_from_header.py +0 -0
  357. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_composite_error_handler.py +0 -0
  358. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_default_error_handler.py +0 -0
  359. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_http_response_filter.py +0 -0
  360. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/error_handlers/test_response_status.py +0 -0
  361. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/__init__.py +0 -0
  362. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_cursor_pagination_strategy.py +0 -0
  363. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +0 -0
  364. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_no_paginator.py +0 -0
  365. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +0 -0
  366. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +0 -0
  367. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_request_option.py +0 -0
  368. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py +0 -0
  369. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/request_options/__init__.py +0 -0
  370. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +0 -0
  371. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/test_http_requester.py +0 -0
  372. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/requesters/test_interpolated_request_input_provider.py +0 -0
  373. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/retrievers/__init__.py +0 -0
  374. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +0 -0
  375. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/__init__.py +0 -0
  376. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/source_test/SourceTest.py +0 -0
  377. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/source_test/__init__.py +0 -0
  378. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/test_default_schema_loader.py +0 -0
  379. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/test_inline_schema_loader.py +0 -0
  380. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/schema/test_json_file_schema_loader.py +0 -0
  381. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/states/__init__.py +0 -0
  382. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/stream_slicers/__init__.py +0 -0
  383. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/stream_slicers/test_cartesian_product_stream_slicer.py +0 -0
  384. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_create_partial.py +0 -0
  385. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_declarative_stream.py +0 -0
  386. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_manifest_declarative_source.py +0 -0
  387. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_types.py +0 -0
  388. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/declarative/test_yaml_declarative_source.py +0 -0
  389. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/__init__.py +0 -0
  390. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/availability_strategy/__init__.py +0 -0
  391. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py +0 -0
  392. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/__init__.py +0 -0
  393. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/test_abstract_file_based_spec.py +0 -0
  394. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/test_csv_format.py +0 -0
  395. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/config/test_file_based_stream_config.py +0 -0
  396. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/discovery_policy/__init__.py +0 -0
  397. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/discovery_policy/test_default_discovery_policy.py +0 -0
  398. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/__init__.py +0 -0
  399. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_avro_parser.py +0 -0
  400. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_csv_parser.py +0 -0
  401. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_jsonl_parser.py +0 -0
  402. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_parquet_parser.py +0 -0
  403. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/file_types/test_unstructured_parser.py +0 -0
  404. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/helpers.py +0 -0
  405. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/in_memory_files_source.py +0 -0
  406. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/__init__.py +0 -0
  407. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/avro_scenarios.py +0 -0
  408. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/check_scenarios.py +0 -0
  409. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/concurrent_incremental_scenarios.py +0 -0
  410. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/file_based_source_builder.py +0 -0
  411. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/incremental_scenarios.py +0 -0
  412. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/jsonl_scenarios.py +0 -0
  413. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/parquet_scenarios.py +0 -0
  414. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/scenario_builder.py +0 -0
  415. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/unstructured_scenarios.py +0 -0
  416. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/user_input_schema_scenarios.py +0 -0
  417. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/scenarios/validation_policy_scenarios.py +0 -0
  418. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/__init__.py +0 -0
  419. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/concurrent/__init__.py +0 -0
  420. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/concurrent/test_file_based_concurrent_cursor.py +0 -0
  421. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/test_default_file_based_cursor.py +0 -0
  422. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/stream/test_default_file_based_stream.py +0 -0
  423. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_file_based_stream_reader.py +0 -0
  424. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/file_based/test_schema_helpers.py +0 -0
  425. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/fixtures/__init__.py +0 -0
  426. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/fixtures/source_test_fixture.py +0 -0
  427. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/message/__init__.py +0 -0
  428. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/message/test_repository.py +0 -0
  429. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/__init__.py +0 -0
  430. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/__init__.py +0 -0
  431. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/__init__.py +0 -0
  432. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/incremental_scenarios.py +0 -0
  433. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_scenarios.py +0 -0
  434. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/test_concurrent_scenarios.py +0 -0
  435. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/scenarios/utils.py +0 -0
  436. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_adapters.py +0 -0
  437. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_concurrent_read_processor.py +0 -0
  438. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_cursor.py +0 -0
  439. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_datetime_state_converter.py +0 -0
  440. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_partition_enqueuer.py +0 -0
  441. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_partition_reader.py +0 -0
  442. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/concurrent/test_thread_pool_manager.py +0 -0
  443. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/__init__.py +0 -0
  444. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/auth/__init__.py +0 -0
  445. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/auth/test_auth.py +0 -0
  446. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/requests_native_auth/__init__.py +0 -0
  447. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +0 -0
  448. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/test_availability_strategy.py +0 -0
  449. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/http/test_http.py +0 -0
  450. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_availability_strategy.py +0 -0
  451. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_call_rate.py +0 -0
  452. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/streams/test_streams_core.py +0 -0
  453. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_abstract_source.py +0 -0
  454. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_config.py +0 -0
  455. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_connector_state_manager.py +0 -0
  456. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_http_logger.py +0 -0
  457. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_integration_source.py +0 -0
  458. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/sources/test_source.py +0 -0
  459. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/__init__.py +0 -0
  460. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/__init__.py +0 -0
  461. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_matcher.py +0 -0
  462. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_mocker.py +0 -0
  463. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_request.py +0 -0
  464. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/test/mock_http/test_response_builder.py +0 -0
  465. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/__init__.py +0 -0
  466. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_datetime_format_inferrer.py +0 -0
  467. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_mapping_helpers.py +0 -0
  468. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_rate_limiting.py +0 -0
  469. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_schema_inferrer.py +0 -0
  470. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_secret_utils.py +0 -0
  471. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_stream_status_utils.py +0 -0
  472. {airbyte-cdk-0.68.4 → airbyte-cdk-0.69.1}/unit_tests/utils/test_traced_exception.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.68.4
3
+ Version: 0.69.1
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -10,23 +10,24 @@ import os.path
10
10
  import socket
11
11
  import sys
12
12
  import tempfile
13
+ from collections import defaultdict
13
14
  from functools import wraps
14
- from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Union
15
+ from typing import Any, DefaultDict, Iterable, List, Mapping, MutableMapping, Optional, Union
15
16
  from urllib.parse import urlparse
16
17
 
17
18
  import requests
18
19
  from airbyte_cdk.connector import TConfig
19
20
  from airbyte_cdk.exception_handler import init_uncaught_exception_handler
20
21
  from airbyte_cdk.logger import init_logger
21
- from airbyte_cdk.models import AirbyteMessage, Status, Type
22
- from airbyte_cdk.models.airbyte_protocol import ConnectorSpecification # type: ignore [attr-defined]
22
+ from airbyte_cdk.models import AirbyteMessage, FailureType, Status, Type
23
+ from airbyte_cdk.models.airbyte_protocol import AirbyteStateStats, ConnectorSpecification # type: ignore [attr-defined]
23
24
  from airbyte_cdk.sources import Source
25
+ from airbyte_cdk.sources.connector_state_manager import HashableStreamDescriptor
24
26
  from airbyte_cdk.sources.utils.schema_helpers import check_config_against_spec_or_exit, split_config
25
- from airbyte_cdk.utils import is_cloud_environment
27
+ from airbyte_cdk.utils import is_cloud_environment, message_utils
26
28
  from airbyte_cdk.utils.airbyte_secrets_utils import get_secrets, update_secrets
27
29
  from airbyte_cdk.utils.constants import ENV_REQUEST_CACHE_PATH
28
30
  from airbyte_cdk.utils.traced_exception import AirbyteTracedException
29
- from airbyte_protocol.models import FailureType
30
31
  from requests import PreparedRequest, Response, Session
31
32
 
32
33
  logger = init_logger("airbyte")
@@ -160,8 +161,27 @@ class AirbyteEntrypoint(object):
160
161
  if self.source.check_config_against_spec:
161
162
  self.validate_connection(source_spec, config)
162
163
 
163
- yield from self.source.read(self.logger, config, catalog, state)
164
- yield from self._emit_queued_messages(self.source)
164
+ stream_message_counter: DefaultDict[HashableStreamDescriptor, int] = defaultdict(int)
165
+ for message in self.source.read(self.logger, config, catalog, state):
166
+ yield self.handle_record_counts(message, stream_message_counter)
167
+ for message in self._emit_queued_messages(self.source):
168
+ yield self.handle_record_counts(message, stream_message_counter)
169
+
170
+ @staticmethod
171
+ def handle_record_counts(message: AirbyteMessage, stream_message_count: DefaultDict[HashableStreamDescriptor, int]) -> AirbyteMessage:
172
+ if message.type == Type.RECORD:
173
+ stream_message_count[message_utils.get_stream_descriptor(message)] += 1
174
+
175
+ elif message.type == Type.STATE:
176
+ stream_descriptor = message_utils.get_stream_descriptor(message)
177
+
178
+ # Set record count from the counter onto the state message
179
+ message.state.sourceStats = message.state.sourceStats or AirbyteStateStats()
180
+ message.state.sourceStats.recordCount = stream_message_count.get(stream_descriptor, 0)
181
+
182
+ # Reset the counter
183
+ stream_message_count[stream_descriptor] = 0
184
+ return message
165
185
 
166
186
  @staticmethod
167
187
  def validate_connection(source_spec: ConnectorSpecification, config: TConfig) -> None:
@@ -82,7 +82,6 @@ class ConnectorStateManager:
82
82
  Generates an AirbyteMessage using the current per-stream state of a specified stream in either the per-stream or legacy format
83
83
  :param stream_name: The name of the stream for the message that is being created
84
84
  :param namespace: The namespace of the stream for the message that is being created
85
- :param send_per_stream_state: Decides which state format the message should be generated as
86
85
  :return: The Airbyte state message to be emitted by the connector during a sync
87
86
  """
88
87
  hashable_descriptor = HashableStreamDescriptor(name=stream_name, namespace=namespace)
@@ -36,7 +36,7 @@ from airbyte_cdk.sources.file_based.stream.concurrent.adapters import FileBasedS
36
36
  from airbyte_cdk.sources.file_based.stream.concurrent.cursor import (
37
37
  AbstractConcurrentFileBasedCursor,
38
38
  FileBasedConcurrentCursor,
39
- FileBasedNoopCursor,
39
+ FileBasedFinalStateCursor,
40
40
  )
41
41
  from airbyte_cdk.sources.file_based.stream.cursor import AbstractFileBasedCursor
42
42
  from airbyte_cdk.sources.message.repository import InMemoryMessageRepository, MessageRepository
@@ -170,7 +170,9 @@ class FileBasedSource(ConcurrentSourceAdapter, ABC):
170
170
  sync_mode = self._get_sync_mode_from_catalog(stream_config.name)
171
171
 
172
172
  if sync_mode == SyncMode.full_refresh and hasattr(self, "_concurrency_level") and self._concurrency_level is not None:
173
- cursor = FileBasedNoopCursor(stream_config)
173
+ cursor = FileBasedFinalStateCursor(
174
+ stream_config=stream_config, stream_namespace=None, message_repository=self.message_repository
175
+ )
174
176
  stream = FileBasedStreamFacade.create_from_stream(
175
177
  self._make_default_stream(stream_config, cursor), self, self.logger, stream_state, cursor
176
178
  )
@@ -18,7 +18,7 @@ from airbyte_cdk.sources.file_based.config.file_based_stream_config import Prima
18
18
  from airbyte_cdk.sources.file_based.file_types.file_type_parser import FileTypeParser
19
19
  from airbyte_cdk.sources.file_based.remote_file import RemoteFile
20
20
  from airbyte_cdk.sources.file_based.stream import AbstractFileBasedStream
21
- from airbyte_cdk.sources.file_based.stream.concurrent.cursor import FileBasedNoopCursor
21
+ from airbyte_cdk.sources.file_based.stream.concurrent.cursor import FileBasedFinalStateCursor
22
22
  from airbyte_cdk.sources.file_based.stream.cursor import AbstractFileBasedCursor
23
23
  from airbyte_cdk.sources.file_based.types import StreamSlice
24
24
  from airbyte_cdk.sources.message import MessageRepository
@@ -71,7 +71,7 @@ class FileBasedStreamFacade(AbstractStreamFacade[DefaultStream], AbstractFileBas
71
71
  partition_generator=FileBasedStreamPartitionGenerator(
72
72
  stream,
73
73
  message_repository,
74
- SyncMode.full_refresh if isinstance(cursor, FileBasedNoopCursor) else SyncMode.incremental,
74
+ SyncMode.full_refresh if isinstance(cursor, FileBasedFinalStateCursor) else SyncMode.incremental,
75
75
  [cursor_field] if cursor_field is not None else None,
76
76
  state,
77
77
  cursor,
@@ -1,5 +1,5 @@
1
1
  from .abstract_concurrent_file_based_cursor import AbstractConcurrentFileBasedCursor
2
2
  from .file_based_concurrent_cursor import FileBasedConcurrentCursor
3
- from .file_based_noop_cursor import FileBasedNoopCursor
3
+ from .file_based_final_state_cursor import FileBasedFinalStateCursor
4
4
 
5
- __all__ = ["AbstractConcurrentFileBasedCursor", "FileBasedConcurrentCursor", "FileBasedNoopCursor"]
5
+ __all__ = ["AbstractConcurrentFileBasedCursor", "FileBasedConcurrentCursor", "FileBasedFinalStateCursor"]
@@ -4,12 +4,15 @@
4
4
 
5
5
  import logging
6
6
  from datetime import datetime
7
- from typing import TYPE_CHECKING, Any, Iterable, List, MutableMapping
7
+ from typing import TYPE_CHECKING, Any, Iterable, List, MutableMapping, Optional
8
8
 
9
+ from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
9
10
  from airbyte_cdk.sources.file_based.config.file_based_stream_config import FileBasedStreamConfig
10
11
  from airbyte_cdk.sources.file_based.remote_file import RemoteFile
11
12
  from airbyte_cdk.sources.file_based.stream.concurrent.cursor.abstract_concurrent_file_based_cursor import AbstractConcurrentFileBasedCursor
12
13
  from airbyte_cdk.sources.file_based.types import StreamState
14
+ from airbyte_cdk.sources.message import MessageRepository
15
+ from airbyte_cdk.sources.streams import FULL_REFRESH_SENTINEL_STATE_KEY
13
16
  from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
14
17
  from airbyte_cdk.sources.streams.concurrent.partitions.record import Record
15
18
 
@@ -17,13 +20,23 @@ if TYPE_CHECKING:
17
20
  from airbyte_cdk.sources.file_based.stream.concurrent.adapters import FileBasedStreamPartition
18
21
 
19
22
 
20
- class FileBasedNoopCursor(AbstractConcurrentFileBasedCursor):
21
- def __init__(self, stream_config: FileBasedStreamConfig, **kwargs: Any):
22
- pass
23
+ class FileBasedFinalStateCursor(AbstractConcurrentFileBasedCursor):
24
+ """Cursor that is used to guarantee at least one state message is emitted for a concurrent file-based stream."""
25
+
26
+ def __init__(
27
+ self, stream_config: FileBasedStreamConfig, message_repository: MessageRepository, stream_namespace: Optional[str], **kwargs: Any
28
+ ):
29
+ self._stream_name = stream_config.name
30
+ self._stream_namespace = stream_namespace
31
+ self._message_repository = message_repository
32
+ # Normally the connector state manager operates at the source-level. However, we only need it to write the sentinel
33
+ # state message rather than manage overall source state. This is also only temporary as we move to the resumable
34
+ # full refresh world where every stream uses a FileBasedConcurrentCursor with incremental state.
35
+ self._connector_state_manager = ConnectorStateManager(stream_instance_map={})
23
36
 
24
37
  @property
25
38
  def state(self) -> MutableMapping[str, Any]:
26
- return {}
39
+ return {FULL_REFRESH_SENTINEL_STATE_KEY: True}
27
40
 
28
41
  def observe(self, record: Record) -> None:
29
42
  pass
@@ -53,4 +66,6 @@ class FileBasedNoopCursor(AbstractConcurrentFileBasedCursor):
53
66
  pass
54
67
 
55
68
  def ensure_at_least_one_state_emitted(self) -> None:
56
- pass
69
+ self._connector_state_manager.update_state_for_stream(self._stream_name, self._stream_namespace, self.state)
70
+ state_message = self._connector_state_manager.create_state_message(self._stream_name, self._stream_namespace)
71
+ self._message_repository.emit_message(state_message)
@@ -21,7 +21,7 @@ from airbyte_cdk.sources.streams.concurrent.availability_strategy import (
21
21
  StreamAvailable,
22
22
  StreamUnavailable,
23
23
  )
24
- from airbyte_cdk.sources.streams.concurrent.cursor import Cursor, NoopCursor
24
+ from airbyte_cdk.sources.streams.concurrent.cursor import Cursor, FinalStateCursor
25
25
  from airbyte_cdk.sources.streams.concurrent.default_stream import DefaultStream
26
26
  from airbyte_cdk.sources.streams.concurrent.exceptions import ExceptionWithDisplayMessage
27
27
  from airbyte_cdk.sources.streams.concurrent.helpers import get_cursor_field_from_stream, get_primary_key_from_stream
@@ -77,7 +77,7 @@ class StreamFacade(AbstractStreamFacade[DefaultStream], Stream):
77
77
  partition_generator=StreamPartitionGenerator(
78
78
  stream,
79
79
  message_repository,
80
- SyncMode.full_refresh if isinstance(cursor, NoopCursor) else SyncMode.incremental,
80
+ SyncMode.full_refresh if isinstance(cursor, FinalStateCursor) else SyncMode.incremental,
81
81
  [cursor_field] if cursor_field is not None else None,
82
82
  state,
83
83
  cursor,
@@ -8,6 +8,7 @@ from typing import Any, List, Mapping, MutableMapping, Optional, Protocol, Tuple
8
8
 
9
9
  from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
10
10
  from airbyte_cdk.sources.message import MessageRepository
11
+ from airbyte_cdk.sources.streams import FULL_REFRESH_SENTINEL_STATE_KEY
11
12
  from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
12
13
  from airbyte_cdk.sources.streams.concurrent.partitions.record import Record
13
14
  from airbyte_cdk.sources.streams.concurrent.state_converters.abstract_stream_state_converter import AbstractStreamStateConverter
@@ -65,10 +66,27 @@ class Cursor(ABC):
65
66
  raise NotImplementedError()
66
67
 
67
68
 
68
- class NoopCursor(Cursor):
69
+ class FinalStateCursor(Cursor):
70
+ """Cursor that is used to guarantee at least one state message is emitted for a concurrent stream."""
71
+
72
+ def __init__(
73
+ self,
74
+ stream_name: str,
75
+ stream_namespace: Optional[str],
76
+ message_repository: MessageRepository,
77
+ ) -> None:
78
+ self._stream_name = stream_name
79
+ self._stream_namespace = stream_namespace
80
+ self._message_repository = message_repository
81
+ # Normally the connector state manager operates at the source-level. However, we only need it to write the sentinel
82
+ # state message rather than manage overall source state. This is also only temporary as we move to the resumable
83
+ # full refresh world where every stream uses a FileBasedConcurrentCursor with incremental state.
84
+ self._connector_state_manager = ConnectorStateManager(stream_instance_map={})
85
+ self._has_closed_at_least_one_slice = False
86
+
69
87
  @property
70
88
  def state(self) -> MutableMapping[str, Any]:
71
- return {}
89
+ return {FULL_REFRESH_SENTINEL_STATE_KEY: True}
72
90
 
73
91
  def observe(self, record: Record) -> None:
74
92
  pass
@@ -77,7 +95,13 @@ class NoopCursor(Cursor):
77
95
  pass
78
96
 
79
97
  def ensure_at_least_one_state_emitted(self) -> None:
80
- pass
98
+ """
99
+ Used primarily for full refresh syncs that do not have a valid cursor value to emit at the end of a sync
100
+ """
101
+
102
+ self._connector_state_manager.update_state_for_stream(self._stream_name, self._stream_namespace, self.state)
103
+ state_message = self._connector_state_manager.create_state_message(self._stream_name, self._stream_namespace)
104
+ self._message_repository.emit_message(state_message)
81
105
 
82
106
 
83
107
  class ConcurrentCursor(Cursor):
@@ -9,7 +9,7 @@ from typing import Any, Iterable, List, Mapping, Optional
9
9
  from airbyte_cdk.models import AirbyteStream, SyncMode
10
10
  from airbyte_cdk.sources.streams.concurrent.abstract_stream import AbstractStream
11
11
  from airbyte_cdk.sources.streams.concurrent.availability_strategy import AbstractAvailabilityStrategy, StreamAvailability
12
- from airbyte_cdk.sources.streams.concurrent.cursor import Cursor, NoopCursor
12
+ from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
13
13
  from airbyte_cdk.sources.streams.concurrent.partitions.partition import Partition
14
14
  from airbyte_cdk.sources.streams.concurrent.partitions.partition_generator import PartitionGenerator
15
15
 
@@ -24,7 +24,7 @@ class DefaultStream(AbstractStream):
24
24
  primary_key: List[str],
25
25
  cursor_field: Optional[str],
26
26
  logger: Logger,
27
- cursor: Optional[Cursor],
27
+ cursor: Cursor,
28
28
  namespace: Optional[str] = None,
29
29
  ) -> None:
30
30
  self._stream_partition_generator = partition_generator
@@ -34,7 +34,7 @@ class DefaultStream(AbstractStream):
34
34
  self._primary_key = primary_key
35
35
  self._cursor_field = cursor_field
36
36
  self._logger = logger
37
- self._cursor = cursor or NoopCursor()
37
+ self._cursor = cursor
38
38
  self._namespace = namespace
39
39
 
40
40
  def generate_partitions(self) -> Iterable[Partition]:
@@ -44,6 +44,10 @@ class DefaultStream(AbstractStream):
44
44
  def name(self) -> str:
45
45
  return self._name
46
46
 
47
+ @property
48
+ def namespace(self) -> Optional[str]:
49
+ return self._namespace
50
+
47
51
  def check_availability(self) -> StreamAvailability:
48
52
  return self._availability_strategy.check_availability(self._logger)
49
53
 
@@ -74,7 +74,7 @@ class EntrypointOutput:
74
74
  state_messages = self._get_message_by_types([Type.STATE])
75
75
  if not state_messages:
76
76
  raise ValueError("Can't provide most recent state as there are no state messages")
77
- return state_messages[-1].state.data
77
+ return state_messages[-1].state.stream
78
78
 
79
79
  @property
80
80
  def logs(self) -> List[AirbyteMessage]:
@@ -0,0 +1,17 @@
1
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
2
+
3
+ from airbyte_cdk.sources.connector_state_manager import HashableStreamDescriptor
4
+ from airbyte_protocol.models import AirbyteMessage, Type
5
+
6
+
7
+ def get_stream_descriptor(message: AirbyteMessage) -> HashableStreamDescriptor:
8
+ if message.type == Type.RECORD:
9
+ return HashableStreamDescriptor(name=message.record.stream, namespace=message.record.namespace)
10
+ elif message.type == Type.STATE:
11
+ if not message.state.stream or not message.state.stream.stream_descriptor:
12
+ raise ValueError("State message was not in per-stream state format, which is required for record counts.")
13
+ return HashableStreamDescriptor(
14
+ name=message.state.stream.stream_descriptor.name, namespace=message.state.stream.stream_descriptor.namespace
15
+ )
16
+ else:
17
+ raise NotImplementedError(f"get_stream_descriptor is not implemented for message type '{message.type}'.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.68.4
3
+ Version: 0.69.1
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -199,7 +199,7 @@ airbyte_cdk/sources/file_based/stream/concurrent/adapters.py
199
199
  airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py
200
200
  airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py
201
201
  airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py
202
- airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_noop_cursor.py
202
+ airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py
203
203
  airbyte_cdk/sources/file_based/stream/cursor/__init__.py
204
204
  airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py
205
205
  airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py
@@ -274,6 +274,7 @@ airbyte_cdk/utils/datetime_format_inferrer.py
274
274
  airbyte_cdk/utils/event_timing.py
275
275
  airbyte_cdk/utils/is_cloud_environment.py
276
276
  airbyte_cdk/utils/mapping_helpers.py
277
+ airbyte_cdk/utils/message_utils.py
277
278
  airbyte_cdk/utils/oneof_option_config.py
278
279
  airbyte_cdk/utils/schema_inferrer.py
279
280
  airbyte_cdk/utils/spec_schema_transformations.py
@@ -461,6 +462,7 @@ unit_tests/test/mock_http/test_response_builder.py
461
462
  unit_tests/utils/__init__.py
462
463
  unit_tests/utils/test_datetime_format_inferrer.py
463
464
  unit_tests/utils/test_mapping_helpers.py
465
+ unit_tests/utils/test_message_utils.py
464
466
  unit_tests/utils/test_rate_limiting.py
465
467
  unit_tests/utils/test_schema_inferrer.py
466
468
  unit_tests/utils/test_secret_utils.py
@@ -36,7 +36,7 @@ setup(
36
36
  name="airbyte-cdk",
37
37
  # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be
38
38
  # updated if our semver format changes such as using release candidate versions.
39
- version="0.68.4",
39
+ version="0.69.1",
40
40
  description="A framework for writing Airbyte Connectors.",
41
41
  long_description=README,
42
42
  long_description_content_type="text/markdown",
@@ -20,7 +20,7 @@ from airbyte_cdk.sources.concurrent_source.concurrent_source_adapter import Conc
20
20
  from airbyte_cdk.sources.message import InMemoryMessageRepository
21
21
  from airbyte_cdk.sources.streams import Stream
22
22
  from airbyte_cdk.sources.streams.concurrent.adapters import StreamFacade
23
- from airbyte_cdk.sources.streams.concurrent.cursor import NoopCursor
23
+ from airbyte_cdk.sources.streams.concurrent.cursor import FinalStateCursor
24
24
 
25
25
 
26
26
  class _MockSource(ConcurrentSourceAdapter):
@@ -36,7 +36,7 @@ class _MockSource(ConcurrentSourceAdapter):
36
36
 
37
37
  def streams(self, config: Mapping[str, Any]) -> List[Stream]:
38
38
  return [
39
- StreamFacade.create_from_stream(s, self, self._logger, None, NoopCursor()) if is_concurrent else s
39
+ StreamFacade.create_from_stream(s, self, self._logger, None, FinalStateCursor(stream_name=s.name, stream_namespace=s.namespace, message_repository=InMemoryMessageRepository())) if is_concurrent else s
40
40
  for s, is_concurrent in self._streams_to_is_concurrent.items()
41
41
  ]
42
42
 
@@ -467,30 +467,24 @@ single_csv_scenario: TestScenario[InMemoryFilesSource] = (
467
467
  )
468
468
  ).build()
469
469
 
470
- multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
470
+ csv_analytics_scenario: TestScenario[InMemoryFilesSource] = (
471
471
  TestScenarioBuilder[InMemoryFilesSource]()
472
- .set_name("multi_format_analytics")
472
+ .set_name("csv_analytics")
473
473
  .set_config(
474
474
  {
475
475
  "streams": [
476
476
  {
477
477
  "name": "stream1",
478
478
  "format": {"filetype": "csv"},
479
- "globs": ["file1.csv"],
479
+ "globs": ["a.csv"],
480
480
  "validation_policy": "Emit Record",
481
481
  },
482
482
  {
483
483
  "name": "stream2",
484
484
  "format": {"filetype": "csv"},
485
- "globs": ["file2.csv"],
486
- "validation_policy": "Emit Record",
487
- },
488
- {
489
- "name": "stream3",
490
- "format": {"filetype": "jsonl"},
491
- "globs": ["file3.jsonl"],
485
+ "globs": ["b.csv"],
492
486
  "validation_policy": "Emit Record",
493
- },
487
+ }
494
488
  ]
495
489
  }
496
490
  )
@@ -498,17 +492,21 @@ multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
498
492
  FileBasedSourceBuilder()
499
493
  .set_files(
500
494
  {
501
- "file1.csv": {
502
- "contents": [],
495
+ "a.csv": {
496
+ "contents": [
497
+ ("col1", "col2"),
498
+ ("val11a", "val12a"),
499
+ ("val21a", "val22a"),
500
+ ],
503
501
  "last_modified": "2023-06-05T03:54:07.000Z",
504
502
  },
505
- "file2.csv": {
506
- "contents": [],
507
- "last_modified": "2023-06-06T03:54:07.000Z",
508
- },
509
- "file3.jsonl": {
510
- "contents": [],
511
- "last_modified": "2023-06-07T03:54:07.000Z",
503
+ "b.csv": {
504
+ "contents": [
505
+ ("col1", "col2", "col3"),
506
+ ("val11b", "val12b", "val13b"),
507
+ ("val21b", "val22b", "val23b"),
508
+ ],
509
+ "last_modified": "2023-06-05T03:54:07.000Z",
512
510
  },
513
511
  }
514
512
  )
@@ -521,7 +519,12 @@ multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
521
519
  "default_cursor_field": ["_ab_source_file_last_modified"],
522
520
  "json_schema": {
523
521
  "type": "object",
524
- "properties": {},
522
+ "properties": {
523
+ "col1": {"type": ["null", "string"]},
524
+ "col2": {"type": ["null", "string"]},
525
+ "_ab_source_file_last_modified": {"type": "string"},
526
+ "_ab_source_file_url": {"type": "string"},
527
+ },
525
528
  },
526
529
  "name": "stream1",
527
530
  "source_defined_cursor": True,
@@ -531,30 +534,64 @@ multi_format_analytics_scenario: TestScenario[InMemoryFilesSource] = (
531
534
  "default_cursor_field": ["_ab_source_file_last_modified"],
532
535
  "json_schema": {
533
536
  "type": "object",
534
- "properties": {},
537
+ "properties": {
538
+ "col1": {"type": ["null", "string"]},
539
+ "col2": {"type": ["null", "string"]},
540
+ "col3": {"type": ["null", "string"]},
541
+ "_ab_source_file_last_modified": {"type": "string"},
542
+ "_ab_source_file_url": {"type": "string"},
543
+ },
535
544
  },
536
545
  "name": "stream2",
537
546
  "source_defined_cursor": True,
538
547
  "supported_sync_modes": ["full_refresh", "incremental"],
539
- },
540
- {
541
- "default_cursor_field": ["_ab_source_file_last_modified"],
542
- "json_schema": {
543
- "type": "object",
544
- "properties": {},
545
- },
546
- "name": "stream3",
547
- "source_defined_cursor": True,
548
- "supported_sync_modes": ["full_refresh", "incremental"],
549
- },
548
+ }
550
549
  ]
551
550
  }
552
551
  )
553
- .set_expected_records([])
552
+ .set_expected_records([
553
+ {
554
+ "data": {
555
+ "col1": "val11a",
556
+ "col2": "val12a",
557
+ "_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
558
+ "_ab_source_file_url": "a.csv",
559
+ },
560
+ "stream": "stream1",
561
+ },
562
+ {
563
+ "data": {
564
+ "col1": "val21a",
565
+ "col2": "val22a",
566
+ "_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
567
+ "_ab_source_file_url": "a.csv",
568
+ },
569
+ "stream": "stream1",
570
+ },
571
+ {
572
+ "data": {
573
+ "col1": "val11b",
574
+ "col2": "val12b",
575
+ "col3": "val13b",
576
+ "_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
577
+ "_ab_source_file_url": "b.csv",
578
+ },
579
+ "stream": "stream2",
580
+ },
581
+ {
582
+ "data": {
583
+ "col1": "val21b",
584
+ "col2": "val22b",
585
+ "col3": "val23b",
586
+ "_ab_source_file_last_modified": "2023-06-05T03:54:07.000000Z",
587
+ "_ab_source_file_url": "b.csv",
588
+ },
589
+ "stream": "stream2",
590
+ },
591
+ ])
554
592
  .set_expected_analytics(
555
593
  [
556
594
  AirbyteAnalyticsTraceMessage(type="file-cdk-csv-stream-count", value="2"),
557
- AirbyteAnalyticsTraceMessage(type="file-cdk-jsonl-stream-count", value="1"),
558
595
  ]
559
596
  )
560
597
  ).build()
@@ -1450,7 +1487,6 @@ empty_schema_inference_scenario: TestScenario[InMemoryFilesSource] = (
1450
1487
  }
1451
1488
  )
1452
1489
  .set_expected_discover_error(AirbyteTracedException, FileBasedSourceError.SCHEMA_INFERENCE_ERROR.value)
1453
- .set_expected_records([])
1454
1490
  ).build()
1455
1491
 
1456
1492
  schemaless_csv_scenario: TestScenario[InMemoryFilesSource] = (
@@ -3009,6 +3045,61 @@ earlier_csv_scenario: TestScenario[InMemoryFilesSource] = (
3009
3045
  ]
3010
3046
  }
3011
3047
  )
3012
- .set_expected_records([])
3013
3048
  .set_expected_discover_error(AirbyteTracedException, FileBasedSourceError.SCHEMA_INFERENCE_ERROR.value)
3014
3049
  ).build()
3050
+
3051
+ csv_no_records_scenario: TestScenario[InMemoryFilesSource] = (
3052
+ TestScenarioBuilder[InMemoryFilesSource]()
3053
+ .set_name("csv_empty_no_records")
3054
+ .set_config(
3055
+ {
3056
+ "streams": [
3057
+ {
3058
+ "name": "stream1",
3059
+ "globs": ["*"],
3060
+ "validation_policy": "Emit Record",
3061
+ "input_schema": '{"col1": "boolean", "col2": "string"}',
3062
+ "format": {
3063
+ "filetype": "csv",
3064
+ "null_values": ["null"],
3065
+ },
3066
+ }
3067
+ ],
3068
+ "start_date": "2023-06-04T03:54:07.000000Z",
3069
+ }
3070
+ )
3071
+ .set_source_builder(
3072
+ FileBasedSourceBuilder()
3073
+ .set_files(
3074
+ {
3075
+ "a.csv": {
3076
+ "contents": [("col1", "col2")], # column headers, but no data rows
3077
+ "last_modified": "2023-06-05T03:54:07.000Z",
3078
+ }
3079
+ }
3080
+ )
3081
+ .set_file_type("csv")
3082
+ )
3083
+ .set_expected_catalog(
3084
+ {
3085
+ "streams": [
3086
+ {
3087
+ "default_cursor_field": ["_ab_source_file_last_modified"],
3088
+ "json_schema": {
3089
+ "type": "object",
3090
+ "properties": {
3091
+ "col1": {"type": "boolean"},
3092
+ "col2": {"type": "string"},
3093
+ "_ab_source_file_last_modified": {"type": "string"},
3094
+ "_ab_source_file_url": {"type": "string"},
3095
+ },
3096
+ },
3097
+ "name": "stream1",
3098
+ "source_defined_cursor": True,
3099
+ "supported_sync_modes": ["full_refresh", "incremental"],
3100
+ }
3101
+ ]
3102
+ }
3103
+ )
3104
+ .set_expected_records([])
3105
+ ).build()
@@ -23,7 +23,7 @@ from airbyte_cdk.sources.file_based.stream.concurrent.adapters import (
23
23
  FileBasedStreamPartition,
24
24
  FileBasedStreamPartitionGenerator,
25
25
  )
26
- from airbyte_cdk.sources.file_based.stream.concurrent.cursor import FileBasedNoopCursor
26
+ from airbyte_cdk.sources.file_based.stream.concurrent.cursor import FileBasedFinalStateCursor
27
27
  from airbyte_cdk.sources.message import InMemoryMessageRepository
28
28
  from airbyte_cdk.sources.streams.concurrent.cursor import Cursor
29
29
  from airbyte_cdk.sources.streams.concurrent.exceptions import ExceptionWithDisplayMessage
@@ -36,7 +36,7 @@ _ANY_SYNC_MODE = SyncMode.full_refresh
36
36
  _ANY_STATE = {"state_key": "state_value"}
37
37
  _ANY_CURSOR_FIELD = ["a", "cursor", "key"]
38
38
  _STREAM_NAME = "stream"
39
- _ANY_CURSOR = Mock(spec=FileBasedNoopCursor)
39
+ _ANY_CURSOR = Mock(spec=FileBasedFinalStateCursor)
40
40
 
41
41
 
42
42
  @pytest.mark.parametrize(
@@ -165,7 +165,7 @@ class StreamFacadeTest(unittest.TestCase):
165
165
  supported_sync_modes=[SyncMode.full_refresh],
166
166
  )
167
167
  self._legacy_stream = DefaultFileBasedStream(
168
- cursor=FileBasedNoopCursor(MagicMock()),
168
+ cursor=FileBasedFinalStateCursor(stream_config=MagicMock(), stream_namespace=None, message_repository=Mock()),
169
169
  config=FileBasedStreamConfig(name="stream", format=CsvFormat()),
170
170
  catalog_schema={},
171
171
  stream_reader=MagicMock(),