airbyte-cdk 0.62.2__tar.gz → 0.63.1__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (469) hide show
  1. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/PKG-INFO +1 -1
  2. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/abstract_source.py +34 -13
  3. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +3 -0
  4. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/traced_exception.py +16 -1
  5. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/PKG-INFO +1 -1
  6. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/setup.py +1 -1
  7. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_abstract_source.py +173 -29
  8. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_integration_source.py +25 -8
  9. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_source_read.py +1 -1
  10. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/LICENSE.txt +0 -0
  11. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/README.md +0 -0
  12. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/__init__.py +0 -0
  13. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/config_observation.py +0 -0
  14. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector.py +0 -0
  15. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/__init__.py +0 -0
  16. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  17. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/main.py +0 -0
  18. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  19. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/connector_builder/models.py +0 -0
  20. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/__init__.py +0 -0
  21. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/destination.py +0 -0
  22. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  23. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  24. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  25. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  26. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  27. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  28. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  29. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  30. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/entrypoint.py +0 -0
  31. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/exception_handler.py +0 -0
  32. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/logger.py +0 -0
  33. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/models/__init__.py +0 -0
  34. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  35. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/models/well_known_types.py +0 -0
  36. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/py.typed +0 -0
  37. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/__init__.py +0 -0
  38. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  39. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  40. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  41. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  42. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  43. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  44. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/config.py +0 -0
  45. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  46. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  47. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  48. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  49. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  50. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  51. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  52. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  53. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  54. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  55. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  56. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/create_partial.py +0 -0
  57. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  58. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  59. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  60. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  61. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  62. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  63. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  64. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  65. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  66. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  67. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  68. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  69. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  70. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  71. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  72. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  73. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  74. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/cursor.py +0 -0
  75. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  76. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  77. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  78. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  79. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  80. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  81. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  82. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  83. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  84. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  85. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  86. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  87. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  88. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  89. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  90. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/class_types_registry.py +0 -0
  91. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  92. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/default_implementation_registry.py +0 -0
  93. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  94. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  95. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
  96. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  97. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  98. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  99. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  100. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  101. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  102. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  103. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  104. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  105. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  106. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  107. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  108. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  109. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  110. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  111. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  112. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  113. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_action.py +0 -0
  114. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/error_handlers/response_status.py +0 -0
  115. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  116. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  117. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  118. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  119. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  120. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  121. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  122. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  123. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  124. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  125. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  126. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  127. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  128. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  129. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  130. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  131. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  132. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  133. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  134. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  135. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  136. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  137. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  138. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  139. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  140. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  141. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  142. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  143. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  144. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  145. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/stream_slicers/cartesian_product_stream_slicer.py +0 -0
  146. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  147. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  148. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  149. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  150. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  151. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/types.py +0 -0
  152. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  153. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/deprecated/__init__.py +0 -0
  154. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/deprecated/base_source.py +0 -0
  155. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/deprecated/client.py +0 -0
  156. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  157. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  158. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  159. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/runner.py +0 -0
  160. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/embedded/tools.py +0 -0
  161. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  162. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  163. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  164. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  165. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  166. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  167. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  168. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  169. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  170. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  171. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  172. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  173. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  174. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  175. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  176. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  177. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  178. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  179. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  180. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  181. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  182. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  183. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  184. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  185. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  186. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  187. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  188. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  189. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  190. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  191. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  192. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  193. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  194. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  195. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  196. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  197. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_noop_cursor.py +0 -0
  198. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  199. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  200. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  201. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  202. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/file_based/types.py +0 -0
  203. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/http_config.py +0 -0
  204. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/http_logger.py +0 -0
  205. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/message/__init__.py +0 -0
  206. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/message/repository.py +0 -0
  207. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/singer/__init__.py +0 -0
  208. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/singer/singer_helpers.py +0 -0
  209. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/singer/source.py +0 -0
  210. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/source.py +0 -0
  211. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/__init__.py +0 -0
  212. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  213. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  214. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  215. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  216. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  217. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  218. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  219. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  220. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  221. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  222. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  223. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  224. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  225. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  226. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  227. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  228. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/record.py +0 -0
  229. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  230. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  231. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  232. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  233. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/core.py +0 -0
  234. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  235. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/__init__.py +0 -0
  236. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/core.py +0 -0
  237. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/oauth.py +0 -0
  238. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/auth/token.py +0 -0
  239. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  240. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  241. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/http.py +0 -0
  242. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  243. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  244. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  245. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  246. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  247. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  248. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  249. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/streams/utils/stream_helper.py +0 -0
  250. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/__init__.py +0 -0
  251. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/casing.py +0 -0
  252. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/catalog_helpers.py +0 -0
  253. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  254. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  255. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/schema_models.py +0 -0
  256. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  257. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/transform.py +0 -0
  258. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/sources/utils/types.py +0 -0
  259. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/__init__.py +0 -0
  260. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/catalog_builder.py +0 -0
  261. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  262. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  263. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  264. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  265. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/request.py +0 -0
  266. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/response.py +0 -0
  267. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  268. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/test/state_builder.py +0 -0
  269. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/__init__.py +0 -0
  270. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  271. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/analytics_message.py +0 -0
  272. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/constants.py +0 -0
  273. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  274. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/event_timing.py +0 -0
  275. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  276. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  277. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  278. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  279. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  280. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  281. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/SOURCES.txt +0 -0
  282. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/dependency_links.txt +0 -0
  283. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/requires.txt +0 -0
  284. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/airbyte_cdk.egg-info/top_level.txt +0 -0
  285. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/pyproject.toml +0 -0
  286. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/setup.cfg +0 -0
  287. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/source_declarative_manifest/__init__.py +0 -0
  288. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/source_declarative_manifest/main.py +0 -0
  289. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/__init__.py +0 -0
  290. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/test_connector_builder_handler.py +0 -0
  291. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/test_message_grouper.py +0 -0
  292. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/connector_builder/utils.py +0 -0
  293. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/destinations/__init__.py +0 -0
  294. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/destinations/test_destination.py +0 -0
  295. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/singer/__init__.py +0 -0
  296. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/singer/test_singer_helpers.py +0 -0
  297. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/singer/test_singer_source.py +0 -0
  298. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/__init__.py +0 -0
  299. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/concurrent_source/__init__.py +0 -0
  300. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/concurrent_source/test_concurrent_source_adapter.py +0 -0
  301. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/__init__.py +0 -0
  302. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/__init__.py +0 -0
  303. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_oauth.py +0 -0
  304. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_selective_authenticator.py +0 -0
  305. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_session_token_auth.py +0 -0
  306. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_token_auth.py +0 -0
  307. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/auth/test_token_provider.py +0 -0
  308. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/checks/__init__.py +0 -0
  309. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/checks/test_check_stream.py +0 -0
  310. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/decoders/__init__.py +0 -0
  311. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/decoders/test_json_decoder.py +0 -0
  312. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/external_component.py +0 -0
  313. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/__init__.py +0 -0
  314. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +0 -0
  315. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/test_record_filter.py +0 -0
  316. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/extractors/test_record_selector.py +0 -0
  317. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/__init__.py +0 -0
  318. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/test_datetime_based_cursor.py +0 -0
  319. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor.py +0 -0
  320. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/incremental/test_per_partition_cursor_integration.py +0 -0
  321. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/__init__.py +0 -0
  322. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_filters.py +0 -0
  323. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_boolean.py +0 -0
  324. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_mapping.py +0 -0
  325. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_nested_mapping.py +0 -0
  326. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_interpolated_string.py +0 -0
  327. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_jinja.py +0 -0
  328. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/interpolation/test_macros.py +0 -0
  329. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/__init__.py +0 -0
  330. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/test_manifest_component_transformer.py +0 -0
  331. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/test_manifest_reference_resolver.py +0 -0
  332. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +0 -0
  333. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/parsers/testing_components.py +0 -0
  334. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/__init__.py +0 -0
  335. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/test_list_partition_router.py +0 -0
  336. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/test_single_partition_router.py +0 -0
  337. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/partition_routers/test_substream_partition_router.py +0 -0
  338. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/__init__.py +0 -0
  339. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  340. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  341. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_constant_backoff.py +0 -0
  342. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_exponential_backoff.py +0 -0
  343. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_header_helper.py +0 -0
  344. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_time_from_header.py +0 -0
  345. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/backoff_strategies/test_wait_until_time_from_header.py +0 -0
  346. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_composite_error_handler.py +0 -0
  347. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_default_error_handler.py +0 -0
  348. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_http_response_filter.py +0 -0
  349. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/error_handlers/test_response_status.py +0 -0
  350. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/__init__.py +0 -0
  351. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_cursor_pagination_strategy.py +0 -0
  352. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +0 -0
  353. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_no_paginator.py +0 -0
  354. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_offset_increment.py +0 -0
  355. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_page_increment.py +0 -0
  356. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_request_option.py +0 -0
  357. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/paginators/test_stop_condition.py +0 -0
  358. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/request_options/__init__.py +0 -0
  359. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/request_options/test_interpolated_request_options_provider.py +0 -0
  360. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/test_http_requester.py +0 -0
  361. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/requesters/test_interpolated_request_input_provider.py +0 -0
  362. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/retrievers/__init__.py +0 -0
  363. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +0 -0
  364. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/__init__.py +0 -0
  365. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/source_test/SourceTest.py +0 -0
  366. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/source_test/__init__.py +0 -0
  367. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/test_default_schema_loader.py +0 -0
  368. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/test_inline_schema_loader.py +0 -0
  369. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/schema/test_json_file_schema_loader.py +0 -0
  370. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/states/__init__.py +0 -0
  371. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/stream_slicers/__init__.py +0 -0
  372. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/stream_slicers/test_cartesian_product_stream_slicer.py +0 -0
  373. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_create_partial.py +0 -0
  374. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_declarative_stream.py +0 -0
  375. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_manifest_declarative_source.py +0 -0
  376. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/declarative/test_yaml_declarative_source.py +0 -0
  377. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/__init__.py +0 -0
  378. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/availability_strategy/__init__.py +0 -0
  379. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/availability_strategy/test_default_file_based_availability_strategy.py +0 -0
  380. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/__init__.py +0 -0
  381. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/test_abstract_file_based_spec.py +0 -0
  382. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/test_csv_format.py +0 -0
  383. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/config/test_file_based_stream_config.py +0 -0
  384. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/discovery_policy/__init__.py +0 -0
  385. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/discovery_policy/test_default_discovery_policy.py +0 -0
  386. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/__init__.py +0 -0
  387. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_avro_parser.py +0 -0
  388. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_csv_parser.py +0 -0
  389. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_jsonl_parser.py +0 -0
  390. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_parquet_parser.py +0 -0
  391. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/file_types/test_unstructured_parser.py +0 -0
  392. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/helpers.py +0 -0
  393. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/in_memory_files_source.py +0 -0
  394. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/__init__.py +0 -0
  395. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/avro_scenarios.py +0 -0
  396. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/check_scenarios.py +0 -0
  397. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/concurrent_incremental_scenarios.py +0 -0
  398. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/csv_scenarios.py +0 -0
  399. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/file_based_source_builder.py +0 -0
  400. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/incremental_scenarios.py +0 -0
  401. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/jsonl_scenarios.py +0 -0
  402. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/parquet_scenarios.py +0 -0
  403. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/scenario_builder.py +0 -0
  404. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/unstructured_scenarios.py +0 -0
  405. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/user_input_schema_scenarios.py +0 -0
  406. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/scenarios/validation_policy_scenarios.py +0 -0
  407. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/__init__.py +0 -0
  408. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/concurrent/__init__.py +0 -0
  409. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/concurrent/test_adapters.py +0 -0
  410. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/concurrent/test_file_based_concurrent_cursor.py +0 -0
  411. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/test_default_file_based_cursor.py +0 -0
  412. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/stream/test_default_file_based_stream.py +0 -0
  413. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_file_based_scenarios.py +0 -0
  414. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_file_based_stream_reader.py +0 -0
  415. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_scenarios.py +0 -0
  416. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/file_based/test_schema_helpers.py +0 -0
  417. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/fixtures/__init__.py +0 -0
  418. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/fixtures/source_test_fixture.py +0 -0
  419. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/message/__init__.py +0 -0
  420. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/message/test_repository.py +0 -0
  421. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/__init__.py +0 -0
  422. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/__init__.py +0 -0
  423. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/__init__.py +0 -0
  424. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/incremental_scenarios.py +0 -0
  425. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_builder.py +0 -0
  426. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/stream_facade_scenarios.py +0 -0
  427. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/test_concurrent_scenarios.py +0 -0
  428. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_scenarios.py +0 -0
  429. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/thread_based_concurrent_stream_source_builder.py +0 -0
  430. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/scenarios/utils.py +0 -0
  431. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_adapters.py +0 -0
  432. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_concurrent_read_processor.py +0 -0
  433. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_cursor.py +0 -0
  434. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_datetime_state_converter.py +0 -0
  435. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_default_stream.py +0 -0
  436. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_partition_enqueuer.py +0 -0
  437. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_partition_reader.py +0 -0
  438. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/concurrent/test_thread_pool_manager.py +0 -0
  439. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/__init__.py +0 -0
  440. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/auth/__init__.py +0 -0
  441. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/auth/test_auth.py +0 -0
  442. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/requests_native_auth/__init__.py +0 -0
  443. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/requests_native_auth/test_requests_native_auth.py +0 -0
  444. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/test_availability_strategy.py +0 -0
  445. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/http/test_http.py +0 -0
  446. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_availability_strategy.py +0 -0
  447. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_call_rate.py +0 -0
  448. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_stream_read.py +0 -0
  449. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/streams/test_streams_core.py +0 -0
  450. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_concurrent_source.py +0 -0
  451. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_config.py +0 -0
  452. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_connector_state_manager.py +0 -0
  453. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_http_logger.py +0 -0
  454. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/sources/test_source.py +0 -0
  455. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/__init__.py +0 -0
  456. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/__init__.py +0 -0
  457. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_matcher.py +0 -0
  458. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_mocker.py +0 -0
  459. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_request.py +0 -0
  460. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/mock_http/test_response_builder.py +0 -0
  461. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/test/test_entrypoint_wrapper.py +0 -0
  462. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/__init__.py +0 -0
  463. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_datetime_format_inferrer.py +0 -0
  464. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_mapping_helpers.py +0 -0
  465. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_rate_limiting.py +0 -0
  466. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_schema_inferrer.py +0 -0
  467. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_secret_utils.py +0 -0
  468. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.1}/unit_tests/utils/test_stream_status_utils.py +0 -0
  469. {airbyte-cdk-0.62.2 → airbyte-cdk-0.63.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.62.2
3
+ Version: 0.63.1
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -14,7 +14,9 @@ from airbyte_cdk.models import (
14
14
  AirbyteStreamStatus,
15
15
  ConfiguredAirbyteCatalog,
16
16
  ConfiguredAirbyteStream,
17
+ FailureType,
17
18
  Status,
19
+ StreamDescriptor,
18
20
  SyncMode,
19
21
  )
20
22
  from airbyte_cdk.models import Type as MessageType
@@ -27,6 +29,7 @@ from airbyte_cdk.sources.streams.http.http import HttpStream
27
29
  from airbyte_cdk.sources.utils.record_helper import stream_data_to_airbyte_message
28
30
  from airbyte_cdk.sources.utils.schema_helpers import InternalConfig, split_config
29
31
  from airbyte_cdk.sources.utils.slice_logger import DebugSliceLogger, SliceLogger
32
+ from airbyte_cdk.utils.airbyte_secrets_utils import filter_secrets
30
33
  from airbyte_cdk.utils.event_timing import create_timer
31
34
  from airbyte_cdk.utils.stream_status_utils import as_airbyte_message as stream_status_as_airbyte_message
32
35
  from airbyte_cdk.utils.traced_exception import AirbyteTracedException
@@ -133,11 +136,16 @@ class AbstractSource(Source, ABC):
133
136
  logger.info(f"Marking stream {configured_stream.stream.name} as STOPPED")
134
137
  yield stream_status_as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.COMPLETE)
