airbyte-cdk 6.21.1.dev0__tar.gz → 6.23.0__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 (353) hide show
  1. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/PKG-INFO +3 -3
  2. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/cli/source_declarative_manifest/_run.py +6 -0
  3. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector_builder/connector_builder_handler.py +1 -0
  4. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +1 -0
  5. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +26 -0
  6. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/__init__.py +9 -1
  7. airbyte_cdk-6.23.0/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +59 -0
  8. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +15 -4
  9. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +18 -4
  10. airbyte_cdk-6.23.0/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +143 -0
  11. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +45 -6
  12. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/utils/manifest_only_fixtures.py +1 -2
  13. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/pyproject.toml +5 -9
  14. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/LICENSE.txt +0 -0
  15. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/README.md +0 -0
  16. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/__init__.py +0 -0
  17. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/cli/__init__.py +0 -0
  18. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  19. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  20. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/config_observation.py +0 -0
  21. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector.py +0 -0
  22. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector_builder/README.md +0 -0
  23. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector_builder/__init__.py +0 -0
  24. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector_builder/main.py +0 -0
  25. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector_builder/message_grouper.py +0 -0
  26. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/connector_builder/models.py +0 -0
  27. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/__init__.py +0 -0
  28. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/destination.py +0 -0
  29. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  30. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  31. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  32. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  33. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  34. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  35. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  36. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  37. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  38. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/entrypoint.py +0 -0
  39. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/exception_handler.py +0 -0
  40. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/logger.py +0 -0
  41. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/models/__init__.py +0 -0
  42. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  43. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  44. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/models/file_transfer_record_message.py +0 -0
  45. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/models/well_known_types.py +0 -0
  46. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/py.typed +0 -0
  47. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/__init__.py +0 -0
  48. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/abstract_source.py +0 -0
  49. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  50. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  51. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  52. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  53. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  54. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  55. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  56. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/config.py +0 -0
  57. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  58. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  59. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  60. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  61. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  62. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  63. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  64. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  65. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  66. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  67. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  68. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  69. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  70. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  71. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  72. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  73. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  74. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  75. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  76. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  77. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  78. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  79. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  80. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  81. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  82. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  83. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  84. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  85. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  86. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  87. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  88. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  89. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  90. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  91. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  92. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  93. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  94. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  95. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  96. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  97. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  98. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  99. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  100. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  101. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  102. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  103. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  104. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  105. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  106. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  107. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  108. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  109. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  110. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  111. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  112. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  113. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  114. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  115. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  116. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  117. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  118. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  119. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  120. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  121. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  122. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  123. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  124. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  125. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  126. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  127. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  128. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  129. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  130. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  131. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  132. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  133. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  134. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  135. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  136. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  137. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  138. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  139. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  140. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  141. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  142. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  143. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  144. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  145. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  146. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  147. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  148. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  149. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  150. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  151. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  152. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  153. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  154. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  155. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  156. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  157. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  158. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  159. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  160. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  161. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  162. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  163. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  164. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  165. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  166. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  167. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  168. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  169. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  170. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  171. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  172. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  173. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  174. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  175. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  176. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  177. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  178. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  179. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  180. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  181. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  182. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  183. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  184. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  185. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  186. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  187. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  188. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  189. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  190. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  191. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  192. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  193. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  194. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  195. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/types.py +0 -0
  196. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  197. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/embedded/__init__.py +0 -0
  198. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/embedded/base_integration.py +0 -0
  199. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/embedded/catalog.py +0 -0
  200. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/embedded/runner.py +0 -0
  201. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/embedded/tools.py +0 -0
  202. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/README.md +0 -0
  203. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  204. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  205. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  206. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  207. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  208. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  209. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  210. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  211. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  212. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  213. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  214. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  215. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  216. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  217. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  218. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  219. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  220. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  221. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  222. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  223. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  224. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  225. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  226. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  227. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  228. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  229. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  230. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  231. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  232. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  233. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  234. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  235. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  236. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  237. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  238. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  239. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  240. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  241. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  242. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  243. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  244. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  245. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  246. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  247. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  248. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/file_based/types.py +0 -0
  249. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/http_config.py +0 -0
  250. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/http_logger.py +0 -0
  251. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/message/__init__.py +0 -0
  252. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/message/repository.py +0 -0
  253. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/source.py +0 -0
  254. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/__init__.py +0 -0
  255. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  256. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  257. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  258. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  259. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  260. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  261. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  262. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  263. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  264. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  265. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  266. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  267. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  268. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  269. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  270. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  271. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  272. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  273. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  274. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  275. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  276. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  277. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  278. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  279. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  280. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  281. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  282. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  283. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/core.py +0 -0
  284. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  285. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  286. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  287. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  288. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  289. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  290. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  291. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  292. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  293. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  294. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  295. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  296. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/http.py +0 -0
  297. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  298. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  299. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  300. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  301. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  302. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  303. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  304. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  305. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/types.py +0 -0
  306. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/__init__.py +0 -0
  307. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/casing.py +0 -0
  308. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  309. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  310. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  311. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/transform.py +0 -0
  312. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sources/utils/types.py +0 -0
  313. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/__init__.py +0 -0
  314. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/_util/__init__.py +0 -0
  315. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/_util/hashing.py +0 -0
  316. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  317. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/constants.py +0 -0
  318. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/exceptions.py +0 -0
  319. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/secrets.py +0 -0
  320. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/shared/__init__.py +0 -0
  321. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  322. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  323. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/sql/types.py +0 -0
  324. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/__init__.py +0 -0
  325. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/catalog_builder.py +0 -0
  326. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  327. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  328. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  329. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  330. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/mock_http/request.py +0 -0
  331. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/mock_http/response.py +0 -0
  332. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  333. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/state_builder.py +0 -0
  334. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/utils/__init__.py +0 -0
  335. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/utils/data.py +0 -0
  336. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  337. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/test/utils/reading.py +0 -0
  338. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/__init__.py +0 -0
  339. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  340. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/analytics_message.py +0 -0
  341. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/constants.py +0 -0
  342. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  343. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/event_timing.py +0 -0
  344. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  345. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  346. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/message_utils.py +0 -0
  347. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  348. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/print_buffer.py +0 -0
  349. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  350. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/slice_hasher.py +0 -0
  351. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  352. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  353. {airbyte_cdk-6.21.1.dev0 → airbyte_cdk-6.23.0}/airbyte_cdk/utils/traced_exception.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: airbyte-cdk
