Skip to content

Commit d856950

Browse files
committed
environ secrets
1 parent aa9ee35 commit d856950

File tree

3 files changed

+44
-21
lines changed

3 files changed

+44
-21
lines changed

luxonis_ml/utils/environ.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from pathlib import Path
33
from typing import Any, Literal, cast
44

5-
from pydantic import model_serializer
5+
from pydantic import SecretStr, model_serializer
66
from pydantic_settings import BaseSettings, SettingsConfigDict
77

88
from luxonis_ml.typing import Params
@@ -17,18 +17,18 @@ class Environ(BaseSettings):
1717
env_file=".env", env_file_encoding="utf-8", extra="ignore"
1818
)
1919

20-
AWS_ACCESS_KEY_ID: str | None = None
21-
AWS_SECRET_ACCESS_KEY: str | None = None
20+
AWS_ACCESS_KEY_ID: SecretStr | None = None
21+
AWS_SECRET_ACCESS_KEY: SecretStr | None = None
2222
AWS_S3_ENDPOINT_URL: str | None = None
2323

2424
MLFLOW_CLOUDFLARE_ID: str | None = None
25-
MLFLOW_CLOUDFLARE_SECRET: str | None = None
25+
MLFLOW_CLOUDFLARE_SECRET: SecretStr | None = None
2626
MLFLOW_S3_BUCKET: str | None = None
2727
MLFLOW_S3_ENDPOINT_URL: str | None = None
2828
MLFLOW_TRACKING_URI: str | None = None
2929

3030
POSTGRES_USER: str | None = None
31-
POSTGRES_PASSWORD: str | None = None
31+
POSTGRES_PASSWORD: SecretStr | None = None
3232
POSTGRES_HOST: str | None = None
3333
POSTGRES_PORT: str | None = None
3434
POSTGRES_DB: str | None = None
@@ -38,9 +38,9 @@ class Environ(BaseSettings):
3838
LUXONISML_TEAM_ID: str = "offline"
3939
LUXONISML_DISABLE_SETUP_LOGGING: bool = False
4040

41-
ROBOFLOW_API_KEY: str | None = None
41+
ROBOFLOW_API_KEY: SecretStr | None = None
4242

43-
GOOGLE_APPLICATION_CREDENTIALS: str | None = None
43+
GOOGLE_APPLICATION_CREDENTIALS: SecretStr | None = None
4444

4545
LOG_LEVEL: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = (
4646
"INFO"

tests/test_utils/test_config.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from pydantic import BaseModel
88

99
from luxonis_ml.typing import Params
10-
from luxonis_ml.utils import environ
1110
from luxonis_ml.utils.config import LuxonisConfig
1211

1312
CONFIG_DATA = {
@@ -271,19 +270,6 @@ def test_get(config_file: str):
271270
cfg.get("list_config.index.int_list_param")
272271

273272

274-
def test_environ(monkeypatch: pytest.MonkeyPatch):
275-
monkeypatch.delenv("POSTGRES_HOST", raising=False)
276-
assert environ.POSTGRES_HOST is None
277-
278-
monkeypatch.setenv("POSTGRES_HOST", "first.example.com")
279-
assert environ.POSTGRES_HOST == "first.example.com"
280-
281-
monkeypatch.setenv("POSTGRES_HOST", "second.example.com")
282-
assert environ.POSTGRES_HOST == "second.example.com"
283-
284-
assert environ.model_dump() == {}
285-
286-
287273
def test_safe_load(config_file: str):
288274
cfg = Config.get_config(config_file)
289275
with tempfile.NamedTemporaryFile(delete=False) as f:

tests/test_utils/test_environ.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from collections.abc import Generator
2+
from pathlib import Path
3+
4+
import pytest
5+
from pydantic import SecretStr
6+
7+
from luxonis_ml.utils.environ import Environ
8+
9+
10+
@pytest.fixture
11+
def dotenv_file(tempdir: Path) -> Generator[Path]:
12+
path = tempdir / "dotenv"
13+
path.write_text(
14+
"AWS_ACCESS_KEY_ID=example_access_key\n"
15+
"AWS_SECRET_ACCESS_KEY=example_secret_key\n"
16+
"AWS_S3_ENDPOINT_URL=http://example.com\n"
17+
)
18+
yield path
19+
path.unlink(missing_ok=True)
20+
21+
22+
def test_environ(dotenv_file: Path, monkeypatch: pytest.MonkeyPatch):
23+
environ = Environ(
24+
POSTGRES_USER="user",
25+
_env_file=dotenv_file, # type: ignore
26+
)
27+
assert environ.POSTGRES_USER == "user"
28+
assert isinstance(environ.AWS_ACCESS_KEY_ID, SecretStr)
29+
assert isinstance(environ.AWS_SECRET_ACCESS_KEY, SecretStr)
30+
assert (
31+
environ.AWS_SECRET_ACCESS_KEY.get_secret_value()
32+
== "example_secret_key"
33+
)
34+
assert environ.AWS_S3_ENDPOINT_URL == "http://example.com"
35+
assert environ.AWS_ACCESS_KEY_ID.get_secret_value() == "example_access_key"
36+
37+
assert environ.model_dump() == {}

0 commit comments

Comments
 (0)