Skip to content

Commit 329b00d

Browse files
Upgrade agent service (Pydantic v2) (#6508)
1 parent 1d92881 commit 329b00d

File tree

7 files changed

+50
-43
lines changed

7 files changed

+50
-43
lines changed

services/agent/requirements/_base.txt

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ aiohttp==3.8.5
1111
# aiodocker
1212
aiosignal==1.2.0
1313
# via aiohttp
14+
annotated-types==0.7.0
15+
# via pydantic
1416
anyio==3.6.2
1517
# via
1618
# httpx
@@ -41,16 +43,10 @@ click==8.1.3
4143
# uvicorn
4244
dnspython==2.2.1
4345
# via email-validator
44-
email-validator==1.3.0
46+
email-validator==2.2.0
4547
# via pydantic
46-
fastapi==0.96.0
48+
fastapi==0.115.0
4749
# via
48-
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
49-
# -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
50-
# -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
51-
# -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt
52-
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
53-
# -c requirements/../../../requirements/constraints.txt
5450
# -r requirements/../../../packages/service-library/requirements/_fastapi.in
5551
# -r requirements/_base.in
5652
# prometheus-fastapi-instrumentator
@@ -106,27 +102,38 @@ prometheus-client==0.19.0
106102
# prometheus-fastapi-instrumentator
107103
prometheus-fastapi-instrumentator==6.1.0
108104
# via -r requirements/../../../packages/service-library/requirements/_fastapi.in
109-
pydantic==1.10.2
105+
pydantic==2.9.2
110106
# via
111107
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
112108
# -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
113109
# -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
114-
# -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/_base.in
115110
# -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt
116111
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
117112
# -c requirements/../../../requirements/constraints.txt
118113
# -r requirements/../../../packages/models-library/requirements/_base.in
119114
# -r requirements/../../../packages/settings-library/requirements/_base.in
120115
# -r requirements/_base.in
121116
# fastapi
117+
# pydantic-extra-types
118+
# pydantic-settings
119+
pydantic-core==2.23.4
120+
# via pydantic
121+
pydantic-extra-types==2.9.0
122+
# via -r requirements/../../../packages/models-library/requirements/_base.in
123+
pydantic-settings==2.5.2
124+
# via
125+
# -r requirements/../../../packages/models-library/requirements/_base.in
126+
# -r requirements/../../../packages/settings-library/requirements/_base.in
122127
pygments==2.15.1
123128
# via rich
124129
pyrsistent==0.19.2
125130
# via jsonschema
126131
python-dateutil==2.8.2
127132
# via arrow
128133
python-dotenv==1.0.0
129-
# via -r requirements/_base.in
134+
# via
135+
# -r requirements/_base.in
136+
# pydantic-settings
130137
rich==13.4.2
131138
# via
132139
# -r requirements/../../../packages/settings-library/requirements/_base.in
@@ -143,7 +150,7 @@ sniffio==1.3.0
143150
# via
144151
# anyio
145152
# httpx
146-
starlette==0.27.0
153+
starlette==0.38.6
147154
# via
148155
# -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
149156
# -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt
@@ -154,10 +161,12 @@ starlette==0.27.0
154161
# fastapi
155162
typer==0.12.3
156163
# via -r requirements/../../../packages/settings-library/requirements/_base.in
157-
typing-extensions==4.4.0
164+
typing-extensions==4.12.2
158165
# via
159166
# aiodocker
167+
# fastapi
160168
# pydantic
169+
# pydantic-core
161170
# typer
162171
uvicorn==0.19.0
163172
# via

services/agent/requirements/_test.txt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ aiosignal==1.2.0
1313
# via
1414
# -c requirements/_base.txt
1515
# aiohttp
16+
annotated-types==0.7.0
17+
# via
18+
# -c requirements/_base.txt
19+
# pydantic
1620
anyio==3.6.2
1721
# via
1822
# -c requirements/_base.txt
@@ -81,8 +85,6 @@ ecdsa==0.19.0
8185
# moto
8286
# python-jose
8387
# sshpubkeys
84-
exceptiongroup==1.2.2
85-
# via pytest
8688
faker==27.0.0
8789
# via -r requirements/_test.in
8890
flask==3.0.3
@@ -178,11 +180,15 @@ pyasn1==0.6.0
178180
# rsa
179181
pycparser==2.22
180182
# via cffi
181-
pydantic==1.10.2
183+
pydantic==2.9.2
182184
# via
183185
# -c requirements/../../../requirements/constraints.txt
184186
# -c requirements/_base.txt
185187
# aws-sam-translator
188+
pydantic-core==2.23.4
189+
# via
190+
# -c requirements/_base.txt
191+
# pydantic
186192
pyparsing==3.1.2
187193
# via moto
188194
pyrsistent==0.19.2
@@ -257,16 +263,13 @@ sshpubkeys==3.3.1
257263
# via moto
258264
sympy==1.13.2
259265
# via cfn-lint
260-
tomli==2.0.1
261-
# via
262-
# coverage
263-
# pytest
264-
typing-extensions==4.4.0
266+
typing-extensions==4.12.2
265267
# via
266268
# -c requirements/_base.txt
267269
# aws-sam-translator
268270
# cfn-lint
269271
# pydantic
272+
# pydantic-core
270273
urllib3==2.2.2
271274
# via
272275
# -c requirements/../../../requirements/constraints.txt

services/agent/requirements/_tools.txt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,12 @@ setuptools==69.2.0
7777
# -c requirements/_base.txt
7878
# -c requirements/_test.txt
7979
# pip-tools
80-
tomli==2.0.1
81-
# via
82-
# -c requirements/_test.txt
83-
# black
84-
# build
85-
# mypy
86-
# pip-tools
87-
# pylint
8880
tomlkit==0.13.2
8981
# via pylint
90-
typing-extensions==4.4.0
82+
typing-extensions==4.12.2
9183
# via
9284
# -c requirements/_base.txt
9385
# -c requirements/_test.txt
94-
# astroid
95-
# black
9686
# mypy
9787
virtualenv==20.26.3
9888
# via pre-commit

services/agent/src/simcore_service_agent/core/application.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def create_app() -> FastAPI:
3838
# SETTINGS
3939
settings = ApplicationSettings.create_from_envs()
4040
_setup_logger(settings)
41-
logger.debug(settings.json(indent=2))
41+
logger.debug(settings.model_dump_json(indent=2))
4242

4343
assert settings.SC_BOOT_MODE # nosec
4444
app = FastAPI(

services/agent/src/simcore_service_agent/core/settings.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Final
22

33
from models_library.basic_types import BootModeEnum, LogLevel
4-
from pydantic import AnyHttpUrl, Field, NonNegativeInt, validator
4+
from pydantic import AliasChoices, AnyHttpUrl, Field, NonNegativeInt, field_validator
55
from settings_library.base import BaseCustomSettings
66
from settings_library.r_clone import S3Provider
77
from settings_library.utils_logging import MixinLoggingSettings
@@ -11,16 +11,21 @@
1111

1212
class ApplicationSettings(BaseCustomSettings, MixinLoggingSettings):
1313
LOGLEVEL: LogLevel = Field(
14-
LogLevel.WARNING.value, env=["AGENT_LOGLEVEL", "LOG_LEVEL", "LOGLEVEL"]
14+
LogLevel.WARNING.value,
15+
validation_alias=AliasChoices(
16+
"AGENT_LOGLEVEL",
17+
"LOG_LEVEL",
18+
"LOGLEVEL",
19+
),
1520
)
1621
SC_BOOT_MODE: BootModeEnum | None
1722

1823
AGENT_VOLUMES_LOG_FORMAT_LOCAL_DEV_ENABLED: bool = Field(
1924
default=False,
20-
env=[
25+
validation_alias=AliasChoices(
2126
"AGENT_VOLUMES_LOG_FORMAT_LOCAL_DEV_ENABLED",
2227
"LOG_FORMAT_LOCAL_DEV_ENABLED",
23-
],
28+
),
2429
description="Enables local development log format. WARNING: make sure it is disabled if you want to have structured logs!",
2530
)
2631
AGENT_VOLUMES_CLEANUP_TARGET_SWARM_STACK_NAME: str = Field(
@@ -47,7 +52,7 @@ class ApplicationSettings(BaseCustomSettings, MixinLoggingSettings):
4752
)
4853
AGENT_PROMETHEUS_INSTRUMENTATION_ENABLED: bool = True
4954

50-
@validator("LOGLEVEL")
55+
@field_validator("LOGLEVEL")
5156
@classmethod
5257
def valid_log_level(cls, value) -> LogLevel:
5358
return LogLevel(cls.validate_log_level(value))

services/agent/tests/conftest.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
import pytest
1212
import simcore_service_agent
1313
from aiodocker.volumes import DockerVolume
14+
from common_library.pydantic_networks_extension import HttpUrlLegacy
1415
from models_library.basic_types import BootModeEnum
1516
from models_library.services import RunID
1617
from moto.server import ThreadedMotoServer
17-
from pydantic import HttpUrl, parse_obj_as
18+
from pydantic import HttpUrl, TypeAdapter
1819
from settings_library.r_clone import S3Provider
1920
from simcore_service_agent.core.settings import ApplicationSettings
2021

@@ -187,9 +188,8 @@ def caplog_info_debug(
187188

188189

189190
@pytest.fixture(scope="module")
190-
def mocked_s3_server_url(mocked_aws_server: ThreadedMotoServer) -> HttpUrl:
191+
def mocked_s3_server_url(mocked_aws_server: ThreadedMotoServer) -> HttpUrlLegacy:
191192
# pylint: disable=protected-access
192-
return parse_obj_as(
193-
HttpUrl,
193+
return TypeAdapter(HttpUrlLegacy).validate_python(
194194
f"http://{mocked_aws_server._ip_address}:{mocked_aws_server._port}", # noqa: SLF001
195195
)

services/agent/tests/unit/test_modules_volumes_cleanup_s3.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ async def test_store_to_s3(
149149
)
150150

151151
await _download_files_from_bucket(
152-
endpoint=mocked_s3_server_url,
152+
endpoint=f"{mocked_s3_server_url}",
153153
access_key="xxx",
154154
secret_key="xxx",
155155
bucket_name=bucket,

0 commit comments

Comments
 (0)