3
- Version: 6.21.1.dev0
3
+ Version: 6.23.0
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  License: MIT
6
6
  Keywords: airbyte,connector-development-kit,cdk
@@ -23,7 +23,7 @@ Requires-Dist: Jinja2 (>=3.1.2,<3.2.0)
23
23
  Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
24
24
  Requires-Dist: Unidecode (>=1.3,<2.0)
25
25
  Requires-Dist: airbyte-protocol-models-dataclasses (>=0.14,<0.15)
26
- Requires-Dist: avro (>=1.11.2,<1.12.0) ; extra == "file-based"
26
+ Requires-Dist: avro (>=1.11.2,<1.13.0) ; extra == "file-based"
27
27
  Requires-Dist: backoff
28
28
  Requires-Dist: cachetools
29
29
  Requires-Dist: cohere (==4.21) ; extra == "vector-db-based"
@@ -66,7 +66,7 @@ Requires-Dist: tiktoken (==0.8.0) ; extra == "vector-db-based"
66
66
  Requires-Dist: unstructured.pytesseract (>=0.3.12) ; extra == "file-based"
67
67
  Requires-Dist: unstructured[docx,pptx] (==0.10.27) ; extra == "file-based"
68
68
  Requires-Dist: wcmatch (==10.0)
69
- Requires-Dist: xmltodict (>=0.13.0,<0.14.0)
69
+ Requires-Dist: xmltodict (>=0.13,<0.15)
70
70
  Project-URL: Documentation, https://docs.airbyte.io/
71
71
  Project-URL: Homepage, https://airbyte.com
72
72
  Project-URL: Repository, https://github.com/airbytehq/airbyte-python-cdk
@@ -171,6 +171,12 @@ def create_declarative_source(
171
171
  "Invalid config: `__injected_declarative_manifest` should be provided at the root "
172
172
  f"of the config but config only has keys: {list(config.keys() if config else [])}"
173
173
  )
