airbyte-cdk 0.67.1__tar.gz → 0.67.3__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (471) hide show
  1. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/PKG-INFO +3 -3
  2. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/abstract_source.py +30 -69
  3. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/connector_state_manager.py +12 -26
  4. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +32 -14
  5. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +3 -19
  6. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +1 -3
  7. airbyte-cdk-0.67.3/airbyte_cdk/sources/streams/__init__.py +8 -0
  8. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/adapters.py +3 -19
  9. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/cursor.py +1 -3
  10. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/core.py +36 -34
  11. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk.egg-info/PKG-INFO +3 -3
  12. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk.egg-info/requires.txt +2 -2
  13. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/setup.py +2 -2
  14. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/concurrent_source/test_concurrent_source_adapter.py +2 -1
  15. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/file_types/test_parquet_parser.py +51 -6
  16. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/concurrent_incremental_scenarios.py +139 -199
  17. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/incremental_scenarios.py +91 -133
  18. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/stream/concurrent/test_adapters.py +2 -13
  19. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/stream/concurrent/test_file_based_concurrent_cursor.py +2 -2
  20. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/test_scenarios.py +2 -2
  21. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/incremental_scenarios.py +9 -9
  22. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_scenarios.py +5 -5
  23. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_adapters.py +2 -13
  24. airbyte-cdk-0.67.3/unit_tests/sources/streams/test_stream_read.py +404 -0
  25. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_abstract_source.py +142 -130
  26. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_connector_state_manager.py +3 -124
  27. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_source.py +18 -14
  28. airbyte-cdk-0.67.1/airbyte_cdk/sources/streams/__init__.py +0 -8
  29. airbyte-cdk-0.67.1/unit_tests/sources/streams/test_stream_read.py +0 -194
  30. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/LICENSE.txt +0 -0
  31. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/README.md +0 -0
  32. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/__init__.py +0 -0
  33. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/config_observation.py +0 -0
  34. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/connector.py +0 -0
  35. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/connector_builder/__init__.py +0 -0
  36. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  37. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/connector_builder/main.py +0 -0
  38. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  39. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/connector_builder/models.py +0 -0
  40. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/__init__.py +0 -0
  41. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/destination.py +0 -0
  42. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  43. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  44. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  45. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  46. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  47. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  48. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  49. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  50. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/entrypoint.py +0 -0
  51. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/exception_handler.py +0 -0
  52. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/logger.py +0 -0
  53. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/models/__init__.py +0 -0
  54. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  55. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/models/well_known_types.py +0 -0
  56. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/py.typed +0 -0
  57. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/__init__.py +0 -0
  58. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  59. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  60. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  61. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  62. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  63. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  64. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/config.py +0 -0
  65. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  66. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  67. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  68. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  69. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  70. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  71. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  72. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  73. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  74. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  75. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/create_partial.py +0 -0
  76. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  77. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  78. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  79. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  80. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  81. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  82. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  83. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  84. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  85. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  86. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  87. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  88. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  89. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  90. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  91. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  92. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  93. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/incremental/cursor.py +0 -0
  94. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  95. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  96. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  97. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  98. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  99. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  100. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  101. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  102. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  103. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  104. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  105. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  106. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  107. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  108. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  109. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/class_types_registry.py +0 -0
  110. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  111. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py +0 -0
  112. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  113. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  114. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
  115. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  116. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  117. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  118. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  119. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  120. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  121. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  122. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  123. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  124. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  125. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  126. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  127. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  128. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  129. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  130. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  131. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  132. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_action.py +0 -0
  133. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_status.py +0 -0
  134. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  135. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  136. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  137. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  138. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  139. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  140. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  141. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  142. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  143. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  144. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  145. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  146. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  147. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  148. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  149. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  150. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  151. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  152. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  153. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  154. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  155. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  156. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  157. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  158. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  159. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  160. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  161. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  162. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  163. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  164. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/stream_slicers/cartesian_product_stream_slicer.py +0 -0
  165. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  166. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  167. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  168. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  169. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  170. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/types.py +0 -0
  171. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  172. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/deprecated/__init__.py +0 -0
  173. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/deprecated/base_source.py +0 -0
  174. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/deprecated/client.py +0 -0
  175. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  176. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  177. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  178. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/embedded/runner.py +0 -0
  179. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/embedded/tools.py +0 -0
  180. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  181. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  182. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  183. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  184. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  185. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  186. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  187. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  188. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  189. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  190. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  191. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  192. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  193. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  194. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  195. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  196. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  197. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  198. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  199. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  200. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  201. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  202. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  203. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  204. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  205. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  206. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  207. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  208. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  209. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  210. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  211. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  212. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  213. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  214. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_noop_cursor.py +0 -0
  215. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  216. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  217. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  218. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  219. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/file_based/types.py +0 -0
  220. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/http_config.py +0 -0
  221. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/http_logger.py +0 -0
  222. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/message/__init__.py +0 -0
  223. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/message/repository.py +0 -0
  224. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/singer/__init__.py +0 -0
  225. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/singer/singer_helpers.py +0 -0
  226. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/singer/source.py +0 -0
  227. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/source.py +0 -0
  228. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  229. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  230. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  231. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  232. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  233. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  234. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  235. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  236. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  237. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  238. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  239. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  240. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  241. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  242. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partitions/record.py +0 -0
  243. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  244. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  245. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  246. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  247. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  248. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/auth/__init__.py +0 -0
  249. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/auth/core.py +0 -0
  250. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/auth/oauth.py +0 -0
  251. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/auth/token.py +0 -0
  252. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  253. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  254. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/http.py +0 -0
  255. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  256. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  257. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  258. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  259. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  260. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  261. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  262. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/streams/utils/stream_helper.py +0 -0
  263. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/__init__.py +0 -0
  264. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/casing.py +0 -0
  265. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/catalog_helpers.py +0 -0
  266. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  267. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  268. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/schema_models.py +0 -0
  269. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  270. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/transform.py +0 -0
  271. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/sources/utils/types.py +0 -0
  272. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/__init__.py +0 -0
  273. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/catalog_builder.py +0 -0
  274. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  275. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  276. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  277. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  278. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/mock_http/request.py +0 -0
  279. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/mock_http/response.py +0 -0
  280. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  281. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/test/state_builder.py +0 -0
  282. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/__init__.py +0 -0
  283. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  284. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/analytics_message.py +0 -0
  285. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/constants.py +0 -0
  286. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  287. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/event_timing.py +0 -0
  288. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  289. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  290. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  291. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  292. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  293. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  294. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk/utils/traced_exception.py +0 -0
  295. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk.egg-info/SOURCES.txt +0 -0
  296. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk.egg-info/dependency_links.txt +0 -0
  297. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/airbyte_cdk.egg-info/top_level.txt +0 -0
  298. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/pyproject.toml +0 -0
  299. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/setup.cfg +0 -0
  300. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/source_declarative_manifest/__init__.py +0 -0
  301. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/source_declarative_manifest/main.py +0 -0
  302. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/connector_builder/__init__.py +0 -0
  303. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/connector_builder/test_connector_builder_handler.py +0 -0
  304. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/connector_builder/test_message_grouper.py +0 -0
  305. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/connector_builder/utils.py +0 -0
  306. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/destinations/__init__.py +0 -0
  307. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/destinations/test_destination.py +0 -0
  308. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/singer/__init__.py +0 -0
  309. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/singer/test_singer_helpers.py +0 -0
  310. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/singer/test_singer_source.py +0 -0
  311. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/__init__.py +0 -0
  312. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/concurrent_source/__init__.py +0 -0
  313. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/__init__.py +0 -0
  314. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/auth/__init__.py +0 -0
  315. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/auth/test_oauth.py +0 -0
  316. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/auth/test_selective_authenticator.py +0 -0
  317. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/auth/test_session_token_auth.py +0 -0
  318. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/auth/test_token_auth.py +0 -0
  319. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/auth/test_token_provider.py +0 -0
  320. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/checks/__init__.py +0 -0
  321. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/checks/test_check_stream.py +0 -0
  322. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/decoders/__init__.py +0 -0
  323. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/decoders/test_json_decoder.py +0 -0
  324. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/external_component.py +0 -0
  325. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/extractors/__init__.py +0 -0
  326. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +0 -0
  327. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/extractors/test_record_filter.py +0 -0
  328. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/extractors/test_record_selector.py +0 -0
  329. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/incremental/__init__.py +0 -0
  330. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/incremental/test_datetime_based_cursor.py +0 -0
  331. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/incremental/test_per_partition_cursor.py +0 -0
  332. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/incremental/test_per_partition_cursor_integration.py +0 -0
  333. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/__init__.py +0 -0
  334. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_filters.py +0 -0
  335. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py +0 -0
  336. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_interpolated_mapping.py +0 -0
  337. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_interpolated_nested_mapping.py +0 -0
  338. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_interpolated_string.py +0 -0
  339. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_jinja.py +0 -0
  340. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/interpolation/test_macros.py +0 -0
  341. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/parsers/__init__.py +0 -0
  342. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py +0 -0
  343. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py +0 -0
  344. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +0 -0
  345. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/parsers/testing_components.py +0 -0
  346. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/partition_routers/__init__.py +0 -0
  347. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/partition_routers/test_list_partition_router.py +0 -0
  348. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/partition_routers/test_single_partition_router.py +0 -0
  349. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/partition_routers/test_substream_partition_router.py +0 -0
  350. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/__init__.py +0 -0
  351. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  352. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  353. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_constant_backoff.py +0 -0
  354. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_exponential_backoff.py +0 -0
  355. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_header_helper.py +0 -0
  356. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_time_from_header.py +0 -0
  357. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_until_time_from_header.py +0 -0
  358. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/test_composite_error_handler.py +0 -0
  359. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/test_default_error_handler.py +0 -0
  360. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/test_http_response_filter.py +0 -0
  361. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/error_handlers/test_response_status.py +0 -0
  362. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/__init__.py +0 -0
  363. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_cursor_pagination_strategy.py +0 -0
  364. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +0 -0
  365. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_no_paginator.py +0 -0
  366. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +0 -0
  367. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +0 -0
  368. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_request_option.py +0 -0
  369. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py +0 -0
  370. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/request_options/__init__.py +0 -0
  371. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +0 -0
  372. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/test_http_requester.py +0 -0
  373. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/requesters/test_interpolated_request_input_provider.py +0 -0
  374. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/retrievers/__init__.py +0 -0
  375. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +0 -0
  376. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/schema/__init__.py +0 -0
  377. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/schema/source_test/SourceTest.py +0 -0
  378. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/schema/source_test/__init__.py +0 -0
  379. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/schema/test_default_schema_loader.py +0 -0
  380. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/schema/test_inline_schema_loader.py +0 -0
  381. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/schema/test_json_file_schema_loader.py +0 -0
  382. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/states/__init__.py +0 -0
  383. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/stream_slicers/__init__.py +0 -0
  384. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/stream_slicers/test_cartesian_product_stream_slicer.py +0 -0
  385. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/test_create_partial.py +0 -0
  386. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/test_declarative_stream.py +0 -0
  387. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/test_manifest_declarative_source.py +0 -0
  388. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/declarative/test_yaml_declarative_source.py +0 -0
  389. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/__init__.py +0 -0
  390. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/availability_strategy/__init__.py +0 -0
  391. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py +0 -0
  392. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/config/__init__.py +0 -0
  393. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/config/test_abstract_file_based_spec.py +0 -0
  394. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/config/test_csv_format.py +0 -0
  395. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/config/test_file_based_stream_config.py +0 -0
  396. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/discovery_policy/__init__.py +0 -0
  397. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/discovery_policy/test_default_discovery_policy.py +0 -0
  398. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/file_types/__init__.py +0 -0
  399. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/file_types/test_avro_parser.py +0 -0
  400. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/file_types/test_csv_parser.py +0 -0
  401. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/file_types/test_jsonl_parser.py +0 -0
  402. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/file_types/test_unstructured_parser.py +0 -0
  403. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/helpers.py +0 -0
  404. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/in_memory_files_source.py +0 -0
  405. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/__init__.py +0 -0
  406. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/avro_scenarios.py +0 -0
  407. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/check_scenarios.py +0 -0
  408. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/csv_scenarios.py +0 -0
  409. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/file_based_source_builder.py +0 -0
  410. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/jsonl_scenarios.py +0 -0
  411. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/parquet_scenarios.py +0 -0
  412. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/scenario_builder.py +0 -0
  413. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/unstructured_scenarios.py +0 -0
  414. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/user_input_schema_scenarios.py +0 -0
  415. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/scenarios/validation_policy_scenarios.py +0 -0
  416. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/stream/__init__.py +0 -0
  417. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/stream/concurrent/__init__.py +0 -0
  418. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/stream/test_default_file_based_cursor.py +0 -0
  419. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/stream/test_default_file_based_stream.py +0 -0
  420. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/test_file_based_scenarios.py +0 -0
  421. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/test_file_based_stream_reader.py +0 -0
  422. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/file_based/test_schema_helpers.py +0 -0
  423. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/fixtures/__init__.py +0 -0
  424. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/fixtures/source_test_fixture.py +0 -0
  425. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/message/__init__.py +0 -0
  426. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/message/test_repository.py +0 -0
  427. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/__init__.py +0 -0
  428. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/__init__.py +0 -0
  429. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/__init__.py +0 -0
  430. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_builder.py +0 -0
  431. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/test_concurrent_scenarios.py +0 -0
  432. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_scenarios.py +0 -0
  433. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_source_builder.py +0 -0
  434. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/scenarios/utils.py +0 -0
  435. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_concurrent_read_processor.py +0 -0
  436. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_cursor.py +0 -0
  437. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_datetime_state_converter.py +0 -0
  438. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_default_stream.py +0 -0
  439. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_partition_enqueuer.py +0 -0
  440. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_partition_reader.py +0 -0
  441. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/concurrent/test_thread_pool_manager.py +0 -0
  442. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/__init__.py +0 -0
  443. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/auth/__init__.py +0 -0
  444. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/auth/test_auth.py +0 -0
  445. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/requests_native_auth/__init__.py +0 -0
  446. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +0 -0
  447. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/test_availability_strategy.py +0 -0
  448. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/http/test_http.py +0 -0
  449. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/test_availability_strategy.py +0 -0
  450. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/test_call_rate.py +0 -0
  451. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/streams/test_streams_core.py +0 -0
  452. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_concurrent_source.py +0 -0
  453. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_config.py +0 -0
  454. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_http_logger.py +0 -0
  455. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_integration_source.py +0 -0
  456. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/sources/test_source_read.py +0 -0
  457. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/__init__.py +0 -0
  458. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/mock_http/__init__.py +0 -0
  459. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/mock_http/test_matcher.py +0 -0
  460. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/mock_http/test_mocker.py +0 -0
  461. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/mock_http/test_request.py +0 -0
  462. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/mock_http/test_response_builder.py +0 -0
  463. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/test/test_entrypoint_wrapper.py +0 -0
  464. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/__init__.py +0 -0
  465. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/test_datetime_format_inferrer.py +0 -0
  466. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/test_mapping_helpers.py +0 -0
  467. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/test_rate_limiting.py +0 -0
  468. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/test_schema_inferrer.py +0 -0
  469. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/test_secret_utils.py +0 -0
  470. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/unit_tests/utils/test_stream_status_utils.py +0 -0
  471. {airbyte-cdk-0.67.1 → airbyte-cdk-0.67.3}/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.67.1