135
138
  except AirbyteTracedException as e:
139
+ logger.exception(f"Encountered an exception while reading stream {configured_stream.stream.name}")
140
+ logger.info(f"Marking stream {configured_stream.stream.name} as STOPPED")
136
141
  yield stream_status_as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.INCOMPLETE)
137
- if self.continue_sync_on_stream_failure:
138
- stream_name_to_exception[stream_instance.name] = e
139
- else:
140
- raise e
142
+ yield e.as_sanitized_airbyte_message(stream_descriptor=StreamDescriptor(name=configured_stream.stream.name))
143
+ stream_name_to_exception[stream_instance.name] = e
144
+ if self.stop_sync_on_stream_failure:
145
+ logger.info(
146
+ f"Stopping sync on error from stream {configured_stream.stream.name} because {self.name} does not support continuing syncs on error."
147
+ )
148
+ break
141
149
  except Exception as e:
142
150
  yield from self._emit_queued_messages()
143
151
  logger.exception(f"Encountered an exception while reading stream {configured_stream.stream.name}")
@@ -145,15 +153,28 @@ class AbstractSource(Source, ABC):
145
153
  yield stream_status_as_airbyte_message(configured_stream.stream, AirbyteStreamStatus.INCOMPLETE)
146
154
  display_message = stream_instance.get_error_display_message(e)
