Skip to content

Commit eb8b4ec

Browse files
committed
refactor
1 parent 7ef66bc commit eb8b4ec

File tree

4 files changed

+74
-85
lines changed

4 files changed

+74
-85
lines changed

packages/aws-library/src/aws_library/ec2/_models.py

Lines changed: 64 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
StringConstraints,
1818
field_validator,
1919
)
20+
from pydantic.config import JsonDict
2021
from types_aiobotocore_ec2.literals import InstanceStateNameType, InstanceTypeType
2122

2223

@@ -179,68 +180,74 @@ def validate_bash_calls(cls, v):
179180
temp_file.writelines(v)
180181
temp_file.flush()
181182
# NOTE: this will not capture runtime errors, but at least some syntax errors such as invalid quotes
182-
sh.bash("-n", temp_file.name)
183+
sh.bash("-n", temp_file.name) # pyright: ignore[reportCallIssue]
183184
except sh.ErrorReturnCode as exc:
184185
msg = f"Invalid bash call in custom_boot_scripts: {v}, Error: {exc.stderr}"
185186
raise ValueError(msg) from exc
186187

187188
return v
188189

190+
@staticmethod
191+
def _update_json_schema_extra(schema: JsonDict) -> None:
192+
schema.update(
193+
{
194+
"examples": [
195+
{
196+
# just AMI
197+
"ami_id": "ami-123456789abcdef",
198+
},
199+
{
200+
# AMI + scripts
201+
"ami_id": "ami-123456789abcdef",
202+
"custom_boot_scripts": ["ls -tlah", "echo blahblah"],
203+
},
204+
{
205+
# AMI + scripts + pre-pull
206+
"ami_id": "ami-123456789abcdef",
207+
"custom_boot_scripts": ["ls -tlah", "echo blahblah"],
208+
"pre_pull_images": [
209+
"nginx:latest",
210+
"itisfoundation/my-very-nice-service:latest",
211+
"simcore/services/dynamic/another-nice-one:2.4.5",
212+
"asd",
213+
],
214+
},
215+
{
216+
# AMI + pre-pull
217+
"ami_id": "ami-123456789abcdef",
218+
"pre_pull_images": [
219+
"nginx:latest",
220+
"itisfoundation/my-very-nice-service:latest",
221+
"simcore/services/dynamic/another-nice-one:2.4.5",
222+
"asd",
223+
],
224+
},
225+
{
226+
# AMI + pre-pull + cron
227+
"ami_id": "ami-123456789abcdef",
228+
"pre_pull_images": [
229+
"nginx:latest",
230+
"itisfoundation/my-very-nice-service:latest",
231+
"simcore/services/dynamic/another-nice-one:2.4.5",
232+
"asd",
233+
],
234+
"pre_pull_images_cron_interval": "01:00:00",
235+
},
236+
{
237+
# AMI + pre-pull + buffer count
238+
"ami_id": "ami-123456789abcdef",
239+
"pre_pull_images": [
240+
"nginx:latest",
241+
"itisfoundation/my-very-nice-service:latest",
242+
"simcore/services/dynamic/another-nice-one:2.4.5",
243+
"asd",
244+
],
245+
"buffer_count": 10,
246+
},
247+
]
248+
}
249+
)
250+
189251
model_config = ConfigDict(
190-
json_schema_extra={
191-
"examples": [
192-
{
193-
# just AMI
194-
"ami_id": "ami-123456789abcdef",
195-
},
196-
{
197-
# AMI + scripts
198-
"ami_id": "ami-123456789abcdef",
199-
"custom_boot_scripts": ["ls -tlah", "echo blahblah"],
200-
},
201-
{
202-
# AMI + scripts + pre-pull
203-
"ami_id": "ami-123456789abcdef",
204-
"custom_boot_scripts": ["ls -tlah", "echo blahblah"],
205-
"pre_pull_images": [
206-
"nginx:latest",
207-
"itisfoundation/my-very-nice-service:latest",
208-
"simcore/services/dynamic/another-nice-one:2.4.5",
209-
"asd",
210-
],
211-
},
212-
{
213-
# AMI + pre-pull
214-
"ami_id": "ami-123456789abcdef",
215-
"pre_pull_images": [
216-
"nginx:latest",
217-
"itisfoundation/my-very-nice-service:latest",
218-
"simcore/services/dynamic/another-nice-one:2.4.5",
219-
"asd",
220-
],
221-
},
222-
{
223-
# AMI + pre-pull + cron
224-
"ami_id": "ami-123456789abcdef",
225-
"pre_pull_images": [
226-
"nginx:latest",
227-
"itisfoundation/my-very-nice-service:latest",
228-
"simcore/services/dynamic/another-nice-one:2.4.5",
229-
"asd",
230-
],
231-
"pre_pull_images_cron_interval": "01:00:00",
232-
},
233-
{
234-
# AMI + pre-pull + buffer count
235-
"ami_id": "ami-123456789abcdef",
236-
"pre_pull_images": [
237-
"nginx:latest",
238-
"itisfoundation/my-very-nice-service:latest",
239-
"simcore/services/dynamic/another-nice-one:2.4.5",
240-
"asd",
241-
],
242-
"buffer_count": 10,
243-
},
244-
]
245-
}
252+
json_schema_extra=_update_json_schema_extra,
246253
)

