airbyte.secrets.env_vars

Secret manager that retrieves secrets from environment variables and .env files.

 1# Copyright (c) 2024 Airbyte, Inc., all rights reserved.
 2"""Secret manager that retrieves secrets from environment variables and `.env` files."""
 3
 4from __future__ import annotations
 5
 6import os
 7from typing import TYPE_CHECKING
 8
 9from dotenv import dotenv_values
10
11from airbyte.secrets.base import SecretManager, SecretSourceEnum, SecretString
12
13
14if TYPE_CHECKING:
15    from pathlib import Path
16
17
18class EnvVarSecretManager(SecretManager):
19    """Secret manager that retrieves secrets from environment variables."""
20
21    name = SecretSourceEnum.ENV.value
22
23    def get_secret(self, secret_name: str) -> SecretString | None:
24        """Get a named secret from the environment."""
25        if secret_name not in os.environ:
26            return None
27
28        return SecretString(os.environ[secret_name])
29
30
31class DotenvSecretManager(SecretManager):
32    """Secret manager that retrieves secrets from a `.env` file."""
33
34    dotenv_path: Path | None = None
35
36    @property
37    def name(self) -> str:  # type: ignore[override]
38        """Get name of secret manager."""
39        if self.dotenv_path:
40            return f"{SecretSourceEnum.DOTENV.value}:{self.dotenv_path}"
41        return SecretSourceEnum.DOTENV.value
42
43    def __init__(
44        self,
45        dotenv_path: Path | None = None,
46    ) -> None:
47        """Initialize a new .env Secret Manager, with optionally specified file path."""
48        self.dotenv_path = dotenv_path
49
50    def get_secret(self, secret_name: str) -> SecretString | None:
51        """Get a named secret from the `.env` file."""
52        try:
53            dotenv_vars: dict[str, str | None] = dotenv_values(
54                dotenv_path=self.dotenv_path,
55            )
56        except Exception:
57            # Can't locate or parse a .env file
58            return None
59
60        if secret_name not in dotenv_vars:
61            # Secret not found
62            return None
63
64        return SecretString(dotenv_vars[secret_name])
65
66    def list_secrets_names(self) -> list[str]:
67        """List all secrets available in the .env file."""
68        dotenv_vars: dict[str, str | None] = dotenv_values(
69            dotenv_path=self.dotenv_path,
70        )
71        return list(dotenv_vars.keys())
class EnvVarSecretManager(airbyte.secrets.base.SecretManager):
19class EnvVarSecretManager(SecretManager):
20    """Secret manager that retrieves secrets from environment variables."""
21
22    name = SecretSourceEnum.ENV.value
23
24    def get_secret(self, secret_name: str) -> SecretString | None:
25        """Get a named secret from the environment."""
26        if secret_name not in os.environ:
27            return None
28
29        return SecretString(os.environ[secret_name])

Secret manager that retrieves secrets from environment variables.

name = 'env'
def get_secret(self, secret_name: str) -> airbyte.secrets.SecretString | None:
24    def get_secret(self, secret_name: str) -> SecretString | None:
25        """Get a named secret from the environment."""
26        if secret_name not in os.environ:
27            return None
28
29        return SecretString(os.environ[secret_name])

Get a named secret from the environment.

class DotenvSecretManager(airbyte.secrets.base.SecretManager):
32class DotenvSecretManager(SecretManager):
33    """Secret manager that retrieves secrets from a `.env` file."""
34
35    dotenv_path: Path | None = None
36
37    @property
38    def name(self) -> str:  # type: ignore[override]
39        """Get name of secret manager."""
40        if self.dotenv_path:
41            return f"{SecretSourceEnum.DOTENV.value}:{self.dotenv_path}"
42        return SecretSourceEnum.DOTENV.value
43
44    def __init__(
45        self,
46        dotenv_path: Path | None = None,
47    ) -> None:
48        """Initialize a new .env Secret Manager, with optionally specified file path."""
49        self.dotenv_path = dotenv_path
50
51    def get_secret(self, secret_name: str) -> SecretString | None:
52        """Get a named secret from the `.env` file."""
53        try:
54            dotenv_vars: dict[str, str | None] = dotenv_values(
55                dotenv_path=self.dotenv_path,
56            )
57        except Exception:
58            # Can't locate or parse a .env file
59            return None
60
61        if secret_name not in dotenv_vars:
62            # Secret not found
63            return None
64
65        return SecretString(dotenv_vars[secret_name])
66
67    def list_secrets_names(self) -> list[str]:
68        """List all secrets available in the .env file."""
69        dotenv_vars: dict[str, str | None] = dotenv_values(
70            dotenv_path=self.dotenv_path,
71        )
72        return list(dotenv_vars.keys())

Secret manager that retrieves secrets from a .env file.

DotenvSecretManager(dotenv_path: pathlib.Path | None = None)
44    def __init__(
45        self,
46        dotenv_path: Path | None = None,
47    ) -> None:
48        """Initialize a new .env Secret Manager, with optionally specified file path."""
49        self.dotenv_path = dotenv_path

Initialize a new .env Secret Manager, with optionally specified file path.

dotenv_path: pathlib.Path | None = None
name: str
37    @property
38    def name(self) -> str:  # type: ignore[override]
39        """Get name of secret manager."""
40        if self.dotenv_path:
41            return f"{SecretSourceEnum.DOTENV.value}:{self.dotenv_path}"
42        return SecretSourceEnum.DOTENV.value

Get name of secret manager.

def get_secret(self, secret_name: str) -> airbyte.secrets.SecretString | None:
51    def get_secret(self, secret_name: str) -> SecretString | None:
52        """Get a named secret from the `.env` file."""
53        try:
54            dotenv_vars: dict[str, str | None] = dotenv_values(
55                dotenv_path=self.dotenv_path,
56            )
57        except Exception:
58            # Can't locate or parse a .env file
59            return None
60
61        if secret_name not in dotenv_vars:
62            # Secret not found
63            return None
64
65        return SecretString(dotenv_vars[secret_name])

Get a named secret from the .env file.

def list_secrets_names(self) -> list[str]:
67    def list_secrets_names(self) -> list[str]:
68        """List all secrets available in the .env file."""
69        dotenv_vars: dict[str, str | None] = dotenv_values(
70            dotenv_path=self.dotenv_path,
71        )
72        return list(dotenv_vars.keys())

List all secrets available in the .env file.