147
155
  if display_message:
148
- raise AirbyteTracedException.from_exception(e, message=display_message) from e
149
- raise e
156
+ traced_exception = AirbyteTracedException.from_exception(e, message=display_message)
157
+ else:
158
+ traced_exception = AirbyteTracedException.from_exception(e)
159
+ yield traced_exception.as_sanitized_airbyte_message(
160
+ stream_descriptor=StreamDescriptor(name=configured_stream.stream.name)
161
+ )
162
+ stream_name_to_exception[stream_instance.name] = traced_exception
163
+ if self.stop_sync_on_stream_failure:
164
+ logger.info(f"{self.name} does not support continuing syncs on error from stream {configured_stream.stream.name}")
165
+ break
150
166
  finally:
151
167
  timer.finish_event()
152
168
  logger.info(f"Finished syncing {configured_stream.stream.name}")
153
169
  logger.info(timer.report())
154
170
 
155
- if self.continue_sync_on_stream_failure and len(stream_name_to_exception) > 0:
156
- raise AirbyteTracedException(message=self._generate_failed_streams_error_message(stream_name_to_exception))
171
+ if len(stream_name_to_exception) > 0:
172
+ error_message = self._generate_failed_streams_error_message(stream_name_to_exception)
173
+ logger.info(error_message)
174
+ # We still raise at least one exception when a stream raises an exception because the platform currently relies
175
+ # on a non-zero exit code to determine if a sync attempt has failed. We also raise the exception as a config_error
176
+ # type because this combined error isn't actionable, but rather the previously emitted individual errors.
177
+ raise AirbyteTracedException(message=error_message, failure_type=FailureType.config_error)
157
178
  logger.info(f"Finished syncing {self.name}")
