airbyte-cdk 6.38.1__tar.gz → 6.38.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/PKG-INFO +1 -1
  2. airbyte_cdk-6.38.3/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +218 -0
  3. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/decoder.py +3 -3
  4. airbyte_cdk-6.38.3/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +30 -0
  5. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +6 -9
  6. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -2
  7. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +49 -9
  8. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/http_requester.py +33 -7
  9. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +11 -6
  10. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/adapters.py +9 -1
  11. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/pyproject.toml +1 -1
  12. airbyte_cdk-6.38.1/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -160
  13. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/LICENSE.txt +0 -0
  14. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/LICENSE_SHORT +0 -0
  15. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/README.md +0 -0
  16. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/__init__.py +0 -0
  17. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/cli/__init__.py +0 -0
  18. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  19. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  20. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  21. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/config_observation.py +0 -0
  22. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector.py +0 -0
  23. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/README.md +0 -0
  24. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/__init__.py +0 -0
  25. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  26. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/main.py +0 -0
  27. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/models.py +0 -0
  28. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  29. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  30. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  31. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  32. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  33. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/__init__.py +0 -0
  34. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/destination.py +0 -0
  35. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  36. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  37. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  38. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  39. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  40. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  41. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  42. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  43. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  44. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/entrypoint.py +0 -0
  45. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/exception_handler.py +0 -0
  46. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/logger.py +0 -0
  47. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/models/__init__.py +0 -0
  48. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  49. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  50. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  51. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/models/well_known_types.py +0 -0
  52. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/py.typed +0 -0
  53. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/__init__.py +0 -0
  54. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/abstract_source.py +0 -0
  55. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  56. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  57. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  58. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  59. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  60. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  61. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  62. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/config.py +0 -0
  63. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  64. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  65. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  66. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  67. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  68. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  69. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  70. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  71. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  72. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  73. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  74. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  75. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  76. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  77. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  78. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  79. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  80. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  81. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  82. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  83. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  84. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  85. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  86. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  87. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  88. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  89. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  90. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  91. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  92. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  93. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  94. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  95. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  96. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  97. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  98. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  99. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  100. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  101. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  102. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  103. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  104. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  105. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  106. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
  107. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  108. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  109. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  110. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  111. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  112. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  113. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  114. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  115. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  116. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  117. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  118. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  119. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  120. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  121. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  122. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  123. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  124. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  125. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  126. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  127. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  128. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  129. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  130. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  131. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  132. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  133. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  134. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  135. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  136. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  137. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  138. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  139. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  140. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  141. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  142. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  143. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  144. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  145. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  146. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  147. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  148. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  149. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  150. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  151. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  152. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  153. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  154. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  155. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  156. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  157. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  158. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  159. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  160. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  161. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  162. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  163. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  164. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  165. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  166. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  167. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  168. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  169. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  170. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  171. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  172. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  173. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  174. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  175. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  176. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  177. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  178. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  179. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  180. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  181. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  182. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  183. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  184. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  185. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  186. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  187. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  188. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  189. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  190. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  191. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  192. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  193. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  194. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  195. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  196. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  197. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  198. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  199. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  200. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  201. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  202. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  203. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  204. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/declarative/types.py +0 -0
  205. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/README.md +0 -0
  206. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  207. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  208. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  209. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  210. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  211. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  212. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  213. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  214. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  215. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  216. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  217. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  218. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  219. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  220. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  221. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  222. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  223. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  224. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  225. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  226. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  227. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  228. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  229. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  230. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  231. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  232. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  233. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  234. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  235. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  236. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  237. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  238. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  239. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  240. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  241. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  242. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  243. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  244. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  245. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  246. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  247. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  248. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  249. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  250. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  251. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  252. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  253. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  254. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/file_based/types.py +0 -0
  255. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/http_config.py +0 -0
  256. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/http_logger.py +0 -0
  257. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/message/__init__.py +0 -0
  258. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/message/repository.py +0 -0
  259. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/source.py +0 -0
  260. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  261. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/__init__.py +0 -0
  262. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  263. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  264. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  265. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  266. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  267. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  268. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  269. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  270. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  271. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  272. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  273. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  274. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  275. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  276. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  277. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  278. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  279. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  280. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  281. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  282. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  283. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  284. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  285. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  286. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  287. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  288. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  289. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  290. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  291. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  292. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/core.py +0 -0
  293. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  294. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  295. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  296. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  297. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  298. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  299. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  300. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  301. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  302. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  303. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  304. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  305. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/http.py +0 -0
  306. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  307. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  308. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  309. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  310. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  311. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  312. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  313. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  314. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  315. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/types.py +0 -0
  316. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/__init__.py +0 -0
  317. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/casing.py +0 -0
  318. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  319. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  320. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  321. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/transform.py +0 -0
  322. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sources/utils/types.py +0 -0
  323. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/__init__.py +0 -0
  324. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/_util/__init__.py +0 -0
  325. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/_util/hashing.py +0 -0
  326. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  327. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/constants.py +0 -0
  328. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/exceptions.py +0 -0
  329. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/secrets.py +0 -0
  330. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/shared/__init__.py +0 -0
  331. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  332. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  333. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/sql/types.py +0 -0
  334. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/__init__.py +0 -0
  335. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/catalog_builder.py +0 -0
  336. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  337. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  338. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  339. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  340. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/mock_http/request.py +0 -0
  341. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/mock_http/response.py +0 -0
  342. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  343. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/state_builder.py +0 -0
  344. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/utils/__init__.py +0 -0
  345. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/utils/data.py +0 -0
  346. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  347. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  348. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/test/utils/reading.py +0 -0
  349. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/__init__.py +0 -0
  350. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  351. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/analytics_message.py +0 -0
  352. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/constants.py +0 -0
  353. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  354. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  355. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/event_timing.py +0 -0
  356. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  357. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  358. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/message_utils.py +0 -0
  359. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  360. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/print_buffer.py +0 -0
  361. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  362. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/slice_hasher.py +0 -0
  363. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  364. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  365. {airbyte_cdk-6.38.1 → airbyte_cdk-6.38.3}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: airbyte-cdk