174
+ if not isinstance(config["__injected_declarative_manifest"], dict):
175
+ raise ValueError(
176
+ "Invalid config: `__injected_declarative_manifest` should be a dictionary, "
177
+ f"but got type: {type(config['__injected_declarative_manifest'])}"
178
+ )
179
+
174
180
  return ConcurrentDeclarativeSource(
175
181
  config=config,
176
182
  catalog=catalog,
@@ -52,6 +52,7 @@ def get_limits(config: Mapping[str, Any]) -> TestReadLimits:
52
52
  def create_source(config: Mapping[str, Any], limits: TestReadLimits) -> ManifestDeclarativeSource:
53
53
  manifest = config["__injected_declarative_manifest"]
54
54
  return ManifestDeclarativeSource(
55
+ config=config,
55
56
  emit_connector_builder_messages=True,
56
57
  source_config=manifest,
57
58
  component_factory=ModelToComponentFactory(
@@ -77,6 +77,7 @@ class ConcurrentDeclarativeSource(ManifestDeclarativeSource, Generic[TState]):
77
77
 
78
78
  super().__init__(
79
79
  source_config=source_config,
80
+ config=config,
80
81
  debug=debug,
81
82
  emit_connector_builder_messages=emit_connector_builder_messages,
82
83
  component_factory=component_factory,
@@ -1514,6 +1514,7 @@ definitions:
1514
1514
  anyOf:
1515
1515
  - "$ref": "#/definitions/JsonDecoder"
1516
1516
  - "$ref": "#/definitions/XmlDecoder"
1517
+ - "$ref": "#/definitions/CompositeRawDecoder"
1517
1518
  $parameters:
1518
1519
  type: object
1519
1520
  additionalProperties: true
@@ -2100,6 +2101,26 @@ definitions:
2100
2101
  $parameters:
2101
2102
  type: object
2102
2103
  additionalProperties: true
2104
+ ZipfileDecoder:
2105
+ title: Zipfile Decoder
2106
+ description: Decoder for response data that is returned as zipfile(s).
2107
+ type: object
2108
+ additionalProperties: true
2109
+ required:
2110
+ - type
2111
+ - parser
2112
+ properties:
2113
+ type:
2114
+ type: string
2115
+ enum: [ZipfileDecoder]
2116
+ parser:
2117
+ title: Parser
2118
+ description: Parser to parse the decompressed data from the zipfile(s).
2119
+ anyOf:
2120
+ - "$ref": "#/definitions/GzipParser"
2121
+ - "$ref": "#/definitions/JsonParser"
2122
+ - "$ref": "#/definitions/JsonLineParser"
2123
+ - "$ref": "#/definitions/CsvParser"
2103
2124
  ListPartitionRouter:
2104
2125
  title: List Partition Router
2105
2126
  description: A Partition router that specifies a list of attributes where each attribute describes a portion of the complete data set for a stream. During a sync, each value is iterated over and can be used as input to outbound API requests.
@@ -2928,6 +2949,7 @@ definitions:
2928
2949
  - "$ref": "#/definitions/XmlDecoder"
2929
2950
  - "$ref": "#/definitions/GzipJsonDecoder"
2930
2951
  - "$ref": "#/definitions/CompositeRawDecoder"
2952
+ - "$ref": "#/definitions/ZipfileDecoder"
2931
2953
  $parameters:
2932
2954
  type: object
2933
2955
  additionalProperties: true
@@ -3126,6 +3148,8 @@ definitions:
3126
3148
  - "$ref": "#/definitions/IterableDecoder"
3127
3149
  - "$ref": "#/definitions/XmlDecoder"
3128
3150
  - "$ref": "#/definitions/GzipJsonDecoder"
3151
+ - "$ref": "#/definitions/CompositeRawDecoder"
3152
+ - "$ref": "#/definitions/ZipfileDecoder"
3129
3153
  download_decoder:
3130
3154
  title: Download Decoder
3131
3155
  description: Component decoding the download response so records can be extracted.
@@ -3136,6 +3160,8 @@ definitions:
3136
3160
  - "$ref": "#/definitions/IterableDecoder"
3137
3161
  - "$ref": "#/definitions/XmlDecoder"
3138
3162
  - "$ref": "#/definitions/GzipJsonDecoder"
3163
+ - "$ref": "#/definitions/CompositeRawDecoder"
3164
+ - "$ref": "#/definitions/ZipfileDecoder"
3139
3165
  $parameters:
3140
3166
  type: object
3141
3167
  additionalProperties: true
@@ -2,7 +2,12 @@
2
2
  # Copyright (c) 2023 Airbyte, Inc., all rights reserved.
3
3
  #
4
4
 
5
- from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import CompositeRawDecoder
5
+ from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import (
6
+ CompositeRawDecoder,
7
+ GzipParser,
8
+ JsonParser,
9
+ Parser,
10
+ )
6
11
  from airbyte_cdk.sources.declarative.decoders.decoder import Decoder
7
12
  from airbyte_cdk.sources.declarative.decoders.json_decoder import (
8
13
  GzipJsonDecoder,
@@ -15,15 +20,18 @@ from airbyte_cdk.sources.declarative.decoders.pagination_decoder_decorator impor
15
20
  PaginationDecoderDecorator,
16
21
  )
17
22
  from airbyte_cdk.sources.declarative.decoders.xml_decoder import XmlDecoder
23
+ from airbyte_cdk.sources.declarative.decoders.zipfile_decoder import ZipfileDecoder
18
24
 
19
25
  __all__ = [
20
26
  "Decoder",
21
27
  "CompositeRawDecoder",
22
28
  "JsonDecoder",
29
+ "JsonParser",
23
30
  "JsonlDecoder",
24
31
  "IterableDecoder",
25
32
  "GzipJsonDecoder",
26
33
  "NoopDecoder",
27
34
  "PaginationDecoderDecorator",
28
35
  "XmlDecoder",
36
+ "ZipfileDecoder",
29
37
  ]
@@ -0,0 +1,59 @@
1
+ #
2
+ # Copyright (c) 2024 Airbyte, Inc., all rights reserved.
3
+ #
4
+
5
+ import logging
6
+ import zipfile
7
+ from dataclasses import dataclass
8
+ from io import BytesIO
9
+ from typing import Any, Generator, MutableMapping
10
+
11
+ import orjson
12
+ import requests
13
+
14
+ from airbyte_cdk.models import FailureType
15
+ from airbyte_cdk.sources.declarative.decoders import Decoder
16
+ from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import (
17
+ Parser,
18
+ )
19
+ from airbyte_cdk.utils import AirbyteTracedException
20
+
21
+ logger = logging.getLogger("airbyte")
22
+
23
+
24
+ @dataclass
25
+ class ZipfileDecoder(Decoder):
26
+ parser: Parser
27
+
28
+ def is_stream_response(self) -> bool:
29
+ return False
30
+
31
+ def decode(
32
+ self, response: requests.Response
33
+ ) -> Generator[MutableMapping[str, Any], None, None]:
34
+ try:
35
+ with zipfile.ZipFile(BytesIO(response.content)) as zip_file:
36
+ for file_name in zip_file.namelist():
37
+ unzipped_content = zip_file.read(file_name)
38
+ buffered_content = BytesIO(unzipped_content)
39
+ try:
40
+ yield from self.parser.parse(buffered_content)
41
+ except Exception as e:
42
+ logger.error(
43
+ f"Failed to parse file: {file_name} from zip file: {response.request.url} with exception {e}."
44
+ )
45
+ raise AirbyteTracedException(
46
+ message=f"Failed to parse file: {file_name} from zip file.",
47
+ internal_message=f"Failed to parse file: {file_name} from zip file: {response.request.url}.",
48
+ failure_type=FailureType.system_error,
49
+ ) from e
50
+ except zipfile.BadZipFile as e:
51
+ logger.error(
52
+ f"Received an invalid zip file in response to URL: {response.request.url}. "
53
+ f"The size of the response body is: {len(response.content)}"
54
+ )
55
+ raise AirbyteTracedException(
56
+ message="Received an invalid zip file in response.",
57
+ internal_message=f"Received an invalid zip file in response to URL: {response.request.url}.",
58
+ failure_type=FailureType.system_error,
59
+ ) from e
@@ -7,6 +7,7 @@ import logging
7
7
  import pkgutil
8
8
  from copy import deepcopy
9
9
  from importlib import metadata
10
+ from types import ModuleType
10
11
  from typing import Any, Dict, Iterator, List, Mapping, Optional, Set
11
12
 
12
13
  import yaml
@@ -32,6 +33,9 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
32
33
  DeclarativeStream as DeclarativeStreamModel,
33
34
  )
34
35
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import Spec as SpecModel
36
+ from airbyte_cdk.sources.declarative.parsers.custom_code_compiler import (
37
+ get_registered_components_module,
38
+ )
35
39
  from airbyte_cdk.sources.declarative.parsers.manifest_component_transformer import (
36
40
  ManifestComponentTransformer,
37
41
  )
@@ -59,22 +63,29 @@ class ManifestDeclarativeSource(DeclarativeSource):
59
63
  def __init__(
60
64
  self,
61
65
  source_config: ConnectionDefinition,
66
+ *,
67
+ config: Mapping[str, Any] | None = None,
62
68
  debug: bool = False,
63
69
  emit_connector_builder_messages: bool = False,
64
70
  component_factory: Optional[ModelToComponentFactory] = None,
65
71
  ):
66
72
  """
67
- :param source_config(Mapping[str, Any]): The manifest of low-code components that describe the source connector
68
- :param debug(bool): True if debug mode is enabled
69
- :param component_factory(ModelToComponentFactory): optional factory if ModelToComponentFactory's default behaviour needs to be tweaked
73
+ Args:
74
+ config: The provided config dict.
75
+ source_config: The manifest of low-code components that describe the source connector.
76
+ debug: True if debug mode is enabled.
77
+ emit_connector_builder_messages: True if messages should be emitted to the connector builder.
78
+ component_factory: optional factory if ModelToComponentFactory's default behavior needs to be tweaked.
70
79
  """
71
80
  self.logger = logging.getLogger(f"airbyte.{self.name}")
72
-
73
81
  # For ease of use we don't require the type to be specified at the top level manifest, but it should be included during processing
74
82
  manifest = dict(source_config)
75
83
  if "type" not in manifest:
76
84
  manifest["type"] = "DeclarativeSource"
77
85
 
86
+ # If custom components are needed, locate and/or register them.
87
+ self.components_module: ModuleType | None = get_registered_components_module(config=config)
88
+
78
89
  resolved_source_config = ManifestReferenceResolver().preprocess_manifest(manifest)
79
90
  propagated_source_config = ManifestComponentTransformer().propagate_types_and_parameters(
80
91
  "", resolved_source_config, {}
@@ -1242,9 +1242,6 @@ class LegacySessionTokenAuthenticator(BaseModel):
1242
1242
 
1243
1243
 
1244
1244
  class JsonParser(BaseModel):
1245
- class Config:
1246
- extra = Extra.allow
1247
-
1248
1245
  type: Literal["JsonParser"]
1249
1246
  encoding: Optional[str] = "utf-8"
1250
1247
 
@@ -1680,6 +1677,18 @@ class CompositeErrorHandler(BaseModel):
1680
1677
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
1681
1678
 
1682
1679
 
1680
+ class ZipfileDecoder(BaseModel):
1681
+ class Config:
1682
+ extra = Extra.allow
1683
+
1684
+ type: Literal["ZipfileDecoder"]
1685
+ parser: Union[GzipParser, JsonParser, JsonLineParser, CsvParser] = Field(
1686
+ ...,
1687
+ description="Parser to parse the decompressed data from the zipfile(s).",
1688
+ title="Parser",
1689
+ )
1690
+
1691
+
1683
1692
  class CompositeRawDecoder(BaseModel):
1684
1693
  type: Literal["CompositeRawDecoder"]
1685
1694
  parser: Union[GzipParser, JsonParser, JsonLineParser, CsvParser]
@@ -1886,7 +1895,7 @@ class SessionTokenAuthenticator(BaseModel):
1886
1895
  description="Authentication method to use for requests sent to the API, specifying how to inject the session token.",
1887
1896
  title="Data Request Authentication",
1888
1897
  )
1889
- decoder: Optional[Union[JsonDecoder, XmlDecoder]] = Field(
1898
+ decoder: Optional[Union[JsonDecoder, XmlDecoder, CompositeRawDecoder]] = Field(
1890
1899
  None, description="Component used to decode the response.", title="Decoder"
1891
1900
  )
1892
1901
  parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters")
@@ -2092,6 +2101,7 @@ class SimpleRetriever(BaseModel):
2092
2101
  XmlDecoder,
2093
2102
  GzipJsonDecoder,
2094
2103
  CompositeRawDecoder,
2104
+ ZipfileDecoder,
2095
2105
  ]
2096
2106
  ] = Field(
2097
2107
  None,
@@ -2168,6 +2178,8 @@ class AsyncRetriever(BaseModel):
2168
2178
  IterableDecoder,
2169
2179
  XmlDecoder,
2170
2180
  GzipJsonDecoder,
2181
+ CompositeRawDecoder,
2182
+ ZipfileDecoder,
2171
2183
  ]
2172
2184
  ] = Field(
2173
2185
  None,
@@ -2182,6 +2194,8 @@ class AsyncRetriever(BaseModel):
2182
2194
  IterableDecoder,
2183
2195
  XmlDecoder,
2184
2196
  GzipJsonDecoder,
2197
+ CompositeRawDecoder,
2198
+ ZipfileDecoder,
2185
2199
  ]
2186
2200
  ] = Field(
2187
2201
  None,
@@ -0,0 +1,143 @@
1
+ """Contains functions to compile custom code from text."""
2
+
3
+ import hashlib
4
+ import os
5
+ import sys
6
+ from collections.abc import Mapping
7
+ from types import ModuleType
8
+ from typing import Any, cast
9
+
10
+ from typing_extensions import Literal
11
+
12
+ ChecksumType = Literal["md5", "sha256"]
13
+ CHECKSUM_FUNCTIONS = {
14
+ "md5": hashlib.md5,
15
+ "sha256": hashlib.sha256,
16
+ }
17
+ COMPONENTS_MODULE_NAME = "components"
18
+ SDM_COMPONENTS_MODULE_NAME = "source_declarative_manifest.components"
19
+ INJECTED_MANIFEST = "__injected_declarative_manifest"
20
+ INJECTED_COMPONENTS_PY = "__injected_components_py"
21
+ INJECTED_COMPONENTS_PY_CHECKSUMS = "__injected_components_py_checksums"
22
+ ENV_VAR_ALLOW_CUSTOM_CODE = "AIRBYTE_ALLOW_CUSTOM_CODE"
23
+
24
+
25
+ class AirbyteCodeTamperedError(Exception):
26
+ """Raised when the connector's components module does not match its checksum.
27
+
28
+ This is a fatal error, as it can be a sign of code tampering.
29
+ """
30
+
31
+
32
+ class AirbyteCustomCodeNotPermittedError(Exception):
33
+ """Raised when custom code is attempted to be run in an environment that does not support it."""
34
+
35
+ def __init__(self) -> None:
36
+ super().__init__(
37
+ "Custom connector code is not permitted in this environment. "
38
+ "If you need to run custom code, please ask your administrator to set the `AIRBYTE_ALLOW_CUSTOM_CODE` "
39
+ "environment variable to 'true' in your Airbyte environment. "
40
+ "If you see this message in Airbyte Cloud, your workspace does not allow executing "
41
+ "custom connector code."
42
+ )
43
+
44
+
45
+ def _hash_text(input_text: str, hash_type: str = "md5") -> str:
46
+ """Return the hash of the input text using the specified hash type."""
47
+ if not input_text:
48
+ raise ValueError("Input text cannot be empty.")
49
+
50
+ hash_object = CHECKSUM_FUNCTIONS[hash_type]()
51
+ hash_object.update(input_text.encode())
52
+ return hash_object.hexdigest()
53
+
54
+
55
+ def custom_code_execution_permitted() -> bool:
56
+ """Return `True` if custom code execution is permitted, otherwise `False`.
57
+
58
+ Custom code execution is permitted if the `AIRBYTE_ALLOW_CUSTOM_CODE` environment variable is set to 'true'.
59
+ """
60
+ return os.environ.get(ENV_VAR_ALLOW_CUSTOM_CODE, "").lower() == "true"
61
+
62
+
63
+ def validate_python_code(
64
+ code_text: str,
65
+ checksums: dict[str, str] | None,
66
+ ) -> None:
67
+ """Validate the provided Python code text against the provided checksums.
68
+
69
+ Currently we fail if no checksums are provided, although this may change in the future.
70
+ """
71
+ if not checksums:
72
+ raise ValueError(f"A checksum is required to validate the code. Received: {checksums}")
73
+
74
+ for checksum_type, checksum in checksums.items():
75
+ if checksum_type not in CHECKSUM_FUNCTIONS:
76
+ raise ValueError(
77
+ f"Unsupported checksum type: {checksum_type}. Supported checksum types are: {CHECKSUM_FUNCTIONS.keys()}"
78
+ )
79
+
80
+ if _hash_text(code_text, checksum_type) != checksum:
81
+ raise AirbyteCodeTamperedError(f"{checksum_type} checksum does not match.")
82
+
83
+
84
+ def get_registered_components_module(
85
+ config: Mapping[str, Any] | None,
86
+ ) -> ModuleType | None:
87
+ """Get a components module object based on the provided config.
88
+
89
+ If custom python components is provided, this will be loaded. Otherwise, we will
90
+ attempt to load from the `components` module already imported/registered in sys.modules.
91
+
92
+ If custom `components.py` text is provided in config, it will be registered with sys.modules
93
+ so that it can be later imported by manifest declarations which reference the provided classes.
94
+
95
+ Returns `None` if no components is provided and the `components` module is not found.
96
+ """
97
+ if config and INJECTED_COMPONENTS_PY in config:
98
+ if not custom_code_execution_permitted():
99
+ raise AirbyteCustomCodeNotPermittedError
100
+
101
+ # Create a new module object and execute the provided Python code text within it
102
+ python_text: str = config[INJECTED_COMPONENTS_PY]
103
+ return register_components_module_from_string(
104
+ components_py_text=python_text,
105
+ checksums=config.get(INJECTED_COMPONENTS_PY_CHECKSUMS, None),
106
+ )
107
+
108
+ # Check for `components` or `source_declarative_manifest.components`.
109
+ if SDM_COMPONENTS_MODULE_NAME in sys.modules:
110
+ return cast(ModuleType, sys.modules.get(SDM_COMPONENTS_MODULE_NAME))
111
+
112
+ if COMPONENTS_MODULE_NAME in sys.modules:
113
+ return cast(ModuleType, sys.modules.get(COMPONENTS_MODULE_NAME))
114
+
115
+ # Could not find module 'components' in `sys.modules`
116
+ # and INJECTED_COMPONENTS_PY was not provided in config.
117
+ return None
118
+
119
+
120
+ def register_components_module_from_string(
121
+ components_py_text: str,
122
+ checksums: dict[str, Any] | None,
123
+ ) -> ModuleType:
124
+ """Load and return the components module from a provided string containing the python code."""
125
+ # First validate the code
126
+ validate_python_code(
127
+ code_text=components_py_text,
128
+ checksums=checksums,
129
+ )
130
+
131
+ # Create a new module object
132
+ components_module = ModuleType(name=COMPONENTS_MODULE_NAME)
133
+
134
+ # Execute the module text in the module's namespace
135
+ exec(components_py_text, components_module.__dict__)
136
+
137
+ # Register the module in `sys.modules`` so it can be imported as
138
+ # `source_declarative_manifest.components` and/or `components`.
139
+ sys.modules[SDM_COMPONENTS_MODULE_NAME] = components_module
140
+ sys.modules[COMPONENTS_MODULE_NAME] = components_module
141
+
142
+ # Now you can import and use the module
143
+ return components_module
@@ -8,6 +8,7 @@ import datetime
8
8
  import importlib
9
9
  import inspect
10
10
  import re
11
+ import sys
11
12
  from functools import partial
12
13
  from typing import (
13
14
  Any,
@@ -66,6 +67,7 @@ from airbyte_cdk.sources.declarative.decoders import (
66
67
  JsonlDecoder,
67
68
  PaginationDecoderDecorator,
68
69
  XmlDecoder,
70
+ ZipfileDecoder,
69
71
  )
70
72
  from airbyte_cdk.sources.declarative.decoders.composite_raw_decoder import (
71
73
  CompositeRawDecoder,
@@ -359,6 +361,13 @@ from airbyte_cdk.sources.declarative.models.declarative_component_schema import
359
361
  from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
360
362
  XmlDecoder as XmlDecoderModel,
361
363
  )
364
+ from airbyte_cdk.sources.declarative.models.declarative_component_schema import (
365
+ ZipfileDecoder as ZipfileDecoderModel,
366
+ )
367
+ from airbyte_cdk.sources.declarative.parsers.custom_code_compiler import (
368
+ COMPONENTS_MODULE_NAME,
369
+ SDM_COMPONENTS_MODULE_NAME,
370
+ )
362
371
  from airbyte_cdk.sources.declarative.partition_routers import (
363
372
  CartesianProductStreamSlicer,
364
373
  ListPartitionRouter,
@@ -578,6 +587,7 @@ class ModelToComponentFactory:
578
587
  ConfigComponentsResolverModel: self.create_config_components_resolver,
579
588
  StreamConfigModel: self.create_stream_config,
580
589
  ComponentMappingDefinitionModel: self.create_components_mapping_definition,
590
+ ZipfileDecoderModel: self.create_zipfile_decoder,
581
591
  }
582
592
 
583
593
  # Needed for the case where we need to perform a second parse on the fields of a custom component
@@ -1097,7 +1107,6 @@ class ModelToComponentFactory:
1097
1107
  :param config: The custom defined connector config
1098
1108
  :return: The declarative component built from the Pydantic model to be used at runtime
1099
1109
  """
1100
-
1101
1110
  custom_component_class = self._get_class_from_fully_qualified_class_name(model.class_name)
1102
1111
  component_fields = get_type_hints(custom_component_class)
1103
1112
  model_args = model.dict()
@@ -1151,14 +1160,38 @@ class ModelToComponentFactory:
1151
1160
  return custom_component_class(**kwargs)
1152
1161
 
1153
1162
  @staticmethod
1154
- def _get_class_from_fully_qualified_class_name(full_qualified_class_name: str) -> Any:
1163
+ def _get_class_from_fully_qualified_class_name(
1164
+ full_qualified_class_name: str,
1165
+ ) -> Any:
1166
+ """Get a class from its fully qualified name.
1167
+
1168
+ If a custom components module is needed, we assume it is already registered - probably
1169
+ as `source_declarative_manifest.components` or `components`.
1170
+
1171
+ Args:
1172
+ full_qualified_class_name (str): The fully qualified name of the class (e.g., "module.ClassName").
1173
+
1174
+ Returns:
1175
+ Any: The class object.
1176
+
1177
+ Raises:
1178
+ ValueError: If the class cannot be loaded.
1179
+ """
1155
1180
  split = full_qualified_class_name.split(".")
1156
- module = ".".join(split[:-1])
1181
+ module_name_full = ".".join(split[:-1])
1157
1182
  class_name = split[-1]
1183
+
1184
+ try:
1185
+ module_ref = importlib.import_module(module_name_full)
1186
+ except ModuleNotFoundError as e:
1187
+ raise ValueError(f"Could not load module `{module_name_full}`.") from e
1188
+
1158
1189
  try:
1159
- return getattr(importlib.import_module(module), class_name)
1160
- except AttributeError:
1161
- raise ValueError(f"Could not load class {full_qualified_class_name}.")
1190
+ return getattr(module_ref, class_name)
1191
+ except AttributeError as e:
1192
+ raise ValueError(
1193
+ f"Could not load class `{class_name}` from module `{module_name_full}`.",
1194
+ ) from e
1162
1195
 
1163
1196
  @staticmethod
1164
1197
  def _derive_component_type_from_type_hints(field_type: Any) -> Optional[str]:
@@ -1820,6 +1853,12 @@ class ModelToComponentFactory:
1820
1853
  ) -> GzipJsonDecoder:
1821
1854
  return GzipJsonDecoder(parameters={}, encoding=model.encoding)
1822
1855
 
1856
+ def create_zipfile_decoder(
1857
+ self, model: ZipfileDecoderModel, config: Config, **kwargs: Any
1858
+ ) -> ZipfileDecoder:
1859
+ parser = self._create_component_from_model(model=model.parser, config=config)
1860
+ return ZipfileDecoder(parser=parser)
1861
+
1823
1862
  def create_gzip_parser(
1824
1863
  self, model: GzipParserModel, config: Config, **kwargs: Any
1825
1864
  ) -> GzipParser:
@@ -4,7 +4,6 @@
4
4
  import importlib.util
5
5
  from pathlib import Path
6
6
  from types import ModuleType
7
- from typing import Optional
8
7
 
9
8
  import pytest
10
9
 
@@ -30,7 +29,7 @@ def connector_dir(request: pytest.FixtureRequest) -> Path:
30
29
 
31
30
 
32
31
  @pytest.fixture(scope="session")
33
- def components_module(connector_dir: Path) -> Optional[ModuleType]:
32
+ def components_module(connector_dir: Path) -> ModuleType | None:
34
33
  """Load and return the components module from the connector directory.
35
34
 
36
35
  This assumes the components module is located at <connector_dir>/components.py.
@@ -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.21.1dev0" # Version will be calculated dynamically.
26
+ version = "6.23.0" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false
@@ -53,7 +53,7 @@ requests = "*"
53
53
  requests_cache = "*"
54
54
  wcmatch = "10.0"
55
55
  # Extras depedencies
56
- avro = { version = "~1.11.2", optional = true }
56
+ avro = { version = ">=1.11.2,<1.13.0", optional = true }
57
57
  cohere = { version = "4.21", optional = true }
58
58
  fastavro = { version = "~1.8.0", optional = true }
59
59
  langchain = { version = "0.1.16", optional = true }
@@ -79,7 +79,7 @@ pytz = "2024.2"
79
79
  orjson = "^3.10.7"
80
80
  serpyco-rs = "^1.10.2"
81
81
  sqlalchemy = {version = "^2.0,!=2.0.36", optional = true }
82
- xmltodict = "^0.13.0"
82
+ xmltodict = ">=0.13,<0.15"
83
83
  Unidecode = "^1.3"
84
84
 
85
85
  [tool.poetry.group.dev.dependencies]
@@ -115,16 +115,12 @@ source-declarative-manifest = "airbyte_cdk.cli.source_declarative_manifest:run"
115
115
  [tool.isort]
116
116
  skip = ["__init__.py"] # TODO: Remove after this is fixed: https://github.com/airbytehq/airbyte-python-cdk/issues/12
117
117
 
118
- [tool.ruff]
119
- target-version = "py310"
120
- line-length = 100
121
-
122
- [tool.ruff.lint]
123
- select = ["I"]
118
+ # Ruff configuration moved to ruff.toml
124
119
 
125
120
  [tool.poe.tasks]
126
121
  # Installation
127
122
  install = { shell = "poetry install --all-extras" }
123
+ lock = { shell = "poetry lock --no-update" }
128
124
 
129
125
  # Build tasks
130
126
  assemble = {cmd = "bin/generate-component-manifest-dagger.sh", help = "Generate component manifest files."}