158
179
 
159
180
  @property
@@ -282,17 +303,17 @@ class AbstractSource(Source, ABC):
282
303
  return _default_message_repository
283
304
 
284
305
  @property
285
- def continue_sync_on_stream_failure(self) -> bool:
306
+ def stop_sync_on_stream_failure(self) -> bool:
286
307
  """
287
308
  WARNING: This function is in-development which means it is subject to change. Use at your own risk.
288
309
 
289
- By default, a source should raise an exception and stop the sync when it encounters an error while syncing a stream. This
290
- method can be overridden on a per-source basis so that a source will continue syncing streams other streams even if an
291
- exception is raised for a stream.
310
+ By default, when a source encounters an exception while syncing a stream, it will emit an error trace message and then
311
+ continue syncing the next stream. This can be overwritten on a per-source basis so that the source will stop the sync
312
+ on the first error seen and emit a single error trace message for that stream.
292
313
  """
293
314
  return False
294
315
 
295
316
  @staticmethod
296
317
  def _generate_failed_streams_error_message(stream_failures: Mapping[str, AirbyteTracedException]) -> str:
297
- failures = ", ".join([f"{stream}: {exception.__repr__()}" for stream, exception in stream_failures.items()])
318
+ failures = ", ".join([f"{stream}: {filter_secrets(exception.__repr__())}" for stream, exception in stream_failures.items()])
298
319
  return f"During the sync, the following streams did not sync successfully: {failures}"
@@ -243,6 +243,9 @@ class FileBasedStreamPartition(Partition):
243
243
  data_to_return = dict(record_data)
244
244
  self._stream.transformer.transform(data_to_return, self._stream.get_json_schema())
245
245
  yield Record(data_to_return, self.stream_name())
246
+ elif isinstance(record_data, AirbyteMessage) and record_data.type == Type.RECORD:
247
+ # `AirbyteMessage`s of type `Record` should also be yielded so they are enqueued
248
+ yield Record(record_data.record.data, self.stream_name())
246
249
  else:
247
250
  self._message_repository.emit_message(record_data)
248
251
  except Exception as e:
@@ -13,6 +13,7 @@ from airbyte_cdk.models import (
13
13
  AirbyteTraceMessage,
14
14
  FailureType,
15
15
  Status,
16
+ StreamDescriptor,
16
17
  TraceType,
17
18
  )
18
19
  from airbyte_cdk.models import Type as MessageType
@@ -43,7 +44,7 @@ class AirbyteTracedException(Exception):
43
44
  self._exception = exception
44
45
  super().__init__(internal_message)
45
46
 
46
- def as_airbyte_message(self) -> AirbyteMessage:
47
+ def as_airbyte_message(self, stream_descriptor: StreamDescriptor = None) -> AirbyteMessage:
47
48
  """
48
49
  Builds an AirbyteTraceMessage from the exception
49
50
  """
@@ -60,6 +61,7 @@ class AirbyteTracedException(Exception):
60
61
  internal_message=self.internal_message,
61
62
  failure_type=self.failure_type,
62
63
  stack_trace=stack_trace_str,
64
+ stream_descriptor=stream_descriptor,
63
65
  ),
64
66
  )
65
67
 
@@ -88,3 +90,16 @@ class AirbyteTracedException(Exception):
88
90
  :param exc: the exception that caused the error
