airbyte-cdk 6.48.3__tar.gz → 6.48.4__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 (416) hide show
  1. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/PKG-INFO +2 -1
  2. airbyte_cdk-6.48.4/airbyte_cdk/cli/airbyte_cdk/_secrets.py +424 -0
  3. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/airbyte_cdk/_util.py +26 -0
  4. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/pyproject.toml +2 -1
  5. airbyte_cdk-6.48.3/airbyte_cdk/cli/airbyte_cdk/_secrets.py +0 -150
  6. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/LICENSE.txt +0 -0
  7. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/LICENSE_SHORT +0 -0
  8. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/README.md +0 -0
  9. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/__init__.py +0 -0
  10. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/__init__.py +0 -0
  11. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/airbyte_cdk/__init__.py +0 -0
  12. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/airbyte_cdk/_connector.py +0 -0
  13. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/airbyte_cdk/_image.py +0 -0
  14. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/airbyte_cdk/_manifest.py +0 -0
  15. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/airbyte_cdk/_version.py +0 -0
  16. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/source_declarative_manifest/__init__.py +0 -0
  17. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/source_declarative_manifest/_run.py +0 -0
  18. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/cli/source_declarative_manifest/spec.json +0 -0
  19. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/config_observation.py +0 -0
  20. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector.py +0 -0
  21. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/README.md +0 -0
  22. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/__init__.py +0 -0
  23. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/connector_builder_handler.py +0 -0
  24. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/main.py +0 -0
  25. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/models.py +0 -0
  26. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/test_reader/__init__.py +0 -0
  27. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/test_reader/helpers.py +0 -0
  28. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/test_reader/message_grouper.py +0 -0
  29. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/test_reader/reader.py +0 -0
  30. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/connector_builder/test_reader/types.py +0 -0
  31. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/__init__.py +0 -0
  32. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/destination.py +0 -0
  33. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/README.md +0 -0
  34. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/__init__.py +0 -0
  35. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/config.py +0 -0
  36. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/document_processor.py +0 -0
  37. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/embedder.py +0 -0
  38. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/indexer.py +0 -0
  39. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/test_utils.py +0 -0
  40. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/utils.py +0 -0
  41. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/destinations/vector_db_based/writer.py +0 -0
  42. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/entrypoint.py +0 -0
  43. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/exception_handler.py +0 -0
  44. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/logger.py +0 -0
  45. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/README.md +0 -0
  46. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/__init__.py +0 -0
  47. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/exceptions.py +0 -0
  48. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/manifest_migration.py +0 -0
  49. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migration_handler.py +0 -0
  50. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migrations/__init__.py +0 -0
  51. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migrations/http_requester_path_to_url.py +0 -0
  52. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migrations/http_requester_request_body_json_data_to_request_body.py +0 -0
  53. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migrations/http_requester_url_base_to_url.py +0 -0
  54. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migrations/registry.yaml +0 -0
  55. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/manifest_migrations/migrations_registry.py +0 -0
  56. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/models/__init__.py +0 -0
  57. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/models/airbyte_protocol.py +0 -0
  58. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/models/airbyte_protocol_serializers.py +0 -0
  59. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/models/connector_metadata.py +0 -0
  60. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/models/well_known_types.py +0 -0
  61. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/py.typed +0 -0
  62. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/__init__.py +0 -0
  63. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/abstract_source.py +0 -0
  64. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/__init__.py +0 -0
  65. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/concurrent_read_processor.py +0 -0
  66. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/concurrent_source.py +0 -0
  67. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/concurrent_source_adapter.py +0 -0
  68. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/partition_generation_completed_sentinel.py +0 -0
  69. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/stream_thread_exception.py +0 -0
  70. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/concurrent_source/thread_pool_manager.py +0 -0
  71. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/config.py +0 -0
  72. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/connector_state_manager.py +0 -0
  73. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/__init__.py +0 -0
  74. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/__init__.py +0 -0
  75. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/job.py +0 -0
  76. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/job_orchestrator.py +0 -0
  77. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/job_tracker.py +0 -0
  78. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/repository.py +0 -0
  79. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/status.py +0 -0
  80. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/async_job/timer.py +0 -0
  81. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/__init__.py +0 -0
  82. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/declarative_authenticator.py +0 -0
  83. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/jwt.py +0 -0
  84. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/oauth.py +0 -0
  85. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/selective_authenticator.py +0 -0
  86. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/token.py +0 -0
  87. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/auth/token_provider.py +0 -0
  88. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/checks/__init__.py +0 -0
  89. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/checks/check_dynamic_stream.py +0 -0
  90. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/checks/check_stream.py +0 -0
  91. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/checks/connection_checker.py +0 -0
  92. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/concurrency_level/__init__.py +0 -0
  93. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/concurrency_level/concurrency_level.py +0 -0
  94. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/concurrent_declarative_source.py +0 -0
  95. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/datetime/__init__.py +0 -0
  96. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/datetime/datetime_parser.py +0 -0
  97. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/datetime/min_max_datetime.py +0 -0
  98. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +0 -0
  99. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/declarative_source.py +0 -0
  100. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/declarative_stream.py +0 -0
  101. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/__init__.py +0 -0
  102. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/composite_raw_decoder.py +0 -0
  103. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/decoder.py +0 -0
  104. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/decoder_parser.py +0 -0
  105. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/json_decoder.py +0 -0
  106. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/noop_decoder.py +0 -0
  107. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/pagination_decoder_decorator.py +0 -0
  108. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/xml_decoder.py +0 -0
  109. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/decoders/zipfile_decoder.py +0 -0
  110. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/exceptions.py +0 -0
  111. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/__init__.py +0 -0
  112. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +0 -0
  113. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/http_selector.py +0 -0
  114. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/record_extractor.py +0 -0
  115. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/record_filter.py +0 -0
  116. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/record_selector.py +0 -0
  117. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/response_to_file_extractor.py +0 -0
  118. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/extractors/type_transformer.py +0 -0
  119. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/__init__.py +0 -0
  120. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py +0 -0
  121. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/datetime_based_cursor.py +0 -0
  122. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/declarative_cursor.py +0 -0
  123. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py +0 -0
  124. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/per_partition_cursor.py +0 -0
  125. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/per_partition_with_global.py +0 -0
  126. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/incremental/resumable_full_refresh_cursor.py +0 -0
  127. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/__init__.py +0 -0
  128. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/filters.py +0 -0
  129. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_boolean.py +0 -0
  130. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_mapping.py +0 -0
  131. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_nested_mapping.py +0 -0
  132. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/interpolated_string.py +0 -0
  133. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/interpolation.py +0 -0
  134. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/jinja.py +0 -0
  135. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/interpolation/macros.py +0 -0
  136. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/manifest_declarative_source.py +0 -0
  137. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/migrations/__init__.py +0 -0
  138. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/migrations/legacy_to_per_partition_state_migration.py +0 -0
  139. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/migrations/state_migration.py +0 -0
  140. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/models/__init__.py +0 -0
  141. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py +0 -0
  142. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +0 -0
  143. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/__init__.py +0 -0
  144. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/custom_code_compiler.py +0 -0
  145. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/custom_exceptions.py +0 -0
  146. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/manifest_component_transformer.py +0 -0
  147. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/manifest_normalizer.py +0 -0
  148. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/manifest_reference_resolver.py +0 -0
  149. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +0 -0
  150. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/__init__.py +0 -0
  151. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py +0 -0
  152. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/cartesian_product_stream_slicer.py +0 -0
  153. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/grouping_partition_router.py +0 -0
  154. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/list_partition_router.py +0 -0
  155. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/partition_router.py +0 -0
  156. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py +0 -0
  157. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/partition_routers/substream_partition_router.py +0 -0
  158. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/README.md +0 -0
  159. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/__init__.py +0 -0
  160. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/__init__.py +0 -0
  161. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/__init__.py +0 -0
  162. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/constant_backoff_strategy.py +0 -0
  163. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/exponential_backoff_strategy.py +0 -0
  164. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/header_helper.py +0 -0
  165. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_time_from_header_backoff_strategy.py +0 -0
  166. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategies/wait_until_time_from_header_backoff_strategy.py +0 -0
  167. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/backoff_strategy.py +0 -0
  168. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/composite_error_handler.py +0 -0
  169. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_error_handler.py +0 -0
  170. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/default_http_response_filter.py +0 -0
  171. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/error_handler.py +0 -0
  172. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/error_handlers/http_response_filter.py +0 -0
  173. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/http_job_repository.py +0 -0
  174. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/http_requester.py +0 -0
  175. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +0 -0
  176. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +0 -0
  177. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/no_pagination.py +0 -0
  178. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +0 -0
  179. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/__init__.py +0 -0
  180. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/cursor_pagination_strategy.py +0 -0
  181. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/offset_increment.py +0 -0
  182. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/page_increment.py +0 -0
  183. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/pagination_strategy.py +0 -0
  184. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/paginators/strategies/stop_condition.py +0 -0
  185. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/__init__.py +0 -0
  186. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/properties_from_endpoint.py +0 -0
  187. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/property_chunking.py +0 -0
  188. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/query_properties.py +0 -0
  189. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/__init__.py +0 -0
  190. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/group_by_key.py +0 -0
  191. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/query_properties/strategies/merge_strategy.py +0 -0
  192. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_option.py +0 -0
  193. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/__init__.py +0 -0
  194. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/datetime_based_request_options_provider.py +0 -0
  195. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/default_request_options_provider.py +0 -0
  196. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_nested_request_input_provider.py +0 -0
  197. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_input_provider.py +0 -0
  198. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/interpolated_request_options_provider.py +0 -0
  199. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_options/request_options_provider.py +0 -0
  200. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/request_path.py +0 -0
  201. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/requesters/requester.py +0 -0
  202. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/resolvers/__init__.py +0 -0
  203. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/resolvers/components_resolver.py +0 -0
  204. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/resolvers/config_components_resolver.py +0 -0
  205. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/resolvers/http_components_resolver.py +0 -0
  206. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/__init__.py +0 -0
  207. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/async_retriever.py +0 -0
  208. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/__init__.py +0 -0
  209. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/connector_builder_file_uploader.py +0 -0
  210. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/default_file_uploader.py +0 -0
  211. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_uploader.py +0 -0
  212. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/file_writer.py +0 -0
  213. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/local_file_system_file_writer.py +0 -0
  214. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/file_uploader/noop_file_writer.py +0 -0
  215. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/retriever.py +0 -0
  216. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +0 -0
  217. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/schema/__init__.py +0 -0
  218. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/schema/default_schema_loader.py +0 -0
  219. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/schema/dynamic_schema_loader.py +0 -0
  220. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/schema/inline_schema_loader.py +0 -0
  221. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/schema/json_file_schema_loader.py +0 -0
  222. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/schema/schema_loader.py +0 -0
  223. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/spec/__init__.py +0 -0
  224. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/spec/spec.py +0 -0
  225. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/stream_slicers/__init__.py +0 -0
  226. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py +0 -0
  227. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/stream_slicers/stream_slicer.py +0 -0
  228. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/__init__.py +0 -0
  229. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/add_fields.py +0 -0
  230. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/dpath_flatten_fields.py +0 -0
  231. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/flatten_fields.py +0 -0
  232. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/keys_replace_transformation.py +0 -0
  233. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/keys_to_lower_transformation.py +0 -0
  234. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/keys_to_snake_transformation.py +0 -0
  235. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/remove_fields.py +0 -0
  236. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/transformations/transformation.py +0 -0
  237. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/types.py +0 -0
  238. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/declarative/yaml_declarative_source.py +0 -0
  239. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/README.md +0 -0
  240. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/__init__.py +0 -0
  241. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/availability_strategy/__init__.py +0 -0
  242. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/availability_strategy/abstract_file_based_availability_strategy.py +0 -0
  243. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/availability_strategy/default_file_based_availability_strategy.py +0 -0
  244. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/__init__.py +0 -0
  245. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/abstract_file_based_spec.py +0 -0
  246. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/avro_format.py +0 -0
  247. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/csv_format.py +0 -0
  248. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/excel_format.py +0 -0
  249. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/file_based_stream_config.py +0 -0
  250. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/jsonl_format.py +0 -0
  251. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/parquet_format.py +0 -0
  252. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/unstructured_format.py +0 -0
  253. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/config/validate_config_transfer_modes.py +0 -0
  254. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/discovery_policy/__init__.py +0 -0
  255. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/discovery_policy/abstract_discovery_policy.py +0 -0
  256. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/discovery_policy/default_discovery_policy.py +0 -0
  257. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/exceptions.py +0 -0
  258. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_based_source.py +0 -0
  259. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_based_stream_permissions_reader.py +0 -0
  260. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_based_stream_reader.py +0 -0
  261. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_record_data.py +0 -0
  262. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/__init__.py +0 -0
  263. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/avro_parser.py +0 -0
  264. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/csv_parser.py +0 -0
  265. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/excel_parser.py +0 -0
  266. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/file_transfer.py +0 -0
  267. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/file_type_parser.py +0 -0
  268. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/jsonl_parser.py +0 -0
  269. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/parquet_parser.py +0 -0
  270. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/file_types/unstructured_parser.py +0 -0
  271. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/remote_file.py +0 -0
  272. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/schema_helpers.py +0 -0
  273. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/schema_validation_policies/__init__.py +0 -0
  274. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/schema_validation_policies/abstract_schema_validation_policy.py +0 -0
  275. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/schema_validation_policies/default_schema_validation_policies.py +0 -0
  276. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/__init__.py +0 -0
  277. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/abstract_file_based_stream.py +0 -0
  278. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/concurrent/__init__.py +0 -0
  279. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/concurrent/adapters.py +0 -0
  280. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/__init__.py +0 -0
  281. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/abstract_concurrent_file_based_cursor.py +0 -0
  282. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_concurrent_cursor.py +0 -0
  283. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/concurrent/cursor/file_based_final_state_cursor.py +0 -0
  284. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/cursor/__init__.py +0 -0
  285. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/cursor/abstract_file_based_cursor.py +0 -0
  286. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/cursor/default_file_based_cursor.py +0 -0
  287. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/default_file_based_stream.py +0 -0
  288. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/identities_stream.py +0 -0
  289. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/stream/permissions_file_based_stream.py +0 -0
  290. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/file_based/types.py +0 -0
  291. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/http_config.py +0 -0
  292. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/http_logger.py +0 -0
  293. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/message/__init__.py +0 -0
  294. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/message/repository.py +0 -0
  295. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/source.py +0 -0
  296. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/specs/transfer_modes.py +0 -0
  297. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/__init__.py +0 -0
  298. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/availability_strategy.py +0 -0
  299. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/call_rate.py +0 -0
  300. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/checkpoint/__init__.py +0 -0
  301. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/checkpoint/checkpoint_reader.py +0 -0
  302. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/checkpoint/cursor.py +0 -0
  303. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/checkpoint/per_partition_key_serializer.py +0 -0
  304. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/checkpoint/resumable_full_refresh_cursor.py +0 -0
  305. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/checkpoint/substream_resumable_full_refresh_cursor.py +0 -0
  306. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/README.md +0 -0
  307. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/__init__.py +0 -0
  308. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/abstract_stream.py +0 -0
  309. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/abstract_stream_facade.py +0 -0
  310. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/adapters.py +0 -0
  311. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/availability_strategy.py +0 -0
  312. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/clamping.py +0 -0
  313. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/cursor.py +0 -0
  314. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/cursor_types.py +0 -0
  315. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/default_stream.py +0 -0
  316. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/exceptions.py +0 -0
  317. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/helpers.py +0 -0
  318. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partition_enqueuer.py +0 -0
  319. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partition_reader.py +0 -0
  320. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partitions/__init__.py +0 -0
  321. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partitions/partition.py +0 -0
  322. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partitions/partition_generator.py +0 -0
  323. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partitions/stream_slicer.py +0 -0
  324. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/partitions/types.py +0 -0
  325. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/state_converters/__init__.py +0 -0
  326. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/state_converters/abstract_stream_state_converter.py +0 -0
  327. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/state_converters/datetime_stream_state_converter.py +0 -0
  328. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/concurrent/state_converters/incrementing_count_stream_state_converter.py +0 -0
  329. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/core.py +0 -0
  330. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/__init__.py +0 -0
  331. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/availability_strategy.py +0 -0
  332. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/__init__.py +0 -0
  333. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/backoff_strategy.py +0 -0
  334. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/default_backoff_strategy.py +0 -0
  335. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/default_error_mapping.py +0 -0
  336. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/error_handler.py +0 -0
  337. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/error_message_parser.py +0 -0
  338. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/http_status_error_handler.py +0 -0
  339. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/json_error_message_parser.py +0 -0
  340. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/error_handlers/response_models.py +0 -0
  341. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/exceptions.py +0 -0
  342. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/http.py +0 -0
  343. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/http_client.py +0 -0
  344. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/rate_limiting.py +0 -0
  345. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/requests_native_auth/__init__.py +0 -0
  346. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_oauth.py +0 -0
  347. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/requests_native_auth/abstract_token.py +0 -0
  348. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/requests_native_auth/oauth.py +0 -0
  349. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/http/requests_native_auth/token.py +0 -0
  350. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/permissions/identities_stream.py +0 -0
  351. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/streams/utils/__init__.py +0 -0
  352. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/types.py +0 -0
  353. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/__init__.py +0 -0
  354. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/casing.py +0 -0
  355. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/files_directory.py +0 -0
  356. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/record_helper.py +0 -0
  357. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/schema_helpers.py +0 -0
  358. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/slice_logger.py +0 -0
  359. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/transform.py +0 -0
  360. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sources/utils/types.py +0 -0
  361. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/__init__.py +0 -0
  362. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/_util/__init__.py +0 -0
  363. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/_util/hashing.py +0 -0
  364. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/_util/name_normalizers.py +0 -0
  365. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/constants.py +0 -0
  366. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/exceptions.py +0 -0
  367. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/secrets.py +0 -0
  368. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/shared/__init__.py +0 -0
  369. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/shared/catalog_providers.py +0 -0
  370. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/shared/sql_processor.py +0 -0
  371. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/sql/types.py +0 -0
  372. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/__init__.py +0 -0
  373. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/catalog_builder.py +0 -0
  374. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/entrypoint_wrapper.py +0 -0
  375. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/mock_http/__init__.py +0 -0
  376. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/mock_http/matcher.py +0 -0
  377. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/mock_http/mocker.py +0 -0
  378. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/mock_http/request.py +0 -0
  379. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/mock_http/response.py +0 -0
  380. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/mock_http/response_builder.py +0 -0
  381. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/__init__.py +0 -0
  382. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/_job_runner.py +0 -0
  383. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/connector_base.py +0 -0
  384. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/declarative_sources.py +0 -0
  385. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/destination_base.py +0 -0
  386. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/models/__init__.py +0 -0
  387. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/models/scenario.py +0 -0
  388. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/pytest_hooks.py +0 -0
  389. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/source_base.py +0 -0
  390. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/test_resources.py +0 -0
  391. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/standard_tests/util.py +0 -0
  392. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/state_builder.py +0 -0
  393. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/utils/__init__.py +0 -0
  394. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/utils/data.py +0 -0
  395. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/utils/http_mocking.py +0 -0
  396. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/utils/manifest_only_fixtures.py +0 -0
  397. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/test/utils/reading.py +0 -0
  398. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/__init__.py +0 -0
  399. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/airbyte_secrets_utils.py +0 -0
  400. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/analytics_message.py +0 -0
  401. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/constants.py +0 -0
  402. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/datetime_format_inferrer.py +0 -0
  403. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/datetime_helpers.py +0 -0
  404. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/docker.py +0 -0
  405. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/docker_image_templates.py +0 -0
  406. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/event_timing.py +0 -0
  407. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/is_cloud_environment.py +0 -0
  408. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/mapping_helpers.py +0 -0
  409. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/message_utils.py +0 -0
  410. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/oneof_option_config.py +0 -0
  411. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/print_buffer.py +0 -0
  412. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/schema_inferrer.py +0 -0
  413. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/slice_hasher.py +0 -0
  414. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/spec_schema_transformations.py +0 -0
  415. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/airbyte_cdk/utils/stream_status_utils.py +0 -0
  416. {airbyte_cdk-6.48.3 → airbyte_cdk-6.48.4}/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.48.3