3
+ Version: 0.67.3
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -48,7 +48,7 @@ Requires-Dist: pytest-mock; extra == "dev"
48
48
  Requires-Dist: requests-mock; extra == "dev"
49
49
  Requires-Dist: pytest-httpserver; extra == "dev"
50
50
  Requires-Dist: pandas==2.0.3; extra == "dev"
51
- Requires-Dist: pyarrow==12.0.1; extra == "dev"
51
+ Requires-Dist: pyarrow~=15.0.0; extra == "dev"
52
52
  Requires-Dist: langchain==0.0.271; extra == "dev"
53
53
  Requires-Dist: openai[embeddings]==0.27.9; extra == "dev"
54
54
  Requires-Dist: cohere==4.21; extra == "dev"
@@ -66,7 +66,7 @@ Requires-Dist: sphinx-rtd-theme~=1.0; extra == "sphinx-docs"
66
66
  Provides-Extra: file-based
67
67
  Requires-Dist: avro~=1.11.2; extra == "file-based"
68
68
  Requires-Dist: fastavro~=1.8.0; extra == "file-based"
69
- Requires-Dist: pyarrow==12.0.1; extra == "file-based"
69
+ Requires-Dist: pyarrow~=15.0.0; extra == "file-based"
70
70
  Requires-Dist: unstructured==0.10.27; extra == "file-based"