89
91
  """
90
92
  return cls(internal_message=str(exc), exception=exc, *args, **kwargs) # type: ignore # ignoring because of args and kwargs
93
+
94
+ def as_sanitized_airbyte_message(self, stream_descriptor: StreamDescriptor = None) -> AirbyteMessage:
95
+ """
96
+ Builds an AirbyteTraceMessage from the exception and sanitizes any secrets from the message body
97
+ """
98
+ error_message = self.as_airbyte_message(stream_descriptor=stream_descriptor)
99
+ if error_message.trace.error.message:
100
+ error_message.trace.error.message = filter_secrets(error_message.trace.error.message)
101
+ if error_message.trace.error.internal_message:
102
+ error_message.trace.error.internal_message = filter_secrets(error_message.trace.error.internal_message)
103
+ if error_message.trace.error.stack_trace:
104
+ error_message.trace.error.stack_trace = filter_secrets(error_message.trace.error.stack_trace)
105
+ return error_message
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 0.62.2
3
+ Version: 0.63.1
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://github.com/airbytehq/airbyte
6
6
  Author: Airbyte
@@ -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.62.2",
39
+ version="0.63.1",
40
40
  description="A framework for writing Airbyte Connectors.",
41
41
  long_description=README,
42
42
  long_description_content_type="text/markdown",
@@ -13,6 +13,7 @@ import pytest
13
13
  from airbyte_cdk.models import (
14
14
  AirbyteCatalog,
15
15
  AirbyteConnectionStatus,
16
+ AirbyteErrorTraceMessage,
16
17
  AirbyteLogMessage,
17
18
  AirbyteMessage,
18
19
  AirbyteRecordMessage,
@@ -27,6 +28,7 @@ from airbyte_cdk.models import (
27
28
  ConfiguredAirbyteCatalog,
28
29
  ConfiguredAirbyteStream,
29
30
  DestinationSyncMode,
31
+ FailureType,
30
32
  Level,
31
33
  Status,
32
34
  StreamDescriptor,
@@ -40,6 +42,7 @@ from airbyte_cdk.sources.connector_state_manager import ConnectorStateManager
40
42
  from airbyte_cdk.sources.message import MessageRepository
41
43
  from airbyte_cdk.sources.streams import IncrementalMixin, Stream
42
44
  from airbyte_cdk.sources.utils.record_helper import stream_data_to_airbyte_message
45
+ from airbyte_cdk.utils.airbyte_secrets_utils import update_secrets
43
46
  from airbyte_cdk.utils.traced_exception import AirbyteTracedException
44
47
  from pytest import fixture
45
48
 
@@ -54,12 +57,14 @@ class MockSource(AbstractSource):
54
57
  per_stream: bool = True,
55
58
  message_repository: MessageRepository = None,
56
59
  exception_on_missing_stream: bool = True,
60
+ stop_sync_on_stream_failure: bool = False,
57
61
  ):
58
62
  self._streams = streams
59
63
  self.check_lambda = check_lambda
60
64
  self.per_stream = per_stream
61
65
  self.exception_on_missing_stream = exception_on_missing_stream
62
66
  self._message_repository = message_repository
67
+ self._stop_sync_on_stream_failure = stop_sync_on_stream_failure
63
68
 
64
69
  def check_connection(self, logger: logging.Logger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]:
65
70
  if self.check_lambda:
@@ -84,6 +89,12 @@ class MockSource(AbstractSource):
84
89
  return self._message_repository
85
90
 
86
91
 
92
+ class MockSourceWithStopSyncFalseOverride(MockSource):
93
+ @property
94
+ def stop_sync_on_stream_failure(self) -> bool:
95
+ return False
96
+
97
+
87
98
  class StreamNoStateMethod(Stream):
88
99
  name = "managers"
89
100
  primary_key = None
@@ -115,8 +126,11 @@ class StreamRaisesException(Stream):
115
126
  name = "lamentations"
116
127
  primary_key = None
117
128
 
129
+ def __init__(self, exception_to_raise):
130
+ self._exception_to_raise = exception_to_raise
131
+
118
132
  def read_records(self, *args, **kwargs) -> Iterable[Mapping[str, Any]]:
119
- raise AirbyteTracedException(message="I was born only to crash like Icarus")
133
+ raise self._exception_to_raise
120
134
 
121
135
 
122
136
  MESSAGE_FROM_REPOSITORY = Mock()
@@ -291,7 +305,7 @@ def test_read_stream_emits_repository_message_on_error(mocker, message_repositor
291
305
 
292
306
  source = MockSource(streams=[stream], message_repository=message_repository)
293
307
 
294
- with pytest.raises(RuntimeError):
308
+ with pytest.raises(AirbyteTracedException):
295
309
  messages = list(source.read(logger, {}, ConfiguredAirbyteCatalog(streams=[_configured_stream(stream, SyncMode.full_refresh)])))
296
310
  assert MESSAGE_FROM_REPOSITORY in messages
297
311
 
@@ -306,14 +320,14 @@ def test_read_stream_with_error_gets_display_message(mocker):
306
320
  catalog = ConfiguredAirbyteCatalog(streams=[_configured_stream(stream, SyncMode.full_refresh)])
307
321
 
308
322
  # without get_error_display_message
309
- with pytest.raises(RuntimeError, match="oh no!"):
323
+ with pytest.raises(AirbyteTracedException):
310
324
  list(source.read(logger, {}, catalog))
311
325
 
312
326
  mocker.patch.object(MockStream, "get_error_display_message", return_value="my message")
313
327
 
314
- with pytest.raises(AirbyteTracedException, match="oh no!") as exc:
328
+ with pytest.raises(AirbyteTracedException) as exc:
315
329
  list(source.read(logger, {}, catalog))
316
- assert exc.value.message == "my message"
330
+ assert "oh no!" in exc.value.message
317
331
 
318
332
 
319
333
  GLOBAL_EMITTED_AT = 1
@@ -358,6 +372,22 @@ def _as_state(state_data: Dict[str, Any], stream_name: str = "", per_stream_stat
358
372
  return AirbyteMessage(type=Type.STATE, state=AirbyteStateMessage(data=state_data))
359
373
 
360
374
 
375
+ def _as_error_trace(stream: str, error_message: str, internal_message: Optional[str], failure_type: Optional[FailureType], stack_trace: Optional[str]) -> AirbyteMessage:
376
+ trace_message = AirbyteTraceMessage(
377
+ emitted_at=datetime.datetime.now().timestamp() * 1000.0,
378
+ type=TraceType.ERROR,
379
+ error=AirbyteErrorTraceMessage(
380
+ stream_descriptor=StreamDescriptor(name=stream),
381
+ message=error_message,
382
+ internal_message=internal_message,
383
+ failure_type=failure_type,
384
+ stack_trace=stack_trace,
385
+ ),
386
+ )
387
+
388
+ return AirbyteMessage(type=MessageType.TRACE, trace=trace_message)
389
+
390
+
361
391
  def _configured_stream(stream: Stream, sync_mode: SyncMode):
362
392
  return ConfiguredAirbyteStream(
363
393
  stream=stream.as_airbyte_stream(),
@@ -1174,21 +1204,27 @@ def test_checkpoint_state_from_stream_instance():
1174
1204
  )
1175
1205
 
1176
1206
 
1177
- def test_continue_sync_with_failed_streams(mocker):
1207
+ @pytest.mark.parametrize(
1208
+ "exception_to_raise,expected_error_message,expected_internal_message",
1209
+ [
1210
+ pytest.param(AirbyteTracedException(message="I was born only to crash like Icarus"), "I was born only to crash like Icarus", None, id="test_raises_traced_exception"),
1211
+ pytest.param(Exception("Generic connector error message"), "Something went wrong in the connector. See the logs for more details.", "Generic connector error message", id="test_raises_generic_exception"),
1212
+ ]
1213
+ )
1214
+ def test_continue_sync_with_failed_streams(mocker, exception_to_raise, expected_error_message, expected_internal_message):
1178
1215
  """
