Skip to content

Commit 36cda93

Browse files
continue upgrading
1 parent 9fe7c1a commit 36cda93

File tree

3 files changed

+36
-14
lines changed

3 files changed

+36
-14
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from ._client import SimcoreEC2API
22
from ._errors import EC2AccessError, EC2NotConnectedError, EC2RuntimeError
33
from ._models import (
4+
AWS_TAG_KEY_MAX_LENGTH,
5+
AWS_TAG_KEY_MIN_LENGTH,
6+
AWS_TAG_VALUE_MAX_LENGTH,
7+
AWS_TAG_VALUE_MIN_LENGTH,
48
AWSTagKey,
59
AWSTagValue,
610
EC2InstanceBootSpecific,
@@ -14,6 +18,10 @@
1418
__all__: tuple[str, ...] = (
1519
"AWSTagKey",
1620
"AWSTagValue",
21+
"AWS_TAG_KEY_MIN_LENGTH",
22+
"AWS_TAG_KEY_MAX_LENGTH",
23+
"AWS_TAG_VALUE_MIN_LENGTH",
24+
"AWS_TAG_VALUE_MAX_LENGTH",
1725
"EC2AccessError",
1826
"EC2InstanceBootSpecific",
1927
"EC2InstanceConfig",

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import re
33
import tempfile
44
from dataclasses import dataclass
5-
from typing import Annotated, TypeAlias
5+
from typing import Annotated, Final, TypeAlias
66

77
import sh # type: ignore[import-untyped]
88
from models_library.docker import DockerGenericTag
@@ -68,17 +68,21 @@ class EC2InstanceType:
6868
InstancePrivateDNSName: TypeAlias = str
6969

7070

71+
AWS_TAG_KEY_MIN_LENGTH: Final[int] = 1
72+
AWS_TAG_KEY_MAX_LENGTH: Final[int] = 128
7173
AWSTagKey: TypeAlias = Annotated[
7274
# see [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions]
7375
str,
7476
StringConstraints(
75-
min_length=1,
76-
max_length=128,
77+
min_length=AWS_TAG_KEY_MIN_LENGTH,
78+
max_length=AWS_TAG_KEY_MAX_LENGTH,
7779
pattern=re.compile(r"^(?!(_index|\.{1,2})$)[a-zA-Z0-9\+\-=\._:@]+$"),
7880
),
7981
]
8082

8183

84+
AWS_TAG_VALUE_MIN_LENGTH: Final[int] = 0
85+
AWS_TAG_VALUE_MAX_LENGTH: Final[int] = 256
8286
AWSTagValue: TypeAlias = Annotated[
8387
# see [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions]
8488
# quotes []{} were added as it allows to json encode. it seems to be accepted as a value

services/autoscaling/src/simcore_service_autoscaling/utils/buffer_machines_pool_core.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from collections.abc import Iterable
22
from operator import itemgetter
33

4-
from aws_library.ec2 import AWSTagKey, AWSTagValue, EC2Tags
4+
from aws_library.ec2 import AWS_TAG_VALUE_MAX_LENGTH, AWSTagKey, AWSTagValue, EC2Tags
55
from fastapi import FastAPI
66
from models_library.docker import DockerGenericTag
77
from models_library.utils.json_serialization import json_dumps
8-
from pydantic import parse_obj_as, parse_raw_as
8+
from pydantic import TypeAdapter
99

1010
from ..constants import (
1111
ACTIVATED_BUFFER_MACHINE_EC2_TAGS,
@@ -29,8 +29,10 @@ def get_deactivated_buffer_ec2_tags(
2929
base_ec2_tags = (
3030
auto_scaling_mode.get_ec2_tags(app) | DEACTIVATED_BUFFER_MACHINE_EC2_TAGS
3131
)
32-
base_ec2_tags[AWSTagKey("Name")] = AWSTagValue(
33-
f"{base_ec2_tags[AWSTagKey('Name')]}-buffer"
32+
base_ec2_tags[TypeAdapter(AWSTagKey).validate_python("Name")] = TypeAdapter(
33+
AWSTagValue
34+
).validate_python(
35+
f"{base_ec2_tags[TypeAdapter(AWSTagKey).validate_python('Name')]}-buffer"
3436
)
3537
return base_ec2_tags
3638

@@ -43,28 +45,36 @@ def dump_pre_pulled_images_as_tags(images: Iterable[DockerGenericTag]) -> EC2Tag
4345
# AWS Tag Values are limited to 256 characaters so we chunk the images
4446
# into smaller chunks
4547
jsonized_images = json_dumps(images)
46-
assert AWSTagValue.max_length # nosec
47-
if len(jsonized_images) > AWSTagValue.max_length:
48+
assert AWS_TAG_VALUE_MAX_LENGTH # nosec
49+
if len(jsonized_images) > AWS_TAG_VALUE_MAX_LENGTH:
4850
# let's chunk the string
49-
chunk_size = AWSTagValue.max_length
51+
chunk_size = AWS_TAG_VALUE_MAX_LENGTH
5052
chunks = [
5153
jsonized_images[i : i + chunk_size]
5254
for i in range(0, len(jsonized_images), chunk_size)
5355
]
5456
return {
55-
AWSTagKey(f"{PRE_PULLED_IMAGES_EC2_TAG_KEY}_({i})"): AWSTagValue(c)
57+
TypeAdapter(AWSTagKey)
58+
.validate_python(f"{PRE_PULLED_IMAGES_EC2_TAG_KEY}_({i})"): TypeAdapter(
59+
AWSTagValue
60+
)
61+
.validate_python(c)
5662
for i, c in enumerate(chunks)
5763
}
5864
return {
59-
PRE_PULLED_IMAGES_EC2_TAG_KEY: parse_obj_as(AWSTagValue, json_dumps(images))
65+
PRE_PULLED_IMAGES_EC2_TAG_KEY: TypeAdapter(AWSTagValue).validate_python(
66+
json_dumps(images)
67+
)
6068
}
6169

6270

6371
def load_pre_pulled_images_from_tags(tags: EC2Tags) -> list[DockerGenericTag]:
6472
# AWS Tag values are limited to 256 characters so we chunk the images
6573
if PRE_PULLED_IMAGES_EC2_TAG_KEY in tags:
6674
# read directly
67-
return parse_raw_as(list[DockerGenericTag], tags[PRE_PULLED_IMAGES_EC2_TAG_KEY])
75+
return TypeAdapter(list[DockerGenericTag]).validate_json(
76+
tags[PRE_PULLED_IMAGES_EC2_TAG_KEY]
77+
)
6878

6979
assembled_json = "".join(
7080
map(
@@ -80,5 +90,5 @@ def load_pre_pulled_images_from_tags(tags: EC2Tags) -> list[DockerGenericTag]:
8090
)
8191
)
8292
if assembled_json:
83-
return parse_raw_as(list[DockerGenericTag], assembled_json)
93+
return TypeAdapter(list[DockerGenericTag]).validate_json(assembled_json)
8494
return []

0 commit comments

Comments
 (0)