71
71
  Requires-Dist: unstructured[docx,pptx]==0.10.27; extra == "file-based"
72
72
  Requires-Dist: pdf2image==1.16.3; extra == "file-based"
@@ -23,7 +23,7 @@ from airbyte_cdk.models import Type as MessageType
23
23
  from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
24
24
  from airbyte_cdk.sources.message import InMemoryMessageRepository, MessageRepository
25
25
  from airbyte_cdk.sources.source import Source
26
- from airbyte_cdk.sources.streams import Stream
26
+ from airbyte_cdk.sources.streams import FULL_REFRESH_SENTINEL_STATE_KEY, Stream
27
27
  from airbyte_cdk.sources.streams.core import StreamData
28
28
  from airbyte_cdk.sources.streams.http.http import HttpStream
29
29
  from airbyte_cdk.sources.utils.record_helper import stream_data_to_airbyte_message
@@ -181,10 +181,6 @@ class AbstractSource(Source, ABC):
181
181
  def raise_exception_on_missing_stream(self) -> bool:
182
182
  return True
183
183
 
184
- @property
185
- def per_stream_state_enabled(self) -> bool:
186
- return True
187
-
188
184
  def _read_stream(
189
185
  self,
190
186
  logger: logging.Logger,
@@ -206,22 +202,32 @@ class AbstractSource(Source, ABC):
206
202
  )