3
- Version: 6.38.1
3
+ Version: 6.38.3
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -0,0 +1,218 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ import csv
6
+ import gzip
7
+ import io
8
+ import json
9
+ import logging
10
+ from dataclasses import dataclass
11
+ from io import BufferedIOBase, TextIOWrapper
12
+ from typing import Any, Optional
13
+
14
+ import orjson
15
+ import requests
16
+
17
+ from airbyte_cdk.models import FailureType
18
+ from airbyte_cdk.sources.declarative.decoders.decoder import DECODER_OUTPUT_TYPE, Decoder
19
+ from airbyte_cdk.sources.declarative.decoders.decoder_parser import (
20
+ PARSER_OUTPUT_TYPE,
21
+ PARSERS_BY_HEADER_TYPE,
22
+ PARSERS_TYPE,
23
+ Parser,
24
+ )
25
+ from airbyte_cdk.utils import AirbyteTracedException
26
+
27
+ logger = logging.getLogger("airbyte")
28
+
29
+
30
+ @dataclass
31
+ class GzipParser(Parser):
32
+ inner_parser: Parser
33
+
34
+ def parse(self, data: BufferedIOBase) -> PARSER_OUTPUT_TYPE:
35
+ """
36
+ Decompress gzipped bytes and pass decompressed data to the inner parser.
37
+
38
+ IMPORTANT:
39
+ - If the data is not gzipped, reset the pointer and pass the data to the inner parser as is.
40
+
41
+ Note:
42
+ - The data is not decoded by default.
43
+ """
44
+
45
+ with gzip.GzipFile(fileobj=data, mode="rb") as gzipobj:
46
+ yield from self.inner_parser.parse(gzipobj)
47
+
48
+
49
+ @dataclass
50
+ class JsonParser(Parser):
51
+ encoding: str = "utf-8"
52
+
53
+ def parse(self, data: BufferedIOBase) -> PARSER_OUTPUT_TYPE:
54
+ """
55
+ Attempts to deserialize data using orjson library. As an extra layer of safety we fallback on the json library to deserialize the data.
56
+ """
57
+ raw_data = data.read()
58
+ body_json = self._parse_orjson(raw_data) or self._parse_json(raw_data)
59
+
60
+ if body_json is None:
61
+ raise AirbyteTracedException(
62
+ message="Response JSON data failed to be parsed. See logs for more information.",
63
+ internal_message=f"Response JSON data failed to be parsed.",
64
+ failure_type=FailureType.system_error,
65
+ )
66
+
67
+ if isinstance(body_json, list):
68
+ yield from body_json
69
+ else:
70
+ yield from [body_json]
71
+
72
+ def _parse_orjson(self, raw_data: bytes) -> Optional[Any]:
73
+ try:
74
+ return orjson.loads(raw_data.decode(self.encoding))
75
+ except Exception as exc:
76
+ logger.debug(
77
+ f"Failed to parse JSON data using orjson library. Falling back to json library. {exc}"
78
+ )
79
+ return None
80
+
81
+ def _parse_json(self, raw_data: bytes) -> Optional[Any]:
82
+ try:
83
+ return json.loads(raw_data.decode(self.encoding))
84
+ except Exception as exc:
85
+ logger.error(f"Failed to parse JSON data using json library. {exc}")
86
+ return None
87
+
88
+
89
+ @dataclass
90
+ class JsonLineParser(Parser):
91
+ encoding: Optional[str] = "utf-8"
92
+
93
+ def parse(self, data: BufferedIOBase) -> PARSER_OUTPUT_TYPE:
94
+ for line in data:
95
+ try:
96
+ yield json.loads(line.decode(encoding=self.encoding or "utf-8"))
97
+ except json.JSONDecodeError as e:
98
+ logger.warning(f"Cannot decode/parse line {line!r} as JSON, error: {e}")
99
+
100
+
101
+ @dataclass
102
+ class CsvParser(Parser):
103
+ # TODO: migrate implementation to re-use file-base classes
104
+ encoding: Optional[str] = "utf-8"
105
+ delimiter: Optional[str] = ","
106
+
107
+ def _get_delimiter(self) -> Optional[str]:
108
+ """
109
+ Get delimiter from the configuration. Check for the escape character and decode it.
110
+ """
111
+ if self.delimiter is not None:
112
+ if self.delimiter.startswith("\\"):
113
+ self.delimiter = self.delimiter.encode("utf-8").decode("unicode_escape")
114
+
115
+ return self.delimiter
116
+
117
+ def parse(self, data: BufferedIOBase) -> PARSER_OUTPUT_TYPE:
118
+ """
119
+ Parse CSV data from decompressed bytes.
120
+ """
121
+ text_data = TextIOWrapper(data, encoding=self.encoding) # type: ignore
122
+ reader = csv.DictReader(text_data, delimiter=self._get_delimiter() or ",")
123
+ for row in reader:
124
+ yield row
125
+
126
+
127
+ class CompositeRawDecoder(Decoder):
128
+ """
129
+ Decoder strategy to transform a requests.Response into a PARSER_OUTPUT_TYPE
130
+ passed response.raw to parser(s).
131
+
132
+ Note: response.raw is not decoded/decompressed by default. Parsers should be instantiated recursively.
133
+
134
+ Example:
135
+ composite_raw_decoder = CompositeRawDecoder(
136
+ parser=GzipParser(
137
+ inner_parser=JsonLineParser(encoding="iso-8859-1")
138
+ )
139
+ )
140
+ """
141
+
142
+ def __init__(
143
+ self,
144
+ parser: Parser,
145
+ stream_response: bool = True,
146
+ parsers_by_header: PARSERS_BY_HEADER_TYPE = None,
147
+ ) -> None:
148
+ # since we moved from using `dataclass` to `__init__` method,
149
+ # we need to keep using the `parser` to be able to resolve the depenencies
150
+ # between the parsers correctly.
151
+ self.parser = parser
152
+
153
+ self._parsers_by_header = parsers_by_header if parsers_by_header else {}
154
+ self._stream_response = stream_response
155
+
156
+ @classmethod
157
+ def by_headers(
158
+ cls,
159
+ parsers: PARSERS_TYPE,
160
+ stream_response: bool,
161
+ fallback_parser: Parser,
162
+ ) -> "CompositeRawDecoder":
163
+ """
164
+ Create a CompositeRawDecoder instance based on header values.
165
+
166
+ Args:
167
+ parsers (PARSERS_TYPE): A list of tuples where each tuple contains headers, header values, and a parser.
168
+ stream_response (bool): A flag indicating whether the response should be streamed.
169
+ fallback_parser (Parser): A parser to use if no matching header is found.
170
+
171
+ Returns:
172
+ CompositeRawDecoder: An instance of CompositeRawDecoder configured with the provided parsers.
173
+ """
174
+ parsers_by_header = {}
175
+ for headers, header_values, parser in parsers:
176
+ for header in headers:
177
+ parsers_by_header[header] = {header_value: parser for header_value in header_values}
178
+ return cls(fallback_parser, stream_response, parsers_by_header)
179
+
180
+ def is_stream_response(self) -> bool:
181
+ return self._stream_response
182
+
183
+ def decode(self, response: requests.Response) -> DECODER_OUTPUT_TYPE:
184
+ parser = self._select_parser(response)
185
+ if self.is_stream_response():
186
+ # urllib mentions that some interfaces don't play nice with auto_close
187
+ # More info here: https://urllib3.readthedocs.io/en/stable/user-guide.html#using-io-wrappers-with-response-content
188
+ # We have indeed observed some issues with CSV parsing.
189
+ # Hence, we will manage the closing of the file ourselves until we find a better solution.
190
+ response.raw.auto_close = False
191
+ yield from parser.parse(
192
+ data=response.raw, # type: ignore[arg-type]
193
+ )
194
+ response.raw.close()
195
+ else:
196
+ yield from parser.parse(data=io.BytesIO(response.content))
197
+
198
+ def _select_parser(self, response: requests.Response) -> Parser:
199
+ """
200
+ Selects the appropriate parser based on the response headers.
201
+
202
+ This method iterates through the `_parsers_by_header` dictionary to find a matching parser
203
+ based on the headers in the response. If a matching header and header value are found,
204
+ the corresponding parser is returned. If no match is found, the default parser is returned.
205
+
206
+ Args:
207
+ response (requests.Response): The HTTP response object containing headers to check.
208
+
209
+ Returns:
210
+ Parser: The parser corresponding to the matched header value, or the default parser if no match is found.
211
+ """
212
+ for header, parser_by_header_value in self._parsers_by_header.items():
213
+ if (
214
+ header in response.headers
215
+ and response.headers[header] in parser_by_header_value.keys()
216
+ ):
217
+ return parser_by_header_value[response.headers[header]]
218
+ return self.parser
@@ -8,6 +8,8 @@ from typing import Any, Generator, MutableMapping
8
8
 