1179
- Tests that running a sync for a connector with multiple streams and continue_sync_on_stream_failure enabled continues
1180
- syncing even when one stream fails with an error.
1216
+ Tests that running a sync for a connector with multiple streams will continue syncing when one stream fails
1217
+ with an error. This source does not override the default behavior defined in the AbstractSource class.
1181
1218
  """
1182
1219
  stream_output = [{"k1": "v1"}, {"k2": "v2"}]
1183
1220
  s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
1184
- s2 = StreamRaisesException()
1221
+ s2 = StreamRaisesException(exception_to_raise=exception_to_raise)
1185
1222
  s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
1186
1223
 
1187
1224
  mocker.patch.object(MockStream, "get_json_schema", return_value={})
1188
1225
  mocker.patch.object(StreamRaisesException, "get_json_schema", return_value={})
1189
1226
 
1190
1227
  src = MockSource(streams=[s1, s2, s3])
1191
- mocker.patch.object(MockSource, "continue_sync_on_stream_failure", return_value=True)
1192
1228
  catalog = ConfiguredAirbyteCatalog(
1193
1229
  streams=[
1194
1230
  _configured_stream(s1, SyncMode.full_refresh),
@@ -1205,6 +1241,7 @@ def test_continue_sync_with_failed_streams(mocker):
1205
1241
  _as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
1206
1242
  _as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
1207
1243
  _as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
1244
+ _as_error_trace("lamentations", expected_error_message, expected_internal_message, FailureType.system_error, None),
1208
1245
  _as_stream_status("s3", AirbyteStreamStatus.STARTED),
1209
1246
  _as_stream_status("s3", AirbyteStreamStatus.RUNNING),
1210
1247
  *_as_records("s3", stream_output),
@@ -1212,26 +1249,75 @@ def test_continue_sync_with_failed_streams(mocker):
1212
1249
  ]
1213
1250
  )
1214
1251
 
1215
- messages = []
1216
1252
  with pytest.raises(AirbyteTracedException) as exc:
1217
- # We can't use list comprehension or list() here because we are still raising a final exception for the
1218
- # failed streams and that disrupts parsing the generator into the messages emitted before
1219
- for message in src.read(logger, {}, catalog):
1220
- messages.append(message)
1253
+ messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
1254
+ messages = _fix_emitted_at(messages)
1255
+
1256
+ assert expected == messages
1221
1257
 
1222
- messages = _fix_emitted_at(messages)
1223
- assert expected == messages
1224
1258
  assert "lamentations" in exc.value.message
1259
+ assert exc.value.failure_type == FailureType.config_error
1225
1260
 
1226
1261
 
1227
- def test_stop_sync_with_failed_streams(mocker):
1262
+ def test_continue_sync_source_override_false(mocker):
1228
1263
  """