207
203
  stream_instance.log_stream_sync_configuration()
208
204
 
209
- use_incremental = configured_stream.sync_mode == SyncMode.incremental and stream_instance.supports_incremental
210
- if use_incremental:
211
- record_iterator = self._read_incremental(
212
- logger,
213
- stream_instance,
214
- configured_stream,
215
- state_manager,
216
- internal_config,
217
- )
218
- else:
219
- record_iterator = self._read_full_refresh(logger, stream_instance, configured_stream, internal_config)
205
+ stream_name = configured_stream.stream.name
206
+ # The platform always passes stream state regardless of sync mode. We shouldn't need to consider this case within the
207
+ # connector, but right now we need to prevent accidental usage of the previous stream state
208
+ stream_state = (
209
+ state_manager.get_stream_state(stream_name, stream_instance.namespace)
210
+ if configured_stream.sync_mode == SyncMode.incremental
211
+ else {}
212
+ )
213
+
214
+ if stream_state and "state" in dir(stream_instance) and not self._stream_state_is_full_refresh(stream_state):
215
+ stream_instance.state = stream_state # type: ignore # we check that state in the dir(stream_instance)
216
+ logger.info(f"Setting state of {self.name} stream to {stream_state}")
217
+
218
+ record_iterator = stream_instance.read(
219
+ configured_stream,
220
+ logger,
221
+ self._slice_logger,
222
+ stream_state,
223
+ state_manager,
224
+ internal_config,
225
+ )
220
226
 
221
227
  record_counter = 0
222
- stream_name = configured_stream.stream.name
223
228
  logger.info(f"Syncing stream: {stream_name} ")
224
- for record in record_iterator:
229
+ for record_data_or_message in record_iterator:
230
+ record = self._get_message(record_data_or_message, stream_instance)
225
231
  if record.type == MessageType.RECORD:
226
232
  record_counter += 1
227
233
  if record_counter == 1:
@@ -233,62 +239,11 @@ class AbstractSource(Source, ABC):
233
239
 
234
240
  logger.info(f"Read {record_counter} records from {stream_name} stream")
235
241
 
236
- def _read_incremental(
237
- self,
238
- logger: logging.Logger,
239
- stream_instance: Stream,
240
- configured_stream: ConfiguredAirbyteStream,
241
- state_manager: ConnectorStateManager,
242
- internal_config: InternalConfig,
243
- ) -> Iterator[AirbyteMessage]:
244
- """Read stream using incremental algorithm
245
-
246
- :param logger:
247
- :param stream_instance:
248
- :param configured_stream:
249
- :param state_manager:
250
- :param internal_config:
251
- :return:
252
- """
253
- stream_name = configured_stream.stream.name
254
- stream_state = state_manager.get_stream_state(stream_name, stream_instance.namespace)
255
-
256
- if stream_state and "state" in dir(stream_instance):
257
- stream_instance.state = stream_state # type: ignore # we check that state in the dir(stream_instance)
258
- logger.info(f"Setting state of {self.name} stream to {stream_state}")
259
-
260
- for record_data_or_message in stream_instance.read_incremental(
261
- configured_stream.cursor_field,
262
- logger,
263
- self._slice_logger,
264
- stream_state,
265
- state_manager,
266
- self.per_stream_state_enabled,
267
- internal_config,
268
- ):
269
- yield self._get_message(record_data_or_message, stream_instance)
270
-
271
242
  def _emit_queued_messages(self) -> Iterable[AirbyteMessage]:
272
243
  if self.message_repository:
273
244
  yield from self.message_repository.consume_queue()
274
245
  return
275
246
 
276
- def _read_full_refresh(
277
- self,
278
- logger: logging.Logger,
279
- stream_instance: Stream,
280
- configured_stream: ConfiguredAirbyteStream,
281
- internal_config: InternalConfig,
282
- ) -> Iterator[AirbyteMessage]:
283
- total_records_counter = 0
284
- for record_data_or_message in stream_instance.read_full_refresh(configured_stream.cursor_field, logger, self._slice_logger):
285
- message = self._get_message(record_data_or_message, stream_instance)
286
- yield message
287
- if message.type == MessageType.RECORD:
288
- total_records_counter += 1
289
- if internal_config.is_limit_reached(total_records_counter):
290
- return
291
-
292
247
  def _get_message(self, record_data_or_message: Union[StreamData, AirbyteMessage], stream: Stream) -> AirbyteMessage:
293
248
  """
294
249
  Converts the input to an AirbyteMessage if it is a StreamData. Returns the input as is if it is already an AirbyteMessage
@@ -317,3 +272,9 @@ class AbstractSource(Source, ABC):
317
272
  def _generate_failed_streams_error_message(stream_failures: Mapping[str, AirbyteTracedException]) -> str:
318
273
  failures = ", ".join([f"{stream}: {filter_secrets(exception.__repr__())}" for stream, exception in stream_failures.items()])
319
274
  return f"During the sync, the following streams did not sync successfully: {failures}"
275
+
276
+ @staticmethod
277
+ def _stream_state_is_full_refresh(stream_state: Mapping[str, Any]) -> bool:
278
+ # For full refresh syncs that don't have a suitable cursor value, we emit a state that contains a sentinel key.
279
+ # This key is never used by a connector and is needed during a read to skip assigning the incoming state.
280
+ return FULL_REFRESH_SENTINEL_STATE_KEY in stream_state
@@ -77,7 +77,7 @@ class ConnectorStateManager:
77
77
  stream_descriptor = HashableStreamDescriptor(name=stream_name, namespace=namespace)
78
78
  self.per_stream_states[stream_descriptor] = AirbyteStateBlob.parse_obj(value)
79
79
 
80
- def create_state_message(self, stream_name: str, namespace: Optional[str], send_per_stream_state: bool) -> AirbyteMessage:
80
+ def create_state_message(self, stream_name: str, namespace: Optional[str]) -> AirbyteMessage:
81
81
  """
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
@@ -85,25 +85,18 @@ class ConnectorStateManager:
85
85
  :param send_per_stream_state: Decides which state format the message should be generated as