9
9
  import requests
10
10
 
11
+ DECODER_OUTPUT_TYPE = Generator[MutableMapping[str, Any], None, None]
12
+
11
13
 
12
14
  @dataclass
13
15
  class Decoder:
@@ -22,9 +24,7 @@ class Decoder:
22
24
  """
23
25
 
24
26
  @abstractmethod
25
- def decode(
26
- self, response: requests.Response
27
- ) -> Generator[MutableMapping[str, Any], None, None]:
27
+ def decode(self, response: requests.Response) -> DECODER_OUTPUT_TYPE:
28
28
  """
29
29
  Decodes a requests.Response into a Mapping[str, Any] or an array
30
30
  :param response: the response to decode
@@ -0,0 +1,30 @@
1
+ #
2
+ # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+
6
+ import logging
7
+ from abc import ABC, abstractmethod
8
+ from dataclasses import dataclass
9
+ from io import BufferedIOBase
10
+ from typing import Any, Dict, Generator, List, MutableMapping, Optional, Set, Tuple
11
+
12
+ logger = logging.getLogger("airbyte")
13
+
14
+
15
+ PARSER_OUTPUT_TYPE = Generator[MutableMapping[str, Any], None, None]
16
+
17
+
18
+ @dataclass
19
+ class Parser(ABC):
20
+ @abstractmethod
21
+ def parse(self, data: BufferedIOBase) -> PARSER_OUTPUT_TYPE:
22
+ """
23
+ Parse data and yield dictionaries.
24
+ """
25
+ pass
26
+
27
+
28
+ # reusable parser types
29
+ PARSERS_TYPE = List[Tuple[Set[str], Set[str], Parser]]
30
+ PARSERS_BY_HEADER_TYPE = Optional[Dict[str, Dict[str, Parser]]]
@@ -6,16 +6,13 @@ import logging
6
6
  import zipfile