services/autoscaling/tests/unit/conftest.py

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import json
99
import logging
1010
import random
11+
import secrets
1112
from collections.abc import AsyncIterator, Awaitable, Callable, Iterator
1213
from copy import deepcopy
1314
from pathlib import Path
@@ -244,11 +245,6 @@ def app_environment(
244245
delenvs_from_dict(monkeypatch, mock_env_devel_environment, raising=False)
245246
return setenvs_from_dict(monkeypatch, {**external_envfile_dict})
246247

247-
assert "json_schema_extra" in EC2InstanceBootSpecific.model_config
248-
assert isinstance(EC2InstanceBootSpecific.model_config["json_schema_extra"], dict)
249-
assert isinstance(
250-
EC2InstanceBootSpecific.model_config["json_schema_extra"]["examples"], list
251-
)
252248
envs = setenvs_from_dict(
253249
monkeypatch,
254250
{
@@ -268,9 +264,7 @@ def app_environment(
268264
"EC2_INSTANCES_ALLOWED_TYPES": json_dumps(
269265
{
270266
ec2_type_name: random.choice( # noqa: S311
271-
EC2InstanceBootSpecific.model_config["json_schema_extra"][
272-
"examples"
273-
]
267+
EC2InstanceBootSpecific.model_json_schema()["examples"]
274268
)
275269
for ec2_type_name in aws_allowed_ec2_instance_type_names
276270
}
@@ -292,11 +286,6 @@ def mocked_ec2_instances_envs(
292286
aws_allowed_ec2_instance_type_names: list[InstanceTypeType],
293287
aws_instance_profile: str,
294288
) -> EnvVarsDict:
295-
assert "json_schema_extra" in EC2InstanceBootSpecific.model_config
296-
assert isinstance(EC2InstanceBootSpecific.model_config["json_schema_extra"], dict)
297-
assert isinstance(
298-
EC2InstanceBootSpecific.model_config["json_schema_extra"]["examples"], list
299-
)
300289
envs = setenvs_from_dict(
301290
monkeypatch,
302291
{
@@ -307,10 +296,8 @@ def mocked_ec2_instances_envs(
307296
{
308297
ec2_type_name: cast(
309298
dict,
310-
random.choice( # noqa: S311
311-
EC2InstanceBootSpecific.model_config["json_schema_extra"][
312-
"examples"
313-
]
299+
secrets.choice(
300+
EC2InstanceBootSpecific.model_json_schema()["examples"]
314301
),
315302
)
316303
| {"ami_id": aws_ami_id}

services/clusters-keeper/tests/unit/conftest.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import yaml
1717
from asgi_lifespan import LifespanManager
1818
from aws_library.ec2 import EC2InstanceBootSpecific
19+
from common_library.json_serialization import json_dumps
1920
from faker import Faker
2021
from fakeredis.aioredis import FakeRedis
2122
from fastapi import FastAPI
@@ -143,9 +144,7 @@ def app_environment(
143144
{
144145
random.choice( # noqa: S311
145146
ec2_instances
146-
): EC2InstanceBootSpecific.model_config["json_schema_extra"][
147-
"examples"
148-
][
147+
): EC2InstanceBootSpecific.model_json_schema()["examples"][
149148
1
150149
] # NOTE: we use example with custom script
151150
}
@@ -163,9 +162,7 @@ def app_environment(
163162
"WORKERS_EC2_INSTANCES_ALLOWED_TYPES": json_dumps(
164163
{
165164
ec2_type_name: random.choice( # noqa: S311
166-
EC2InstanceBootSpecific.model_config["json_schema_extra"][
167-
"examples"
168-
]
165+
EC2InstanceBootSpecific.model_json_schema()["examples"]
169166
)
170167
for ec2_type_name in ec2_instances
171168
}

services/clusters-keeper/tests/unit/test_core_settings.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
import json
7-
import random
7+
import secrets
88

99
import pytest
1010
from aws_library.ec2 import EC2InstanceBootSpecific
@@ -53,10 +53,8 @@ def test_multiple_primary_ec2_instances_raises(
5353
{
5454
"PRIMARY_EC2_INSTANCES_ALLOWED_TYPES": json.dumps(
5555
{
56-
ec2_type_name: random.choice( # noqa: S311
57-
EC2InstanceBootSpecific.model_config["json_schema_extra"][
58-
"examples"
59-
]
56+
ec2_type_name: secrets.choice(
57+
EC2InstanceBootSpecific.model_json_schema()["examples"]
6058
)
6159
for ec2_type_name in ec2_instances
6260
}

0 commit comments

Comments
 (0)