86
86
  :return: The Airbyte state message to be emitted by the connector during a sync
87
87
  """
88
- if send_per_stream_state:
89
- hashable_descriptor = HashableStreamDescriptor(name=stream_name, namespace=namespace)
90
- stream_state = self.per_stream_states.get(hashable_descriptor) or AirbyteStateBlob()
91
-
92
- # According to the Airbyte protocol, the StreamDescriptor namespace field is not required. However, the platform will throw
93
- # a validation error if it receives namespace=null. That is why if namespace is None, the field should be omitted instead.
94
- stream_descriptor = (
95
- StreamDescriptor(name=stream_name) if namespace is None else StreamDescriptor(name=stream_name, namespace=namespace)
96
- )
97
-
98
- return AirbyteMessage(
99
- type=MessageType.STATE,
100
- state=AirbyteStateMessage(
101
- type=AirbyteStateType.STREAM,
102
- stream=AirbyteStreamState(stream_descriptor=stream_descriptor, stream_state=stream_state),
103
- data=dict(self._get_legacy_state()),
88
+ hashable_descriptor = HashableStreamDescriptor(name=stream_name, namespace=namespace)
89
+ stream_state = self.per_stream_states.get(hashable_descriptor) or AirbyteStateBlob()
90
+
91
+ return AirbyteMessage(
92
+ type=MessageType.STATE,
93
+ state=AirbyteStateMessage(
94
+ type=AirbyteStateType.STREAM,
95
+ stream=AirbyteStreamState(
96
+ stream_descriptor=StreamDescriptor(name=stream_name, namespace=namespace), stream_state=stream_state
104
97
  ),
105
- )
106
- return AirbyteMessage(type=MessageType.STATE, state=AirbyteStateMessage(data=dict(self._get_legacy_state())))
98
+ ),
99
+ )
107
100
 
108
101
  @classmethod
109
102
  def _extract_from_state_message(
@@ -176,13 +169,6 @@ class ConnectorStateManager:
176
169
  streams[stream_descriptor] = AirbyteStateBlob.parse_obj(state_value or {})
177
170
  return streams
178
171
 
179
- def _get_legacy_state(self) -> Mapping[str, Any]:
180
- """
181
- Using the current per-stream state, creates a mapping of all the stream states for the connector being synced
182
- :return: A deep copy of the mapping of stream name to stream state value
183
- """
184
- return {descriptor.name: state.dict() if state else {} for descriptor, state in self.per_stream_states.items()}
185
-
186
172
  @staticmethod
187
173
  def _is_legacy_dict_state(state: Union[List[AirbyteStateMessage], MutableMapping[str, Any]]) -> bool:
188
174
  return isinstance(state, dict)
@@ -5,7 +5,7 @@
5
5
  import json
6
6
  import logging
7
7
  import os
8
- from typing import Any, Dict, Iterable, List, Mapping, Optional, Tuple
8
+ from typing import Any, Dict, Iterable, List, Mapping, Optional, Tuple, Union
9
9
  from urllib.parse import unquote
10
10
 
11
11
  import pyarrow as pa
@@ -16,7 +16,7 @@ from airbyte_cdk.sources.file_based.file_based_stream_reader import AbstractFile
16
16
  from airbyte_cdk.sources.file_based.file_types.file_type_parser import FileTypeParser
17
17
  from airbyte_cdk.sources.file_based.remote_file import RemoteFile
18
18
  from airbyte_cdk.sources.file_based.schema_helpers import SchemaType
19
- from pyarrow import Scalar
19
+ from pyarrow import DictionaryArray, Scalar
20
20
 
21
21
 
22
22
  class ParquetParser(FileTypeParser):
@@ -95,10 +95,23 @@ class ParquetParser(FileTypeParser):
95
95
  return FileReadMode.READ_BINARY
96
96
 
97
97
  @staticmethod
98
- def _to_output_value(parquet_value: Scalar, parquet_format: ParquetFormat) -> Any:
98
+ def _to_output_value(parquet_value: Union[Scalar, DictionaryArray], parquet_format: ParquetFormat) -> Any:
99
+ """
100
+ Convert an entry in a pyarrow table to a value that can be output by the source.
101
+ """
102
+ if isinstance(parquet_value, DictionaryArray):
103
+ return ParquetParser._dictionary_array_to_python_value(parquet_value)
104
+ else:
105
+ return ParquetParser._scalar_to_python_value(parquet_value, parquet_format)
106
+
107
+ @staticmethod
108
+ def _scalar_to_python_value(parquet_value: Scalar, parquet_format: ParquetFormat) -> Any:
99
109
  """
100
110
  Convert a pyarrow scalar to a value that can be output by the source.