3
+ Version: 6.48.4
4
4
  Summary: A framework for writing Airbyte Connectors.
5
5
  Home-page: https://airbyte.com
6
6
  License: MIT
@@ -66,6 +66,7 @@ Requires-Dist: pytz (==2024.2)
66
66
  Requires-Dist: rapidfuzz (>=3.10.1,<4.0.0)
67
67
  Requires-Dist: requests
68
68
  Requires-Dist: requests_cache
69
+ Requires-Dist: rich
69
70
  Requires-Dist: rich-click (>=1.8.8,<2.0.0)
70
71
  Requires-Dist: serpyco-rs (>=1.10.2,<2.0.0)
71
72
  Requires-Dist: sqlalchemy (>=2.0,<3.0,!=2.0.36) ; extra == "sql"
@@ -0,0 +1,424 @@
1
+ # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
+ """**Secret management commands.**
3
+
4
+ This module provides commands for managing secrets for Airbyte connectors.
5
+
6
+ **Usage:**
7
+
8
+ ```bash
9
+ # Fetch secrets
10
+ airbyte-cdk secrets fetch --connector-name source-github
11
+ airbyte-cdk secrets fetch --connector-directory /path/to/connector
12
+ airbyte-cdk secrets fetch # Run from within a connector directory
13
+
14
+ # List secrets (without fetching)
15
+ airbyte-cdk secrets list --connector-name source-github
16
+ airbyte-cdk secrets list --connector-directory /path/to/connector
17
+ ```
18
+
19
+ **Usage without pre-installing (stateless):**
20
+
21
+ ```bash
22
+ pipx run airbyte-cdk secrets fetch ...
23
+ uvx airbyte-cdk secrets fetch ...
24
+ ```
25
+
26
+ The command retrieves secrets from Google Secret Manager based on connector
27
+ labels and writes them to the connector's `secrets` directory.
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ import json
33
+ import logging
34
+ import os
35
+ from functools import lru_cache
36
+ from pathlib import Path
37
+ from typing import Any, cast
38
+
39
+ import requests
40
+ import rich_click as click
41
+ import yaml
42
+ from click import style
43
+ from rich.console import Console
44
+ from rich.table import Table
45
+
46
+ from airbyte_cdk.cli.airbyte_cdk._util import (
47
+ resolve_connector_name,
48
+ resolve_connector_name_and_directory,
49
+ )
50
+
51
+ AIRBYTE_INTERNAL_GCP_PROJECT = "dataline-integration-testing"
52
+ CONNECTOR_LABEL = "connector"
53
+ GLOBAL_MASK_KEYS_URL = "https://connectors.airbyte.com/files/registries/v0/specs_secrets_mask.yaml"
54
+
55
+ logger = logging.getLogger("airbyte-cdk.cli.secrets")
56
+
57
+ try:
58
+ from google.cloud import secretmanager_v1 as secretmanager
59
+ from google.cloud.secretmanager_v1 import Secret
60
+ except ImportError:
61
+ # If the package is not installed, we will raise an error in the CLI command.
62
+ secretmanager = None # type: ignore
63
+ Secret = None # type: ignore
64
+
65
+
66
+ @click.group(
67
+ name="secrets",
68
+ help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown) # type: ignore
69
+ )
70
+ def secrets_cli_group() -> None:
71
+ """Secret management commands."""
72
+ pass
73
+
74
+
75
+ @secrets_cli_group.command()
76
+ @click.option(
77
+ "--connector-name",
78
+ type=str,
79
+ help="Name of the connector to fetch secrets for. Ignored if --connector-directory is provided.",
80
+ )
81
+ @click.option(
82
+ "--connector-directory",
83
+ type=click.Path(exists=True, file_okay=False, path_type=Path),
84
+ help="Path to the connector directory.",
85
+ )
86
+ @click.option(
87
+ "--gcp-project-id",
88
+ type=str,
89
+ default=AIRBYTE_INTERNAL_GCP_PROJECT,
90
+ help=f"GCP project ID. Defaults to '{AIRBYTE_INTERNAL_GCP_PROJECT}'.",
91
+ )
92
+ @click.option(
93
+ "--print-ci-secrets-masks",
94
+ help="Print GitHub CI mask for secrets.",
95
+ type=bool,
96
+ is_flag=True,
97
+ default=False,
98
+ )
99
+ def fetch(
100
+ connector_name: str | None = None,
101
+ connector_directory: Path | None = None,
102
+ gcp_project_id: str = AIRBYTE_INTERNAL_GCP_PROJECT,
103
+ print_ci_secrets_masks: bool = False,
104
+ ) -> None:
105
+ """Fetch secrets for a connector from Google Secret Manager.
106
+
107
+ This command fetches secrets for a connector from Google Secret Manager and writes them
108
+ to the connector's secrets directory.
109
+
110
+ If no connector name or directory is provided, we will look within the current working
111
+ directory. If the current working directory is not a connector directory (e.g. starting
112
+ with 'source-') and no connector name or path is provided, the process will fail.
113
+
114
+ The `--print-ci-secrets-masks` option will print the GitHub CI mask for the secrets.
115
+ This is useful for masking secrets in CI logs.
116
+
117
+ WARNING: This action causes the secrets to be printed in clear text to `STDOUT`. For security
118
+ reasons, this function will only execute if the `CI` environment variable is set. Otherwise,
119
+ masks will not be printed.
120
+ """
121
+ click.echo("Fetching secrets...", err=True)
122
+
123
+ client = _get_gsm_secrets_client()
124
+ connector_name, connector_directory = resolve_connector_name_and_directory(
125
+ connector_name=connector_name,
126
+ connector_directory=connector_directory,
127
+ )
128
+ secrets_dir = _get_secrets_dir(
129
+ connector_directory=connector_directory,
130
+ connector_name=connector_name,
131
+ ensure_exists=True,
132
+ )
133
+ secrets = _fetch_secret_handles(
134
+ connector_name=connector_name,
135
+ gcp_project_id=gcp_project_id,
136
+ )
137
+ # Fetch and write secrets
138
+ secret_count = 0
139
+ for secret in secrets:
140
+ secret_file_path = _get_secret_filepath(
141
+ secrets_dir=secrets_dir,
142
+ secret=secret,
143
+ )
144
+ _write_secret_file(
145
+ secret=secret,
146
+ client=client,
147
+ file_path=secret_file_path,
148
+ )
149
+ click.echo(f"Secret written to: {secret_file_path.absolute()!s}", err=True)
150
+ secret_count += 1
151
+
152
+ if secret_count == 0:
153
+ click.echo(
154
+ f"No secrets found for connector: '{connector_name}'",
155
+ err=True,
156
+ )
157
+
158
+ if not print_ci_secrets_masks:
159
+ return
160
+
161
+ if not os.environ.get("CI", None):
162
+ click.echo(
163
+ "The `--print-ci-secrets-masks` option is only available in CI environments. "
164
+ "The `CI` env var is either not set or not set to a truthy value. "
165
+ "Skipping printing secret masks.",
166
+ err=True,
167
+ )
168
+ return
169
+
170
+ # Else print the CI mask
171
+ _print_ci_secrets_masks(
172
+ secrets_dir=secrets_dir,
173
+ )
174
+
175
+
176
+ @secrets_cli_group.command("list")
177
+ @click.option(
178
+ "--connector-name",
179
+ type=str,
180
+ help="Name of the connector to fetch secrets for. Ignored if --connector-directory is provided.",
181
+ )
182
+ @click.option(
183
+ "--connector-directory",
184
+ type=click.Path(exists=True, file_okay=False, path_type=Path),
185
+ help="Path to the connector directory.",
186
+ )
187
+ @click.option(
188
+ "--gcp-project-id",
189
+ type=str,
190
+ default=AIRBYTE_INTERNAL_GCP_PROJECT,
191
+ help=f"GCP project ID. Defaults to '{AIRBYTE_INTERNAL_GCP_PROJECT}'.",
192
+ )
193
+ def list_(
194
+ connector_name: str | None = None,
195
+ connector_directory: Path | None = None,
196
+ gcp_project_id: str = AIRBYTE_INTERNAL_GCP_PROJECT,
197
+ ) -> None:
198
+ """List secrets for a connector from Google Secret Manager.
199
+
200
+ This command fetches secrets for a connector from Google Secret Manager and prints
201
+ them as a table.
202
+
203
+ If no connector name or directory is provided, we will look within the current working
204
+ directory. If the current working directory is not a connector directory (e.g. starting
205
+ with 'source-') and no connector name or path is provided, the process will fail.
206
+ """
207
+ click.echo("Scanning secrets...", err=True)
208
+
209
+ connector_name = connector_name or resolve_connector_name(
210
+ connector_directory=connector_directory or Path().resolve().absolute(),
211
+ )
212
+ secrets: list[Secret] = _fetch_secret_handles( # type: ignore
213
+ connector_name=connector_name,
214
+ gcp_project_id=gcp_project_id,
215
+ )
216
+
217
+ if not secrets:
218
+ click.echo(
219
+ f"No secrets found for connector: '{connector_name}'",
220
+ err=True,
221
+ )
222
+ return
223
+ # print a rich table with the secrets
224
+ click.echo(
225
+ style(
226
+ f"Secrets for connector '{connector_name}' in project '{gcp_project_id}':",
227
+ fg="green",
228
+ )
229
+ )
230
+
231
+ console = Console()
232
+ table = Table(title=f"'{connector_name}' Secrets")
233
+ table.add_column("Name", justify="left", style="cyan", overflow="fold")
234
+ table.add_column("Labels", justify="left", style="magenta", overflow="fold")
235
+ table.add_column("Created", justify="left", style="blue", overflow="fold")
236
+ for secret in secrets:
237
+ full_secret_name = secret.name
238
+ secret_name = full_secret_name.split("/secrets/")[-1] # Removes project prefix
239
+ # E.g. https://console.cloud.google.com/security/secret-manager/secret/SECRET_SOURCE-SHOPIFY__CREDS/versions?hl=en&project=<gcp_project_id>
240
+ secret_url = f"https://console.cloud.google.com/security/secret-manager/secret/{secret_name}/versions?hl=en&project={gcp_project_id}"
241
+ table.add_row(
242
+ f"[link={secret_url}]{secret_name}[/link]",
243
+ "\n".join([f"{k}={v}" for k, v in secret.labels.items()]),
244
+ str(secret.create_time),
245
+ )
246
+
247
+ console.print(table)
248
+
249
+
250
+ def _fetch_secret_handles(
251
+ connector_name: str,
252
+ gcp_project_id: str = AIRBYTE_INTERNAL_GCP_PROJECT,
253
+ ) -> list["Secret"]: # type: ignore
254
+ """Fetch secrets from Google Secret Manager."""
255
+ if not secretmanager:
256
+ raise ImportError(
257
+ "google-cloud-secret-manager package is required for Secret Manager integration. "
258
+ "Install it with 'pip install airbyte-cdk[dev]' "
259
+ "or 'pip install google-cloud-secret-manager'."
260
+ )
261
+
262
+ client = _get_gsm_secrets_client()
263
+
264
+ # List all secrets with the connector label
265
+ parent = f"projects/{gcp_project_id}"
266
+ filter_string = f"labels.{CONNECTOR_LABEL}={connector_name}"
267
+ secrets = client.list_secrets(
268
+ request=secretmanager.ListSecretsRequest(
269
+ parent=parent,
270
+ filter=filter_string,
271
+ )
272
+ )
273
+ return [s for s in secrets]
274
+
275
+
276
+ def _write_secret_file(
277
+ secret: "Secret", # type: ignore
278
+ client: "secretmanager.SecretManagerServiceClient", # type: ignore
279
+ file_path: Path,
280
+ ) -> None:
281
+ version_name = f"{secret.name}/versions/latest"
282
+ response = client.access_secret_version(name=version_name)
283
+ file_path.write_text(response.payload.data.decode("UTF-8"))
284
+ file_path.chmod(0o600) # default to owner read/write only
285
+
286
+
287
+ def _get_secrets_dir(
288
+ connector_directory: Path,
289
+ connector_name: str,
290
+ ensure_exists: bool = True,
291
+ ) -> Path:
292
+ try:
293
+ connector_name, connector_directory = resolve_connector_name_and_directory(
294
+ connector_name=connector_name,
295
+ connector_directory=connector_directory,
296
+ )
297
+ except FileNotFoundError as e:
298
+ raise FileNotFoundError(
299
+ f"Could not find connector directory for '{connector_name}'. "
300
+ "Please provide the --connector-directory option with the path to the connector. "
301
+ "Note: This command requires either running from within a connector directory, "
302
+ "being in the airbyte monorepo, or explicitly providing the connector directory path."
303
+ ) from e
304
+ except ValueError as e:
305
+ raise ValueError(str(e))
306
+
307
+ secrets_dir = connector_directory / "secrets"
308
+ if ensure_exists:
309
+ secrets_dir.mkdir(parents=True, exist_ok=True)
310
+
311
+ gitignore_path = secrets_dir / ".gitignore"
312
+ if not gitignore_path.exists():
313
+ gitignore_path.write_text("*")
314
+
315
+ return secrets_dir
316
+
317
+
318
+ def _get_secret_filepath(
319
+ secrets_dir: Path,
320
+ secret: Secret, # type: ignore
321
+ ) -> Path:
322
+ """Get the file path for a secret based on its labels."""
323
+ if secret.labels and "filename" in secret.labels:
324
+ return secrets_dir / f"{secret.labels['filename']}.json"
325
+
326
+ return secrets_dir / "config.json" # Default filename
327
+
328
+
329
+ def _get_gsm_secrets_client() -> "secretmanager.SecretManagerServiceClient": # type: ignore
330
+ """Get the Google Secret Manager client."""
331
+ if not secretmanager:
332
+ raise ImportError(
333
+ "google-cloud-secret-manager package is required for Secret Manager integration. "
334
+ "Install it with 'pip install airbyte-cdk[dev]' "
335
+ "or 'pip install google-cloud-secret-manager'."
336
+ )
337
+
338
+ credentials_json = os.environ.get("GCP_GSM_CREDENTIALS")
339
+ if not credentials_json:
340
+ raise ValueError(
341
+ "No Google Cloud credentials found. "
342
+ "Please set the `GCP_GSM_CREDENTIALS` environment variable."
343
+ )
344
+
345
+ return cast(
346
+ "secretmanager.SecretManagerServiceClient",
347
+ secretmanager.SecretManagerServiceClient.from_service_account_info(
348
+ json.loads(credentials_json)
349
+ ),
350
+ )
351
+
352
+
353
+ def _print_ci_secrets_masks(
354
+ secrets_dir: Path,
355
+ ) -> None:
356
+ """Print GitHub CI mask for secrets.
357
+
358
+ https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#example-masking-an-environment-variable
359
+
360
+ The env var `CI` is set to a truthy value in GitHub Actions, so we can use it to
361
+ determine if we are in a CI environment. If not, we don't want to print the masks,
362
+ as it will cause the secrets to be printed in clear text to STDOUT.
363
+ """
364
+ if not os.environ.get("CI", None):
365
+ click.echo(
366
+ "The `--print-ci-secrets-masks` option is only available in CI environments. "
367
+ "The `CI` env var is either not set or not set to a truthy value. "
368
+ "Skipping printing secret masks.",
369
+ err=True,
370
+ )
371
+ return
372
+
373
+ for secret_file_path in secrets_dir.glob("*.json"):
374
+ config_dict = json.loads(secret_file_path.read_text())
375
+ _print_ci_secrets_masks_for_config(config=config_dict)
376
+
377
+
378
+ def _print_ci_secrets_masks_for_config(
379
+ config: dict[str, str] | list[Any] | Any,
380
+ ) -> None:
381
+ """Print GitHub CI mask for secrets config, navigating child nodes recursively."""
382
+ if isinstance(config, list):
383
+ for item in config:
384
+ _print_ci_secrets_masks_for_config(item)
385
+
386
+ if isinstance(config, dict):
387
+ for key, value in config.items():
388
+ if _is_secret_property(key):
389
+ logger.debug(f"Masking secret for config key: {key}")
390
+ print(f"::add-mask::{value!s}")
391
+ if isinstance(value, dict):
392
+ # For nested dicts, we also need to mask the json-stringified version
393
+ print(f"::add-mask::{json.dumps(value)!s}")
394
+
395
+ if isinstance(value, (dict, list)):
396
+ _print_ci_secrets_masks_for_config(config=value)
397
+
398
+
399
+ def _is_secret_property(property_name: str) -> bool:
400
+ """Check if the property name is in the list of properties to mask.
401
+
402
+ To avoid false negatives, we perform a case-insensitive check, and we include any property name
403
+ that contains a rule entry, even if it is not an exact match.
404
+
405
+ For example, if the rule entry is "password", we will also match "PASSWORD" and "my_password".
406
+ """
407
+ names_to_mask: list[str] = _get_spec_mask()
408
+ if any([mask.lower() in property_name.lower() for mask in names_to_mask]):
409
+ return True
410
+
411
+ return False
412
+
413
+
414
+ @lru_cache
415
+ def _get_spec_mask() -> list[str]:
416
+ """Get the list of properties to mask from the spec mask file."""
417
+ response = requests.get(GLOBAL_MASK_KEYS_URL, allow_redirects=True)
418
+ if not response.ok:
419
+ logger.error(f"Failed to fetch spec mask: {response.content.decode('utf-8')}")
420
+ try:
421
+ return cast(list[str], yaml.safe_load(response.content)["properties"])
422
+ except Exception as e:
423
+ logger.error(f"Failed to parse spec mask: {e}")
424
+ raise
@@ -41,3 +41,29 @@ def resolve_connector_name_and_directory(
41
41
  raise ValueError("Either connector_name or connector_directory must be provided.")
42
42
 
43
43
  return connector_name, connector_directory
44
+
45
+
46
+ def resolve_connector_name(
47
+ connector_directory: Path,
48
+ ) -> str:
49
+ """Resolve the connector name.
50
+
51
+ This function will resolve the connector name based on the provided connector directory.
52
+ If the current working directory is not a connector directory
53
+ (e.g. starting with 'source-'), the process will fail.
54
+
55
+ Raises:
56
+ FileNotFoundError: If the connector directory does not exist or cannot be found.
57
+ """
58
+ if not connector_directory:
59
+ raise FileNotFoundError(
60
+ "Connector directory does not exist or cannot be found. Please provide a valid "
61
+ "connector directory."
62
+ )
63
+ connector_name = connector_directory.absolute().name
64
+ if not connector_name.startswith("source-") and not connector_name.startswith("destination-"):
65
+ raise ValueError(
66
+ f"Connector directory '{connector_name}' does not look like a valid connector directory. "
67
+ f"Full path: {connector_directory.absolute()}"
68
+ )
69
+ return connector_name
@@ -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.48.3" # Version will be calculated dynamically.
26
+ version = "6.48.4" # Version will be calculated dynamically.
27
27
 
28
28
  [tool.poetry-dynamic-versioning]
29
29
  enable = false
@@ -55,6 +55,7 @@ PyYAML = "^6.0.1"
55
55
  rapidfuzz = "^3.10.1" # TODO: Remove if unused
56
56
  requests = "*"
57
57
  requests_cache = "*"
58
+ rich = "*" # Use whichever version meets other constraints
58
59
  rich-click = "^1.8.8"
59
60
  typing-extensions = "*" # Transitive dependency used directly in code
60
61
  wcmatch = "10.0"
@@ -1,150 +0,0 @@
1
- # Copyright (c) 2025 Airbyte, Inc., all rights reserved.
2
- """Secret management commands.
3
-
4
- This module provides commands for managing secrets for Airbyte connectors.
5
-
6
- Usage:
7
- airbyte-cdk secrets fetch --connector-name source-github
8
- airbyte-cdk secrets fetch --connector-directory /path/to/connector
9
- airbyte-cdk secrets fetch # Run from within a connector directory
10
-
11
- Usage without pre-installing (stateless):
12
- pipx run airbyte-cdk secrets fetch ...
13
- uvx airbyte-cdk secrets fetch ...
14
-
15
- The 'fetch' command retrieves secrets from Google Secret Manager based on connector
16
- labels and writes them to the connector's `secrets` directory.
17
- """
18
-
19
- import json
20
- import os
21
- from pathlib import Path
22
-
23
- import rich_click as click
24
-
25
- from airbyte_cdk.cli.airbyte_cdk._util import resolve_connector_name_and_directory
26
-
27
- AIRBYTE_INTERNAL_GCP_PROJECT = "dataline-integration-testing"
28
- CONNECTOR_LABEL = "connector"
29
-
30
-
31
- @click.group(
32
- name="secrets",
33
- help=__doc__.replace("\n", "\n\n"), # Render docstring as help text (markdown)
34
- )
35
- def secrets_cli_group() -> None:
36
- """Secret management commands."""
37
- pass
38
-
39
-
40
- @secrets_cli_group.command()
41
- @click.option(
42
- "--connector-name",
43
- type=str,
44
- help="Name of the connector to fetch secrets for. Ignored if --connector-directory is provided.",
45
- )
46
- @click.option(
47
- "--connector-directory",
48
- type=click.Path(exists=True, file_okay=False, path_type=Path),
49
- help="Path to the connector directory.",
50
- )
51
- @click.option(
52
- "--gcp-project-id",
53
- type=str,
54
- default=AIRBYTE_INTERNAL_GCP_PROJECT,
55
- help=f"GCP project ID. Defaults to '{AIRBYTE_INTERNAL_GCP_PROJECT}'.",
56
- )
57
- def fetch(
58
- connector_name: str | None = None,
59
- connector_directory: Path | None = None,
60
- gcp_project_id: str = AIRBYTE_INTERNAL_GCP_PROJECT,
61
- ) -> None:
62
- """Fetch secrets for a connector from Google Secret Manager.
63
-
64
- This command fetches secrets for a connector from Google Secret Manager and writes them
65
- to the connector's secrets directory.
66
-
67
- If no connector name or directory is provided, we will look within the current working
68
- directory. If the current working directory is not a connector directory (e.g. starting
69
- with 'source-') and no connector name or path is provided, the process will fail.
70
- """
71
- try:
72
- from google.cloud import secretmanager_v1 as secretmanager
73
- except ImportError:
74
- raise ImportError(
75
- "google-cloud-secret-manager package is required for Secret Manager integration. "
76
- "Install it with 'pip install airbyte-cdk[dev]' "
77
- "or 'pip install google-cloud-secret-manager'."
78
- )
79
-
80
- click.echo("Fetching secrets...")
81
-
82
- # Resolve connector name/directory
83
- try:
84
- connector_name, connector_directory = resolve_connector_name_and_directory(
85
- connector_name=connector_name,
86
- connector_directory=connector_directory,
87
- )
88
- except FileNotFoundError as e:
89
- raise FileNotFoundError(
90
- f"Could not find connector directory for '{connector_name}'. "
91
- "Please provide the --connector-directory option with the path to the connector. "
92
- "Note: This command requires either running from within a connector directory, "
93
- "being in the airbyte monorepo, or explicitly providing the connector directory path."
94
- ) from e
95
- except ValueError as e:
96
- raise ValueError(str(e))
97
-
98
- # Create secrets directory if it doesn't exist
99
- secrets_dir = connector_directory / "secrets"
100
- secrets_dir.mkdir(parents=True, exist_ok=True)
101
-
102
- gitignore_path = secrets_dir / ".gitignore"
103
- gitignore_path.write_text("*")
104
-
105
- # Get GSM client
106
- credentials_json = os.environ.get("GCP_GSM_CREDENTIALS")
107
- if not credentials_json:
108
- raise ValueError(
109
- "No Google Cloud credentials found. Please set the GCP_GSM_CREDENTIALS environment variable."
110
- )
111
-
112
- client = secretmanager.SecretManagerServiceClient.from_service_account_info(
113
- json.loads(credentials_json)
114
- )
115
-
116
- # List all secrets with the connector label
117
- parent = f"projects/{gcp_project_id}"
118
- filter_string = f"labels.{CONNECTOR_LABEL}={connector_name}"
119
- secrets = client.list_secrets(
120
- request=secretmanager.ListSecretsRequest(
121
- parent=parent,
122
- filter=filter_string,
123
- )
124
- )
125
-
126
- # Fetch and write secrets
127
- secret_count = 0
128
- for secret in secrets:
129
- secret_name = secret.name
130
- version_name = f"{secret_name}/versions/latest"
131
- response = client.access_secret_version(name=version_name)
132
- payload = response.payload.data.decode("UTF-8")
133
-
134
- filename_base = "config" # Default filename
135
- if secret.labels and "filename" in secret.labels:
136
- filename_base = secret.labels["filename"]
137
-
138
- secret_file_path = secrets_dir / f"{filename_base}.json"
139
- secret_file_path.write_text(payload)
140
- secret_file_path.chmod(0o600) # default to owner read/write only
141
- click.echo(f"Secret written to: {secret_file_path.absolute()!s}")
142
- secret_count += 1
143
-
144
- if secret_count == 0:
145
- click.echo(f"No secrets found for connector: {connector_name}")
146
-
147
-
148
- __all__ = [
149
- "secrets_cli_group",
150
- ]
File without changes
File without changes
File without changes