7
7
  from dataclasses import dataclass
8
8
  from io import BytesIO
9
- from typing import Any, Generator, MutableMapping
10
9
 
11
- import orjson
12
10
  import requests
13
11
 
14
12
  from airbyte_cdk.models import FailureType
15
13
  from airbyte_cdk.sources.declarative.decoders import Decoder
16
- from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import (
17
- Parser,
18
- )
14
+ from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import Parser
15
+ from airbyte_cdk.sources.declarative.decoders.decoder import DECODER_OUTPUT_TYPE
19
16
  from airbyte_cdk.utils import AirbyteTracedException
20
17
 
21
18
  logger = logging.getLogger("airbyte")
@@ -28,16 +25,16 @@ class ZipfileDecoder(Decoder):
28
25
  def is_stream_response(self) -> bool:
29
26
  return False
30
27
 
31
- def decode(
32
- self, response: requests.Response
33
- ) -> Generator[MutableMapping[str, Any], None, None]:
28
+ def decode(self, response: requests.Response) -> DECODER_OUTPUT_TYPE:
34
29
  try:
35
30
  with zipfile.ZipFile(BytesIO(response.content)) as zip_file:
36
31
  for file_name in zip_file.namelist():
37
32
  unzipped_content = zip_file.read(file_name)
38
33
  buffered_content = BytesIO(unzipped_content)