101
111
  """
112
+ if parquet_value.as_py() is None:
113
+ return None
114
+
102
115
  # Convert date and datetime objects to isoformat strings
103
116
  if pa.types.is_time(parquet_value.type) or pa.types.is_timestamp(parquet_value.type) or pa.types.is_date(parquet_value.type):
104
117
  return parquet_value.as_py().isoformat()
@@ -109,23 +122,14 @@ class ParquetParser(FileTypeParser):
109
122
 
110
123
  # Decode binary strings to utf-8
111
124
  if ParquetParser._is_binary(parquet_value.type):
112
- py_value = parquet_value.as_py()
113
- if py_value is None:
114
- return py_value
115
- return py_value.decode("utf-8")
125
+ return parquet_value.as_py().decode("utf-8")
126
+
116
127
  if pa.types.is_decimal(parquet_value.type):
117
128
  if parquet_format.decimal_as_float:
118
129
  return parquet_value.as_py()
119
130
  else:
120
131
  return str(parquet_value.as_py())
121
132
 
122
- # Dictionaries are stored as two columns: indices and values
123
- # The indices column is an array of integers that maps to the values column
124
- if pa.types.is_dictionary(parquet_value.type):
125
- return {
126
- "indices": parquet_value.indices.tolist(),
127
- "values": parquet_value.dictionary.tolist(),
128
- }
129
133
  if pa.types.is_map(parquet_value.type):
130
134
  return {k: v for k, v in parquet_value.as_py()}
131
135
 
@@ -149,6 +153,20 @@ class ParquetParser(FileTypeParser):
149
153
  else:
150
154
  return parquet_value.as_py()
151
155
 
156
+ @staticmethod
157
+ def _dictionary_array_to_python_value(parquet_value: DictionaryArray) -> Dict[str, Any]:
158
+ """
159
+ Convert a pyarrow dictionary array to a value that can be output by the source.
160
+
161
+ Dictionaries are stored as two columns: indices and values
162
+ The indices column is an array of integers that maps to the values column
163
+ """
164
+
165
+ return {
166
+ "indices": parquet_value.indices.tolist(),
167
+ "values": parquet_value.dictionary.tolist(),
168
+ }
169
+
152
170
  @staticmethod
153
171
  def parquet_type_to_schema_type(parquet_type: pa.DataType, parquet_format: ParquetFormat) -> Mapping[str, str]:
154
172
  """
@@ -7,7 +7,7 @@ import logging
7
7
  from functools import lru_cache
8
8
  from typing import TYPE_CHECKING, Any, Iterable, List, Mapping, MutableMapping, Optional, Union
9
9
 
10
- from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, Level, SyncMode, Type
10
+ from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, ConfiguredAirbyteStream, Level, SyncMode, Type
11
11
  from airbyte_cdk.sources import AbstractSource
12
12
  from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
