Skip to content

Commit 83c388a

Browse files
committed
ec2 settings
1 parent 8386b66 commit 83c388a

File tree

3 files changed

+79
-5
lines changed

3 files changed

+79
-5
lines changed

packages/settings-library/src/settings_library/docker_registry.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,16 @@ class RegistrySettings(BaseCustomSettings):
3535
]
3636

3737
REGISTRY_USER: Annotated[
38-
str, Field(description="username to access the docker registry")
38+
str,
39+
Field(description="username to access the docker registry"),
3940
]
4041
REGISTRY_PW: Annotated[
41-
SecretStr, Field(description="password to access the docker registry")
42+
SecretStr,
43+
Field(description="password to access the docker registry"),
4244
]
4345
REGISTRY_SSL: Annotated[
44-
bool, Field(description="True if docker registry is using HTTPS protocol")
46+
bool,
47+
Field(description="True if docker registry is using HTTPS protocol"),
4548
]
4649

4750
@field_validator("REGISTRY_PATH", mode="before")

packages/settings-library/src/settings_library/ec2.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,19 @@
88
ANY_HTTP_URL_ADAPTER: TypeAdapter = TypeAdapter(AnyHttpUrl)
99

1010

11+
def _validate_url(value: str | None) -> str | None:
12+
if value is not None:
13+
return str(ANY_HTTP_URL_ADAPTER.validate_python(value))
14+
return value
15+
16+
1117
class EC2Settings(BaseCustomSettings):
1218
EC2_ACCESS_KEY_ID: str
1319
EC2_ENDPOINT: Annotated[
14-
str, BeforeValidator(lambda x: str(ANY_HTTP_URL_ADAPTER.validate_python(x)))
15-
] | None = Field(default=None, description="do not define if using standard AWS")
20+
str | None,
21+
BeforeValidator(_validate_url),
22+
Field(description="do not define if using standard AWS"),
23+
] = None
1624
EC2_REGION_NAME: str = "us-east-1"
1725
EC2_SECRET_ACCESS_KEY: str
1826

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# pylint: disable=redefined-outer-name
2+
# pylint: disable=unused-argument
3+
# pylint: disable=unused-variable
4+
# pylint: disable=too-many-arguments
5+
6+
7+
import pytest
8+
from pydantic import ValidationError
9+
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
10+
from settings_library.ec2 import EC2Settings
11+
12+
13+
def test_ec2_endpoint_defaults_to_null(monkeypatch: pytest.MonkeyPatch):
14+
setenvs_from_dict(
15+
monkeypatch,
16+
{
17+
"EC2_ACCESS_KEY_ID": "my_access_key_id",
18+
"EC2_REGION_NAME": "us-east-1",
19+
"EC2_SECRET_ACCESS_KEY": "my_secret_access_key",
20+
},
21+
)
22+
23+
settings = EC2Settings.create_from_envs()
24+
assert settings.EC2_ENDPOINT is None
25+
26+
27+
def test_ec2_endpoint_is_nullified(monkeypatch: pytest.MonkeyPatch):
28+
setenvs_from_dict(
29+
monkeypatch,
30+
{
31+
"EC2_ACCESS_KEY_ID": "my_access_key_id",
32+
"EC2_ENDPOINT": "null",
33+
"EC2_REGION_NAME": "us-east-1",
34+
"EC2_SECRET_ACCESS_KEY": "my_secret_access_key",
35+
},
36+
)
37+
38+
settings = EC2Settings.create_from_envs()
39+
assert settings.EC2_ENDPOINT is None
40+
41+
42+
def test_ec2_endpoint_invalid(monkeypatch: pytest.MonkeyPatch):
43+
setenvs_from_dict(
44+
monkeypatch,
45+
{
46+
"EC2_ACCESS_KEY_ID": "my_access_key_id",
47+
"EC2_ENDPOINT": "ftp://my_ec2_endpoint.com",
48+
"EC2_REGION_NAME": "us-east-1",
49+
"EC2_SECRET_ACCESS_KEY": "my_secret_access_key",
50+
},
51+
)
52+
53+
with pytest.raises(ValidationError) as err_info:
54+
EC2Settings.create_from_envs()
55+
56+
assert err_info.value.errors()
57+
err_info.value.errors()[0]["loc"] == ("EC2_ENDPOINT")
58+
err_info.value.errors()[0]["type"] == "url_scheme"
59+
60+
61+
def test_ec2_endpoint_description():
62+
assert EC2Settings.model_fields["EC2_ACCESS_KEY_ID"].description is None
63+
assert EC2Settings.model_fields["EC2_ENDPOINT"].description is not None

0 commit comments

Comments
 (0)