1229
- Tests that running a sync for a connector with multiple streams and continue_sync_on_stream_failure disabled stops
1230
- syncing once a stream fails with an error.
1264
+ Tests that running a sync for a connector explicitly overriding the default AbstractSource.stop_sync_on_stream_failure
1265
+ property to be False which will continue syncing stream even if one encountered an exception.
1231
1266
  """
1267
+ update_secrets(["API_KEY_VALUE"])
1268
+
1232
1269
  stream_output = [{"k1": "v1"}, {"k2": "v2"}]
1233
1270
  s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
1234
- s2 = StreamRaisesException()
1271
+ s2 = StreamRaisesException(exception_to_raise=AirbyteTracedException(message="I was born only to crash like Icarus"))
1272
+ s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
1273
+
1274
+ mocker.patch.object(MockStream, "get_json_schema", return_value={})
1275
+ mocker.patch.object(StreamRaisesException, "get_json_schema", return_value={})
1276
+
1277
+ src = MockSourceWithStopSyncFalseOverride(streams=[s1, s2, s3])
1278
+ catalog = ConfiguredAirbyteCatalog(
1279
+ streams=[
1280
+ _configured_stream(s1, SyncMode.full_refresh),
1281
+ _configured_stream(s2, SyncMode.full_refresh),
1282
+ _configured_stream(s3, SyncMode.full_refresh),
1283
+ ]
1284
+ )
1285
+
1286
+ expected = _fix_emitted_at(
1287
+ [
1288
+ _as_stream_status("s1", AirbyteStreamStatus.STARTED),
1289
+ _as_stream_status("s1", AirbyteStreamStatus.RUNNING),
1290
+ *_as_records("s1", stream_output),
1291
+ _as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
1292
+ _as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
1293
+ _as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
1294
+ _as_error_trace("lamentations", "I was born only to crash like Icarus", None, FailureType.system_error, None),
1295
+ _as_stream_status("s3", AirbyteStreamStatus.STARTED),
1296
+ _as_stream_status("s3", AirbyteStreamStatus.RUNNING),
1297
+ *_as_records("s3", stream_output),
1298
+ _as_stream_status("s3", AirbyteStreamStatus.COMPLETE),
1299
+ ]
1300
+ )
1301
+
1302
+ with pytest.raises(AirbyteTracedException) as exc:
1303
+ messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
1304
+ messages = _fix_emitted_at(messages)
1305
+
1306
+ assert expected == messages
1307
+
1308
+ assert "lamentations" in exc.value.message
1309
+ assert exc.value.failure_type == FailureType.config_error
1310
+
1311
+
1312
+ def test_sync_error_trace_messages_obfuscate_secrets(mocker):
1313
+ """
1314
+ Tests that exceptions emitted as trace messages by a source have secrets properly sanitized
1315
+ """
1316
+ update_secrets(["API_KEY_VALUE"])
1317
+
1318
+ stream_output = [{"k1": "v1"}, {"k2": "v2"}]
1319
+ s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
1320
+ s2 = StreamRaisesException(exception_to_raise=AirbyteTracedException(message="My api_key value API_KEY_VALUE flew too close to the sun."))
1235
1321
  s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
1236
1322
 
1237
1323
  mocker.patch.object(MockStream, "get_json_schema", return_value={})
@@ -1254,15 +1340,73 @@ def test_stop_sync_with_failed_streams(mocker):
1254
1340
  _as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
1255
1341
  _as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
1256
1342
  _as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
1343
+ _as_error_trace("lamentations", "My api_key value **** flew too close to the sun.", None, FailureType.system_error, None),
1344
+ _as_stream_status("s3", AirbyteStreamStatus.STARTED),
1345
+ _as_stream_status("s3", AirbyteStreamStatus.RUNNING),
1346
+ *_as_records("s3", stream_output),
1347
+ _as_stream_status("s3", AirbyteStreamStatus.COMPLETE),
1257
1348
  ]
1258
1349
  )
1259
1350
 
1260
- messages = []
1261
- with pytest.raises(AirbyteTracedException):
1262
- # We can't use list comprehension or list() here because we are still raising a final exception for the
1263
- # failed streams and that disrupts parsing the generator into the messages emitted before
1264
- for message in src.read(logger, {}, catalog):
1265
- messages.append(message)
1351
+ with pytest.raises(AirbyteTracedException) as exc:
1352
+ messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
1353
+ messages = _fix_emitted_at(messages)
1266
1354
 
1267
- messages = _fix_emitted_at(messages)
1268
- assert expected == messages
1355
+ assert expected == messages
1356
+
1357
+ assert "lamentations" in exc.value.message
1358
+ assert exc.value.failure_type == FailureType.config_error
1359
+
1360
+
1361
+ def test_continue_sync_with_failed_streams_with_override_false(mocker):
1362
+ """
1363
+ Tests that running a sync for a connector with multiple streams and stop_sync_on_stream_failure enabled stops
1364
+ the sync when one stream fails with an error.
1365
+ """
1366
+ stream_output = [{"k1": "v1"}, {"k2": "v2"}]
1367
+ s1 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s1")
1368
+ s2 = StreamRaisesException(AirbyteTracedException(message="I was born only to crash like Icarus"))
1369
+ s3 = MockStream([({"sync_mode": SyncMode.full_refresh}, stream_output)], name="s3")
1370
+
1371
+ mocker.patch.object(MockStream, "get_json_schema", return_value={})
1372
+ mocker.patch.object(StreamRaisesException, "get_json_schema", return_value={})
1373
+
1374
+ src = MockSource(streams=[s1, s2, s3])
1375
+ mocker.patch.object(MockSource, "stop_sync_on_stream_failure", return_value=True)
1376
+ catalog = ConfiguredAirbyteCatalog(
1377
+ streams=[
1378
+ _configured_stream(s1, SyncMode.full_refresh),
1379
+ _configured_stream(s2, SyncMode.full_refresh),
1380
+ _configured_stream(s3, SyncMode.full_refresh),
1381
+ ]
1382
+ )
1383
+
1384
+ expected = _fix_emitted_at(
1385
+ [
1386
+ _as_stream_status("s1", AirbyteStreamStatus.STARTED),
1387
+ _as_stream_status("s1", AirbyteStreamStatus.RUNNING),
1388
+ *_as_records("s1", stream_output),
1389
+ _as_stream_status("s1", AirbyteStreamStatus.COMPLETE),
1390
+ _as_stream_status("lamentations", AirbyteStreamStatus.STARTED),
1391
+ _as_stream_status("lamentations", AirbyteStreamStatus.INCOMPLETE),
1392
+ _as_error_trace("lamentations", "I was born only to crash like Icarus", None, FailureType.system_error, None),
1393
+ ]
1394
+ )
1395
+
1396
+ with pytest.raises(AirbyteTracedException) as exc:
1397
+ messages = [_remove_stack_trace(message) for message in src.read(logger, {}, catalog)]
1398
+ messages = _fix_emitted_at(messages)
1399
+
1400
+ assert expected == messages
1401
+
1402
+ assert "lamentations" in exc.value.message
1403
+ assert exc.value.failure_type == FailureType.config_error
1404
+
1405
+
1406
+ def _remove_stack_trace(message: AirbyteMessage) -> AirbyteMessage:
1407
+ """
1408
+ Helper method that removes the stack trace from Airbyte trace messages to make asserting against expected records easier
1409
+ """
1410
+ if message.trace and message.trace.error and message.trace.error.stack_trace:
1411
+ message.trace.error.stack_trace = None
1412
+ return message
@@ -2,7 +2,9 @@
2
2
  # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
+ import json
5
6
  import os
7
+ from typing import Any, List, Mapping
6
8
  from unittest import mock
7
9
  from unittest.mock import patch
8
10
 
@@ -22,9 +24,9 @@ from unit_tests.sources.fixtures.source_test_fixture import (
22
24
  "deployment_mode, url_base, expected_records, expected_error",
23
25
  [
24
26
  pytest.param("CLOUD", "https://airbyte.com/api/v1/", [], None, id="test_cloud_read_with_public_endpoint"),
25
- pytest.param("CLOUD", "http://unsecured.com/api/v1/", [], ValueError, id="test_cloud_read_with_unsecured_url"),
26
- pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [], AirbyteTracedException, id="test_cloud_read_with_private_endpoint"),
27
- pytest.param("CLOUD", "https://localhost:80/api/v1/", [], AirbyteTracedException, id="test_cloud_read_with_localhost"),
27
+ pytest.param("CLOUD", "http://unsecured.com/api/v1/", [], "system_error", id="test_cloud_read_with_unsecured_url"),
28
+ pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [], "config_error", id="test_cloud_read_with_private_endpoint"),
29
+ pytest.param("CLOUD", "https://localhost:80/api/v1/", [], "config_error", id="test_cloud_read_with_localhost"),
28
30
  pytest.param("OSS", "https://airbyte.com/api/v1/", [], None, id="test_oss_read_with_public_endpoint"),
29
31
  pytest.param("OSS", "https://172.20.105.99/api/v1/", [], None, id="test_oss_read_with_private_endpoint"),
30
32
  ],
@@ -37,8 +39,10 @@ def test_external_request_source(capsys, deployment_mode, url_base, expected_rec
37
39
  with mock.patch.object(HttpTestStream, "url_base", url_base):
38
40
  args = ["read", "--config", "config.json", "--catalog", "configured_catalog.json"]
39
41
  if expected_error:
40
- with pytest.raises(expected_error):
42
+ with pytest.raises(AirbyteTracedException):
41
43
  launch(source, args)
44
+ messages = [json.loads(line) for line in capsys.readouterr().out.splitlines()]
45
+ assert contains_error_trace_message(messages, expected_error)
42
46
  else:
43
47
  launch(source, args)
44
48
 
@@ -47,14 +51,14 @@ def test_external_request_source(capsys, deployment_mode, url_base, expected_rec
47
51
  "deployment_mode, token_refresh_url, expected_records, expected_error",
48
52
  [
49
53
  pytest.param("CLOUD", "https://airbyte.com/api/v1/", [], None, id="test_cloud_read_with_public_endpoint"),
50
- pytest.param("CLOUD", "http://unsecured.com/api/v1/", [], ValueError, id="test_cloud_read_with_unsecured_url"),
51
- pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [], AirbyteTracedException, id="test_cloud_read_with_private_endpoint"),
54
+ pytest.param("CLOUD", "http://unsecured.com/api/v1/", [], "system_error", id="test_cloud_read_with_unsecured_url"),
55
+ pytest.param("CLOUD", "https://172.20.105.99/api/v1/", [], "config_error", id="test_cloud_read_with_private_endpoint"),
52
56
  pytest.param("OSS", "https://airbyte.com/api/v1/", [], None, id="test_oss_read_with_public_endpoint"),
53
57
  pytest.param("OSS", "https://172.20.105.99/api/v1/", [], None, id="test_oss_read_with_private_endpoint"),
54
58
  ],
55
59
  )
56
60
  @patch.object(requests.Session, "send", fixture_mock_send)
57
- def test_external_oauth_request_source(deployment_mode, token_refresh_url, expected_records, expected_error):
61
+ def test_external_oauth_request_source(capsys, deployment_mode, token_refresh_url, expected_records, expected_error):
58
62
  oauth_authenticator = SourceFixtureOauthAuthenticator(
59
63
  client_id="nora", client_secret="hae_sung", refresh_token="arthur", token_refresh_endpoint=token_refresh_url
60
64
  )
@@ -63,7 +67,20 @@ def test_external_oauth_request_source(deployment_mode, token_refresh_url, expec
63
67
  with mock.patch.dict(os.environ, {"DEPLOYMENT_MODE": deployment_mode}, clear=False): # clear=True clears the existing os.environ dict
64
68
  args = ["read", "--config", "config.json", "--catalog", "configured_catalog.json"]
65
69
  if expected_error:
66
- with pytest.raises(expected_error):
70
+ with pytest.raises(AirbyteTracedException):
67
71
  launch(source, args)
72
+ messages = [json.loads(line) for line in capsys.readouterr().out.splitlines()]
73
+ assert contains_error_trace_message(messages, expected_error)
68
74
  else:
69
75
  launch(source, args)
76
+
77
+
78
+ def contains_error_trace_message(messages: List[Mapping[str, Any]], expected_error: str) -> bool:
79
+ for message in messages:
80
+ if message.get("type") != "TRACE":
81
+ continue
82
+ elif message.get("trace").get("type") != "ERROR":
83
+ continue
84
+ elif message.get("trace").get("error").get("failure_type") == expected_error:
85
+ return True
86
+ return False
@@ -343,7 +343,7 @@ def test_concurrent_source_yields_the_same_messages_as_abstract_source_when_an_e
343
343
  source, concurrent_source = _init_sources([stream_slice_to_partition], state, logger)
344
344
  config = {}
345
345
  catalog = _create_configured_catalog(source._streams)
346
- messages_from_abstract_source = _read_from_source(source, logger, config, catalog, state, RuntimeError)
346
+ messages_from_abstract_source = _read_from_source(source, logger, config, catalog, state, AirbyteTracedException)
347
347
  messages_from_concurrent_source = _read_from_source(concurrent_source, logger, config, catalog, state, RuntimeError)
348
348
 
349
349
  expected_messages = [
File without changes
File without changes