13
13
  from airbyte_cdk.sources.file_based.availability_strategy import (
@@ -156,29 +156,13 @@ class FileBasedStreamFacade(AbstractStreamFacade[DefaultStream], AbstractFileBas
156
156
  def get_underlying_stream(self) -> DefaultStream:
157
157
  return self._abstract_stream
158
158
 
159
- def read_full_refresh(
159
+ def read(
160
160
  self,
161
- cursor_field: Optional[List[str]],
162
- logger: logging.Logger,
163
- slice_logger: SliceLogger,
164
- ) -> Iterable[StreamData]:
165
- """
166
- Read full refresh. Delegate to the underlying AbstractStream, ignoring all the parameters
167
- :param cursor_field: (ignored)
168
- :param logger: (ignored)
169
- :param slice_logger: (ignored)
170
- :return: Iterable of StreamData
171
- """
172
- yield from self._read_records()
173
-
174
- def read_incremental(
175
- self,
176
- cursor_field: Optional[List[str]],
161
+ configured_stream: ConfiguredAirbyteStream,
177
162
  logger: logging.Logger,
178
163
  slice_logger: SliceLogger,
179
164
  stream_state: MutableMapping[str, Any],
180
165
  state_manager: ConnectorStateManager,
181
- per_stream_state_enabled: bool,
182
166
  internal_config: InternalConfig,
183
167
  ) -> Iterable[StreamData]:
184
168
  yield from self._read_records()
@@ -155,9 +155,7 @@ class FileBasedConcurrentCursor(AbstractConcurrentFileBasedCursor):
155
155
  self._stream_namespace,
156
156
  new_state,
157
157
  )
158
- state_message = self._connector_state_manager.create_state_message(
159
- self._stream_name, self._stream_namespace, send_per_stream_state=True
160
- )
158
+ state_message = self._connector_state_manager.create_state_message(self._stream_name, self._stream_namespace)
161
159
  self._message_repository.emit_message(state_message)
162
160
 
163
161
  def _get_new_cursor_value(self) -> str:
@@ -0,0 +1,8 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ # Initialize Streams Package
6
+ from .core import FULL_REFRESH_SENTINEL_STATE_KEY, IncrementalMixin, Stream
7
+
8
+ __all__ = ["FULL_REFRESH_SENTINEL_STATE_KEY", "IncrementalMixin", "Stream"]
@@ -8,7 +8,7 @@ import logging
8
8
  from functools import lru_cache
9
9
  from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Tuple, Union
10
10
 
11
- from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, AirbyteStream, Level, SyncMode, Type
11
+ from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, AirbyteStream, ConfiguredAirbyteStream, Level, SyncMode, Type
12
12
  from airbyte_cdk.sources import AbstractSource, Source
13
13
  from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
14
14
  from airbyte_cdk.sources.message import MessageRepository
@@ -116,29 +116,13 @@ class StreamFacade(AbstractStreamFacade[DefaultStream], Stream):
116
116
  self._slice_logger = slice_logger
117
117
  self._logger = logger
118
118
 
119
- def read_full_refresh(
119
+ def read(
120
120
  self,
121
- cursor_field: Optional[List[str]],
122
- logger: logging.Logger,
123
- slice_logger: SliceLogger,
124
- ) -> Iterable[StreamData]:
125
- """
126
- Read full refresh. Delegate to the underlying AbstractStream, ignoring all the parameters
127
- :param cursor_field: (ignored)
128
- :param logger: (ignored)
129
- :param slice_logger: (ignored)
130
- :return: Iterable of StreamData
131
- """
132
- yield from self._read_records()
133
-
134
- def read_incremental(
135
- self,
136
- cursor_field: Optional[List[str]],
121
+ configured_stream: ConfiguredAirbyteStream,
137
122
  logger: logging.Logger,
138
123
  slice_logger: SliceLogger,
139
124
  stream_state: MutableMapping[str, Any],
140
125
  state_manager: ConnectorStateManager,
141
- per_stream_state_enabled: bool,
142
126
  internal_config: InternalConfig,
143
127
  ) -> Iterable[StreamData]:
144
128
  yield from self._read_records()
@@ -184,9 +184,7 @@ class ConcurrentCursor(Cursor):
184
184
  # TODO: if we migrate stored state to the concurrent state format
185
185
  # (aka stop calling self._connector_state_converter.convert_to_sequential_state`), we'll need to cast datetimes to string or
186
186
  # int before emitting state
187
- state_message = self._connector_state_manager.create_state_message(
188
- self._stream_name, self._stream_namespace, send_per_stream_state=True
189
- )
187
+ state_message = self._connector_state_manager.create_state_message(self._stream_name, self._stream_namespace)
190
188
  self._message_repository.emit_message(state_message)
191
189
 
192
190
  def _merge_partitions(self) -> None:
@@ -11,7 +11,7 @@ from functools import lru_cache
11
11
  from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Tuple, Union
12
12
 
13
13
  import airbyte_cdk.sources.utils.casing as casing
14
- from airbyte_cdk.models import AirbyteMessage, AirbyteStream, SyncMode
14
+ from airbyte_cdk.models import AirbyteMessage, AirbyteStream, ConfiguredAirbyteStream, SyncMode
15
15
  from airbyte_cdk.models import Type as MessageType
16
16
 
17
17
  # list of all possible HTTP methods which can be used for sending of request bodies
@@ -31,6 +31,10 @@ StreamData = Union[Mapping[str, Any], AirbyteMessage]
31
31
 
32
32
  JsonSchema = Mapping[str, Any]
33
33
 
34
+ # Streams that only support full refresh don't have a suitable cursor so this sentinel
35
+ # value is used to indicate that stream should not load the incoming state value
36
+ FULL_REFRESH_SENTINEL_STATE_KEY = "__ab_full_refresh_state_message"
37
+
34
38
 
35
39
  def package_name_from_class(cls: object) -> str:
36
40
  """Find the package name given a class name"""
@@ -107,39 +111,24 @@ class Stream(ABC):
107
111
  """
108
112
  return None
109
113
 
110
- def read_full_refresh(
111
- self,
112
- cursor_field: Optional[List[str]],
113
- logger: logging.Logger,
114
- slice_logger: SliceLogger,
115
- ) -> Iterable[StreamData]:
116
- slices = self.stream_slices(sync_mode=SyncMode.full_refresh, cursor_field=cursor_field)
117
- logger.debug(f"Processing stream slices for {self.name} (sync_mode: full_refresh)", extra={"stream_slices": slices})
118
- for _slice in slices:
119
- if slice_logger.should_log_slice_message(logger):
120
- yield slice_logger.create_slice_log_message(_slice)
121
- yield from self.read_records(
122
- stream_slice=_slice,
123
- sync_mode=SyncMode.full_refresh,
124
- cursor_field=cursor_field,
125
- )
126
-
127
- def read_incremental( # type: ignore # ignoring typing for ConnectorStateManager because of circular dependencies
114
+ def read( # type: ignore # ignoring typing for ConnectorStateManager because of circular dependencies
128
115
  self,
129
- cursor_field: Optional[List[str]],
116
+ configured_stream: ConfiguredAirbyteStream,
130
117
  logger: logging.Logger,
131
118
  slice_logger: SliceLogger,
132
119
  stream_state: MutableMapping[str, Any],
133
120
  state_manager,
134
- per_stream_state_enabled: bool,
135
121
  internal_config: InternalConfig,
136
122
  ) -> Iterable[StreamData]:
123
+ sync_mode = configured_stream.sync_mode
124
+ cursor_field = configured_stream.cursor_field
125
+
137
126
  slices = self.stream_slices(
138
127
  cursor_field=cursor_field,
139
- sync_mode=SyncMode.incremental,
128
+ sync_mode=sync_mode, # todo: change this interface to no longer rely on sync_mode for behavior
140
129
  stream_state=stream_state,
141
130
  )
142
- logger.debug(f"Processing stream slices for {self.name} (sync_mode: incremental)", extra={"stream_slices": slices})
131
+ logger.debug(f"Processing stream slices for {self.name} (sync_mode: {sync_mode.name})", extra={"stream_slices": slices})
143
132
 
144
133
  has_slices = False
145
134
  record_counter = 0
@@ -148,7 +137,7 @@ class Stream(ABC):
148
137
  if slice_logger.should_log_slice_message(logger):
149
138
  yield slice_logger.create_slice_log_message(_slice)
150
139
  records = self.read_records(
151
- sync_mode=SyncMode.incremental,
140
+ sync_mode=sync_mode, # todo: change this interface to no longer rely on sync_mode for behavior
152
141
  stream_slice=_slice,
153
142
  stream_state=stream_state,
154
143
  cursor_field=cursor_field or None,
@@ -160,20 +149,34 @@ class Stream(ABC):
160
149
  ):
161
150
  record_data = record_data_or_message if isinstance(record_data_or_message, Mapping) else record_data_or_message.record
162
151
  stream_state = self.get_updated_state(stream_state, record_data)
163
- checkpoint_interval = self.state_checkpoint_interval
164
152
  record_counter += 1
165
- if checkpoint_interval and record_counter % checkpoint_interval == 0:
166
- yield self._checkpoint_state(stream_state, state_manager, per_stream_state_enabled)
153
+
154
+ if sync_mode == SyncMode.incremental:
155
+ # Checkpoint intervals are a bit controversial, but see below comment about why we're gating it right now
156
+ checkpoint_interval = self.state_checkpoint_interval
157
+ if checkpoint_interval and record_counter % checkpoint_interval == 0:
158
+ airbyte_state_message = self._checkpoint_state(stream_state, state_manager)
159
+ yield airbyte_state_message
167
160
 
168
161
  if internal_config.is_limit_reached(record_counter):
169
162
  break
170
163
 
171
- yield self._checkpoint_state(stream_state, state_manager, per_stream_state_enabled)
164
+ if sync_mode == SyncMode.incremental:
165
+ # Even though right now, only incremental streams running as incremental mode will emit periodic checkpoints. Rather than
166
+ # overhaul how refresh interacts with the platform, this positions the code so that once we want to start emitting
167
+ # periodic checkpoints in full refresh mode it can be done here
168
+ airbyte_state_message = self._checkpoint_state(stream_state, state_manager)
169
+ yield airbyte_state_message
170
+
171
+ if not has_slices or sync_mode == SyncMode.full_refresh:
172
+ if sync_mode == SyncMode.full_refresh:
173
+ # We use a dummy state if there is no suitable value provided by full_refresh streams that do not have a valid cursor.
174
+ # Incremental streams running full_refresh mode emit a meaningful state
175
+ stream_state = stream_state or {FULL_REFRESH_SENTINEL_STATE_KEY: True}
172
176
 
173
- if not has_slices:
174
- # Safety net to ensure we always emit at least one state message even if there are no slices
175
- checkpoint = self._checkpoint_state(stream_state, state_manager, per_stream_state_enabled)
176
- yield checkpoint
177
+ # We should always emit a final state message for full refresh sync or streams that do not have any slices
178
+ airbyte_state_message = self._checkpoint_state(stream_state, state_manager)
179
+ yield airbyte_state_message
177
180
 
178
181
  @abstractmethod
179
182
  def read_records(
@@ -361,7 +364,6 @@ class Stream(ABC):
361
364
  self,
362
365
  stream_state: Mapping[str, Any],
363
366
  state_manager,
364
- per_stream_state_enabled: bool,
365
367
  ) -> AirbyteMessage:
366
368
  # First attempt to retrieve the current state using the stream's state property. We receive an AttributeError if the state
367
369
  # property is not implemented by the stream instance and as a fallback, use the stream_state retrieved from the stream
@@ -373,4 +375,4 @@ class Stream(ABC):
373
375
 
374
376
  except AttributeError:
375
377
  state_manager.update_state_for_stream(self.name, self.namespace, stream_state)
376
- return state_manager.create_state_message(self.name, self.namespace, send_per_stream_state=per_stream_state_enabled)
378
+ return state_manager.create_state_message(self.name, self.namespace)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.67.1
3
+ Version: 0.67.3
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -48,7 +48,7 @@ Requires-Dist: pytest-mock; extra == "dev"
48
48
  Requires-Dist: requests-mock; extra == "dev"
49
49
  Requires-Dist: pytest-httpserver; extra == "dev"
50
50
  Requires-Dist: pandas==2.0.3; extra == "dev"
51
- Requires-Dist: pyarrow==12.0.1; extra == "dev"
51
+ Requires-Dist: pyarrow~=15.0.0; extra == "dev"
52
52
  Requires-Dist: langchain==0.0.271; extra == "dev"
53
53
  Requires-Dist: openai[embeddings]==0.27.9; extra == "dev"
54
54
  Requires-Dist: cohere==4.21; extra == "dev"
@@ -66,7 +66,7 @@ Requires-Dist: sphinx-rtd-theme~=1.0; extra == "sphinx-docs"
66
66
  Provides-Extra: file-based
67
67
  Requires-Dist: avro~=1.11.2; extra == "file-based"
68
68
  Requires-Dist: fastavro~=1.8.0; extra == "file-based"
69
- Requires-Dist: pyarrow==12.0.1; extra == "file-based"
69
+ Requires-Dist: pyarrow~=15.0.0; extra == "file-based"
70
70
  Requires-Dist: unstructured==0.10.27; extra == "file-based"
71
71
  Requires-Dist: unstructured[docx,pptx]==0.10.27; extra == "file-based"
72
72
  Requires-Dist: pdf2image==1.16.3; extra == "file-based"
@@ -28,7 +28,7 @@ pytest-mock
28
28
  requests-mock
29
29
  pytest-httpserver
30
30
  pandas==2.0.3
31
- pyarrow==12.0.1
31
+ pyarrow~=15.0.0
32
32
  langchain==0.0.271
33
33
  openai[embeddings]==0.27.9
34
34
  cohere==4.21
@@ -44,7 +44,7 @@ markdown
44
44
  [file-based]
45
45
  avro~=1.11.2
46
46
  fastavro~=1.8.0
47
- pyarrow==12.0.1
47
+ pyarrow~=15.0.0
48
48
  unstructured==0.10.27
49
49
  unstructured[docx,pptx]==0.10.27
50
50
  pdf2image==1.16.3
@@ -15,7 +15,7 @@ README = (HERE / "README.md").read_text()
15
15
 
16
16
  avro_dependency = "avro~=1.11.2"
17
17
  fastavro_dependency = "fastavro~=1.8.0"
18
- pyarrow_dependency = "pyarrow==12.0.1"
18
+ pyarrow_dependency = "pyarrow~=15.0.0"
19
19
 
20
20
  langchain_dependency = "langchain==0.0.271"
21
21
  openai_dependency = "openai[embeddings]==0.27.9"
@@ -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.67.1",
39
+ version="0.67.3",
40
40
  description="A framework for writing Airbyte Connectors.",
41
41
  long_description=README,
42
42
  long_description_content_type="text/markdown",
@@ -81,13 +81,14 @@ def test_concurrent_source_adapter():
81
81
  def _mock_stream(name: str, data=[], available: bool = True):
82
82
  s = Mock()
83
83
  s.name = name
84
+ s.namespace = None
84
85
  s.as_airbyte_stream.return_value = AirbyteStream(
85
86
  name=name,
86
87
  json_schema={},
87
88
  supported_sync_modes=[SyncMode.full_refresh],
88
89
  )
89
90
  s.check_availability.return_value = (True, None) if available else (False, "not available")
90
- s.read_full_refresh.return_value = iter(data)
91
+ s.read.return_value = iter(data)
91
92
  s.primary_key = None
92
93
  return s
93
94