39
34
  try:
40
- yield from self.parser.parse(buffered_content)
35
+ yield from self.parser.parse(
36
+ buffered_content,
37
+ )
41
38
  except Exception as e:
42
39
  logger.error(
43
40
  f"Failed to parse file: {file_name} from zip file: {response.request.url} with exception {e}."
@@ -15,7 +15,6 @@ from numpy import nan
15
15
 
16
16
  from airbyte_cdk.sources.declarative.extractors.record_extractor import RecordExtractor
17
17
 
18
- EMPTY_STR: str = ""
19
18
  DEFAULT_ENCODING: str = "utf-8"
20
19
  DOWNLOAD_CHUNK_SIZE: int = 1024 * 10
21
20
 
@@ -136,7 +135,6 @@ class ResponseToFileExtractor(RecordExtractor):
136
135
  """
137
136
 
138
137
  try:
139
- # TODO: Add support for other file types, like `json`, with `pd.read_json()`
140
138
  with open(path, "r", encoding=file_encoding) as data:
141
139
  chunks = pd.read_csv(
142
140
  data, chunksize=chunk_size, iterator=True, dialect="unix", dtype=object
@@ -1476,7 +1476,19 @@ class ModelToComponentFactory:
1476
1476
  try:
1477
1477
  module_ref = importlib.import_module(module_name_full)
1478
1478
  except ModuleNotFoundError as e:
1479
- raise ValueError(f"Could not load module `{module_name_full}`.") from e
1479
+ if split[0] == "source_declarative_manifest":
1480
+ # During testing, the modules containing the custom components are not moved to source_declarative_manifest. In order to run the test, add the source folder to your PYTHONPATH or add it runtime using sys.path.append
1481
+ try:
1482
+ import os
1483
+
1484
+ module_name_with_source_declarative_manifest = ".".join(split[1:-1])
1485
+ module_ref = importlib.import_module(
1486
+ module_name_with_source_declarative_manifest
1487
+ )
1488
+ except ModuleNotFoundError:
1489
+ raise ValueError(f"Could not load module `{module_name_full}`.") from e
1490
+ else:
1491
+ raise ValueError(f"Could not load module `{module_name_full}`.") from e
1480
1492
 
1481
1493
  try:
1482
1494
  return getattr(module_ref, class_name)
@@ -2193,18 +2205,40 @@ class ModelToComponentFactory:
2193
2205
  stream_response=False if self._emit_connector_builder_messages else True,
2194
2206
  )
2195
2207
 
2196
- @staticmethod
2197
- def create_jsonl_decoder(model: JsonlDecoderModel, config: Config, **kwargs: Any) -> Decoder:
2208
+ def create_jsonl_decoder(
2209
+ self, model: JsonlDecoderModel, config: Config, **kwargs: Any
2210
+ ) -> Decoder:
2198
2211
  return CompositeRawDecoder(
2199
- parser=ModelToComponentFactory._get_parser(model, config), stream_response=True
2212
+ parser=ModelToComponentFactory._get_parser(model, config),
2213
+ stream_response=False if self._emit_connector_builder_messages else True,
2200
2214
  )
2201
2215
 
2202
2216
  def create_gzip_decoder(
2203
2217
  self, model: GzipDecoderModel, config: Config, **kwargs: Any
2204
2218
  ) -> Decoder:
2205
- return CompositeRawDecoder(
2206
- parser=ModelToComponentFactory._get_parser(model, config),
2207
- stream_response=False if self._emit_connector_builder_messages else True,
2219
+ _compressed_response_types = {
2220
+ "gzip",
2221
+ "x-gzip",
2222
+ "gzip, deflate",
2223
+ "x-gzip, deflate",
2224
+ "application/zip",
2225
+ "application/gzip",
2226
+ "application/x-gzip",
2227
+ "application/x-zip-compressed",
2228
+ }
2229
+
2230
+ gzip_parser: GzipParser = ModelToComponentFactory._get_parser(model, config) # type: ignore # based on the model, we know this will be a GzipParser
2231
+
2232
+ if self._emit_connector_builder_messages:
2233
+ # This is very surprising but if the response is not streamed,
2234
+ # CompositeRawDecoder calls response.content and the requests library actually uncompress the data as opposed to response.raw,
2235
+ # which uses urllib3 directly and does not uncompress the data.
2236
+ return CompositeRawDecoder(gzip_parser.inner_parser, False)
2237
+
2238
+ return CompositeRawDecoder.by_headers(
2239
+ [({"Content-Encoding", "Content-Type"}, _compressed_response_types, gzip_parser)],
2240
+ stream_response=True,
2241
+ fallback_parser=gzip_parser.inner_parser,
2208
2242
  )
2209
2243
 
2210
2244
  @staticmethod
@@ -2753,7 +2787,10 @@ class ModelToComponentFactory:
2753
2787
  )
2754
2788
  paginator = (
2755
2789
  self._create_component_from_model(
2756
- model=model.download_paginator, decoder=decoder, config=config, url_base=""
2790
+ model=model.download_paginator,
2791
+ decoder=decoder,
2792
+ config=config,
2793
+ url_base="",
2757
2794
  )
2758
2795
  if model.download_paginator
2759
2796
  else NoPagination(parameters={})
@@ -2870,7 +2907,10 @@ class ModelToComponentFactory:
2870
2907
  model=model.status_extractor, decoder=decoder, config=config, name=name
2871
2908
  )
2872
2909
  download_target_extractor = self._create_component_from_model(
2873
- model=model.download_target_extractor, decoder=decoder, config=config, name=name
2910
+ model=model.download_target_extractor,
2911
+ decoder=decoder,
2912
+ config=config,
2913
+ name=name,
2874
2914
  )
2875
2915
  job_repository: AsyncJobRepository = AsyncHttpJobRepository(
2876
2916
  creation_requester=creation_requester,
@@ -16,7 +16,9 @@ from airbyte_cdk.sources.declarative.auth.declarative_authenticator import (
16
16
  )
17
17
  from airbyte_cdk.sources.declarative.decoders import Decoder
18
18
  from airbyte_cdk.sources.declarative.decoders.json_decoder import JsonDecoder
19
- from airbyte_cdk.sources.declarative.interpolation.interpolated_string import InterpolatedString
19
+ from airbyte_cdk.sources.declarative.interpolation.interpolated_string import (
20
+ InterpolatedString,
21
+ )
20
22
  from airbyte_cdk.sources.declarative.requesters.request_options.interpolated_request_options_provider import (
21
23
  InterpolatedRequestOptionsProvider,
22
24
  )
@@ -26,7 +28,10 @@ from airbyte_cdk.sources.streams.call_rate import APIBudget
26
28
  from airbyte_cdk.sources.streams.http import HttpClient
27
29
  from airbyte_cdk.sources.streams.http.error_handlers import ErrorHandler
28
30
  from airbyte_cdk.sources.types import Config, EmptyString, StreamSlice, StreamState
29
- from airbyte_cdk.utils.mapping_helpers import combine_mappings, get_interpolation_context
31
+ from airbyte_cdk.utils.mapping_helpers import (
32
+ combine_mappings,
33
+ get_interpolation_context,
34
+ )
30
35
 
31
36
 
32
37
  @dataclass
@@ -155,7 +160,9 @@ class HttpRequester(Requester):
155
160
  next_page_token: Optional[Mapping[str, Any]] = None,
156
161
  ) -> MutableMapping[str, Any]:
157
162
  return self._request_options_provider.get_request_params(
158
- stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token
163
+ stream_state=stream_state,
164
+ stream_slice=stream_slice,
165
+ next_page_token=next_page_token,
159
166
  )
160
167
 
161
168
  def get_request_headers(
@@ -166,7 +173,9 @@ class HttpRequester(Requester):
166
173
  next_page_token: Optional[Mapping[str, Any]] = None,
167
174
  ) -> Mapping[str, Any]:
168
175
  return self._request_options_provider.get_request_headers(
169
- stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token
176
+ stream_state=stream_state,
177
+ stream_slice=stream_slice,
178
+ next_page_token=next_page_token,
170
179
  )
171
180
 
172
181
  # fixing request options provider types has a lot of dependencies
@@ -195,7 +204,9 @@ class HttpRequester(Requester):
195
204
  next_page_token: Optional[Mapping[str, Any]] = None,
196
205
  ) -> Optional[Mapping[str, Any]]:
197
206
  return self._request_options_provider.get_request_body_json(
198
- stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token
207
+ stream_state=stream_state,
208
+ stream_slice=stream_slice,
209
+ next_page_token=next_page_token,
199
210
  )
200
211
 
201
212
  @property
@@ -350,9 +361,24 @@ class HttpRequester(Requester):
350
361
  path (str): The path to join with the base URL.
351
362
 
352
363
  Returns:
353
- str: The concatenated URL with the trailing slash (if any) removed.
364
+ str: The resulting joined URL.
365
+
366
+ Note:
367
+ Related issue: https://github.com/airbytehq/airbyte-internal-issues/issues/11869
368
+ - If the path is an empty string or None, the method returns the base URL with any trailing slash removed.
369
+
370
+ Example:
371
+ 1) _join_url("https://example.com/api/", "endpoint") >> 'https://example.com/api/endpoint'
372
+ 2) _join_url("https://example.com/api", "/endpoint") >> 'https://example.com/api/endpoint'
373
+ 3) _join_url("https://example.com/api/", "") >> 'https://example.com/api'
374
+ 4) _join_url("https://example.com/api", None) >> 'https://example.com/api'
354
375
  """
355
- return urljoin(url_base, path).rstrip("/")
376
+
377
+ # return a full-url if provided directly from interpolation context
378
+ if path == EmptyString or path is None:
379
+ return url_base.rstrip("/")
380
+
381
+ return urljoin(url_base, path)
356
382
 
357
383
  def send_request(
358
384
  self,
@@ -39,13 +39,18 @@ class YamlDeclarativeSource(ConcurrentDeclarativeSource[List[AirbyteStateMessage
39
39
  )
40
40
 
41
41
  def _read_and_parse_yaml_file(self, path_to_yaml_file: str) -> ConnectionDefinition:
42
- package = self.__class__.__module__.split(".")[0]
42
+ try:
43
+ # For testing purposes, we want to allow to just pass a file
44
+ with open(path_to_yaml_file, "r") as f:
45
+ return yaml.safe_load(f) # type: ignore # we assume the yaml represents a ConnectionDefinition
46
+ except FileNotFoundError:
47
+ # Running inside the container, the working directory during an operation is not structured the same as the static files
48
+ package = self.__class__.__module__.split(".")[0]
43
49
 
44
- yaml_config = pkgutil.get_data(package, path_to_yaml_file)
45
- if yaml_config:
46
- decoded_yaml = yaml_config.decode()
47
- return self._parse(decoded_yaml)
48
- else:
50
+ yaml_config = pkgutil.get_data(package, path_to_yaml_file)
51
+ if yaml_config:
52
+ decoded_yaml = yaml_config.decode()
53
+ return self._parse(decoded_yaml)
49
54
  return {}
50
55
 
51
56
  def _emit_manifest_debug_message(self, extra_args: dict[str, Any]) -> None:
@@ -276,7 +276,7 @@ class StreamPartition(Partition):
276
276
  def read(self) -> Iterable[Record]:
277
277
  """
278
278
  Read messages from the stream.
279
- If the StreamData is a Mapping, it will be converted to a Record.
279
+ If the StreamData is a Mapping or an AirbyteMessage of type RECORD, it will be converted to a Record.
280
280
  Otherwise, the message will be emitted on the message repository.
281
281
  """
282
282
  try:
@@ -292,6 +292,8 @@ class StreamPartition(Partition):
292
292
  stream_slice=copy.deepcopy(self._slice),
293
293
  stream_state=self._state,
294
294
  ):
295
+ # Noting we'll also need to support FileTransferRecordMessage if we want to support file-based connectors in this facade
296
+ # For now, file-based connectors have their own stream facade
295
297
  if isinstance(record_data, Mapping):
296
298
  data_to_return = dict(record_data)
297
299
  self._stream.transformer.transform(
@@ -302,6 +304,12 @@ class StreamPartition(Partition):
302
304
  stream_name=self.stream_name(),
303
305
  associated_slice=self._slice, # type: ignore [arg-type]
304
306
  )
307
+ elif isinstance(record_data, AirbyteMessage) and record_data.record is not None:
308
+ yield Record(
309
+ data=record_data.record.data or {},
310
+ stream_name=self.stream_name(),
311
+ associated_slice=self._slice, # type: ignore [arg-type]
312
+ )
305
313
  else:
306
314
  self._message_repository.emit_message(record_data)
307
315
  except Exception as e:
@@ -23,7 +23,7 @@ classifiers = [
23
23
  keywords = ["airbyte", "connector-development-kit", "cdk"]
24
24
 
25
25
  # Python CDK uses dynamic versioning: https://github.com/mtkennerly/poetry-dynamic-versioning
26
- version = "6.38.1" # Version will be calculated dynamically.
26
+ version = "6.38.3" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false