airbyte.secrets.config
This module provides customization of how PyAirbyte locates secrets.
1# Copyright (c) 2024 Airbyte, Inc., all rights reserved. 2"""This module provides customization of how PyAirbyte locates secrets.""" 3 4from __future__ import annotations 5 6from airbyte._util import meta 7from airbyte.secrets.base import SecretManager, SecretSourceEnum 8from airbyte.secrets.env_vars import DotenvSecretManager, EnvVarSecretManager 9from airbyte.secrets.google_colab import ColabSecretManager 10from airbyte.secrets.prompt import SecretsPrompt 11 12 13_SECRETS_SOURCES: list[SecretManager] = [] 14 15 16def _get_secret_sources() -> list[SecretManager]: 17 """Initialize the default secret sources.""" 18 if len(_SECRETS_SOURCES) == 0: 19 # Initialize the default secret sources 20 _SECRETS_SOURCES.extend( 21 [ 22 EnvVarSecretManager(), 23 DotenvSecretManager(), 24 ] 25 ) 26 if meta.is_colab(): 27 _SECRETS_SOURCES.append(ColabSecretManager()) 28 29 if meta.is_interactive(): 30 _SECRETS_SOURCES.append(SecretsPrompt()) 31 32 return _SECRETS_SOURCES.copy() 33 34 35# Ensure the default secret sources are initialized 36_ = _get_secret_sources() 37 38 39def register_secret_manager( 40 secret_manager: SecretManager, 41 *, 42 as_backup: bool = False, 43 replace_existing: bool = False, 44) -> None: 45 """Register a custom secret manager.""" 46 if replace_existing: 47 clear_secret_sources() 48 49 if as_backup: 50 # Add to end of list 51 _SECRETS_SOURCES.append(secret_manager) 52 else: 53 # Add to beginning of list 54 _SECRETS_SOURCES.insert(0, secret_manager) 55 56 57def clear_secret_sources() -> None: 58 """Clear all secret sources.""" 59 _SECRETS_SOURCES.clear() 60 61 62def disable_secret_source(source: SecretManager | SecretSourceEnum) -> None: 63 """Disable one of the default secrets sources. 64 65 This function can accept either a `SecretManager` instance, a `SecretSourceEnum` enum value, or 66 a string representing the name of the source to disable. 67 """ 68 if isinstance(source, SecretManager) and source in _SECRETS_SOURCES: 69 _SECRETS_SOURCES.remove(source) 70 return 71 72 # Else, remove by name 73 for existing_source in list(_SECRETS_SOURCES).copy(): 74 if str(existing_source) == str(source): 75 _SECRETS_SOURCES.remove(existing_source)
def
register_secret_manager( secret_manager: airbyte.secrets.SecretManager, *, as_backup: bool = False, replace_existing: bool = False) -> None:
40def register_secret_manager( 41 secret_manager: SecretManager, 42 *, 43 as_backup: bool = False, 44 replace_existing: bool = False, 45) -> None: 46 """Register a custom secret manager.""" 47 if replace_existing: 48 clear_secret_sources() 49 50 if as_backup: 51 # Add to end of list 52 _SECRETS_SOURCES.append(secret_manager) 53 else: 54 # Add to beginning of list 55 _SECRETS_SOURCES.insert(0, secret_manager)
Register a custom secret manager.
def
clear_secret_sources() -> None:
58def clear_secret_sources() -> None: 59 """Clear all secret sources.""" 60 _SECRETS_SOURCES.clear()
Clear all secret sources.
def
disable_secret_source( source: airbyte.secrets.SecretManager | airbyte.SecretSourceEnum) -> None:
63def disable_secret_source(source: SecretManager | SecretSourceEnum) -> None: 64 """Disable one of the default secrets sources. 65 66 This function can accept either a `SecretManager` instance, a `SecretSourceEnum` enum value, or 67 a string representing the name of the source to disable. 68 """ 69 if isinstance(source, SecretManager) and source in _SECRETS_SOURCES: 70 _SECRETS_SOURCES.remove(source) 71 return 72 73 # Else, remove by name 74 for existing_source in list(_SECRETS_SOURCES).copy(): 75 if str(existing_source) == str(source): 76 _SECRETS_SOURCES.remove(existing_source)
Disable one of the default secrets sources.
This function can accept either a SecretManager
instance, a SecretSourceEnum
enum value, or
a string representing the name of the source to disable.