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

Register a custom secret manager.

def clear_secret_sources() -> None:
64def clear_secret_sources() -> None:
65    """Clear all secret sources."""
66    _SECRETS_SOURCES.clear()

Clear all secret sources.

def disable_secret_source( source: airbyte.secrets.SecretManager | airbyte.SecretSourceEnum) -> None:
69def disable_secret_source(source: SecretManager | SecretSourceEnum) -> None:
70    """Disable one of the default secrets sources.
71
72    This function can accept either a `SecretManager` instance, a `SecretSourceEnum` enum value, or
73    a string representing the name of the source to disable.
74    """
75    if isinstance(source, SecretManager) and source in _SECRETS_SOURCES:
76        _SECRETS_SOURCES.remove(source)
77        return
78
79    # Else, remove by name
80    for s in list(_SECRETS_SOURCES).copy():
81        if s.name == str(source):
82            _SECRETS_SOURCES.remove(s)

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.