From 33694f939376c06390f968744559c5820fa18e7e Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 13:40:20 +0200 Subject: [PATCH 01/28] =?UTF-8?q?=F0=9F=90=9B=20Enhance=20`reqs`=20target?= =?UTF-8?q?=20in=20Makefile=20to=20support=20upgrading=20packages=20starti?= =?UTF-8?q?ng=20with=20a=20specified=20prefix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/base.Makefile | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/requirements/base.Makefile b/requirements/base.Makefile index 35823f26d16..afb56e07373 100644 --- a/requirements/base.Makefile +++ b/requirements/base.Makefile @@ -9,13 +9,14 @@ REPO_BASE_DIR := $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := help DO_CLEAN_OR_UPGRADE:=$(if $(clean),,--upgrade) -UPGRADE_OPTION := $(if $(upgrade),--upgrade-package "$(upgrade)",$(DO_CLEAN_OR_UPGRADE)) +STARTSWITH_UPGRADE := $(if $(startswith),$(shell grep '^$(startswith)' $(basename $@).txt 2>/dev/null | cut -d= -f1 | xargs -n1 echo --upgrade-package),) +UPGRADE_OPTION := $(if $(upgrade),--upgrade-package "$(upgrade)",$(if $(startswith),$(STARTSWITH_UPGRADE),$(DO_CLEAN_OR_UPGRADE)) objects = $(sort $(wildcard *.in)) outputs := $(objects:.in=.txt) -reqs: $(outputs) ## pip-compiles all requirements/*.in -> requirements/*.txt; make reqs upgrade=foo will only upgrade package foo +reqs: $(outputs) ## pip-compiles all requirements/*.in -> requirements/*.txt; make reqs upgrade=foo will only upgrade package foo; make reqs startswith=pytest will upgrade packages starting with pytest touch: @$(foreach p,${objects},touch ${p};) @@ -36,6 +37,12 @@ help: ## this colorful help @echo "" @awk --posix 'BEGIN {FS = ":.*?## "} /^[[:alpha:][:space:]_-]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) @echo "" + @echo "Examples:" + @echo " make reqs # Upgrade all packages" + @echo " make reqs upgrade=pytest # Upgrade only pytest package" + @echo " make reqs startswith=pytest # Upgrade all packages starting with 'pytest'" + @echo " make reqs clean=1 # Clean and rebuild all requirements" + @echo "" # ------------------------------------------------------------------------------------------ From ffe6901c0b7b41dded459aa7dbf91ce21eab2d8d Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 13:53:08 +0200 Subject: [PATCH 02/28] starts with --- requirements/base.Makefile | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/requirements/base.Makefile b/requirements/base.Makefile index afb56e07373..a2ee7be1ddf 100644 --- a/requirements/base.Makefile +++ b/requirements/base.Makefile @@ -9,8 +9,7 @@ REPO_BASE_DIR := $(shell git rev-parse --show-toplevel) .DEFAULT_GOAL := help DO_CLEAN_OR_UPGRADE:=$(if $(clean),,--upgrade) -STARTSWITH_UPGRADE := $(if $(startswith),$(shell grep '^$(startswith)' $(basename $@).txt 2>/dev/null | cut -d= -f1 | xargs -n1 echo --upgrade-package),) -UPGRADE_OPTION := $(if $(upgrade),--upgrade-package "$(upgrade)",$(if $(startswith),$(STARTSWITH_UPGRADE),$(DO_CLEAN_OR_UPGRADE)) +UPGRADE_OPTION := $(if $(upgrade),--upgrade-package "$(upgrade)",$(DO_CLEAN_OR_UPGRADE)) objects = $(sort $(wildcard *.in)) @@ -51,10 +50,28 @@ help: ## this colorful help # extracting subsets of requiremenst like e.g _dask-distributed.* # %.txt: %.in - cd ..; \ - uv pip compile $(UPGRADE_OPTION) \ - --no-header \ - --output-file requirements/$@ requirements/$< + @if [ -n "$(startswith)" ]; then \ + MATCHING_PACKAGES=$$(grep '^$(startswith)' $@ 2>/dev/null | cut -d= -f1); \ + if [ -z "$$MATCHING_PACKAGES" ]; then \ + echo "No packages starting with '$(startswith)' found in $@. Skipping."; \ + exit 0; \ + fi; \ + STARTSWITH_UPGRADE=$$(echo "$$MATCHING_PACKAGES" | xargs -n1 echo --upgrade-package); \ + cd ..; \ + uv pip compile $$STARTSWITH_UPGRADE \ + --no-header \ + --output-file requirements/$@ requirements/$<; \ + elif [ -n "$(upgrade)" ]; then \ + cd ..; \ + uv pip compile --upgrade-package "$(upgrade)" \ + --no-header \ + --output-file requirements/$@ requirements/$<; \ + else \ + cd ..; \ + uv pip compile $(DO_CLEAN_OR_UPGRADE) \ + --no-header \ + --output-file requirements/$@ requirements/$<; \ + fi _test.txt: _base.txt From 42877d568d5ba8e72ce94b56cc6fdbcd75b65c93 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:10:47 +0200 Subject: [PATCH 03/28] =?UTF-8?q?=F0=9F=90=9B=20Enhance=20`reqs`=20target?= =?UTF-8?q?=20in=20Makefile=20to=20support=20upgrading=20packages=20with?= =?UTF-8?q?=20`startswith`=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements/tools/Makefile | 40 +++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/requirements/tools/Makefile b/requirements/tools/Makefile index ee094b80ef9..87e3afdcd4b 100644 --- a/requirements/tools/Makefile +++ b/requirements/tools/Makefile @@ -24,6 +24,9 @@ SERVICES_DIR := $(abspath $(REPODIR)/services) IMAGE := local/requirements/tools UPGRADE_OPTION := $(if $(upgrade),upgrade=$(upgrade),) +STARTSWITH_OPTION := $(if $(startswith),startswith=$(startswith),) +UPGRADE_OR_STARTSWITH_OPTION := $(if $(upgrade),upgrade=$(upgrade),$(if $(startswith),startswith=$(startswith),)) +UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION := $(if $(upgrade),upgrade=$(upgrade),$(if $(startswith),startswith=$(startswith),$(if $(clean),clean=$(clean),))) # tools MAKE_C := $(MAKE) --directory @@ -70,20 +73,20 @@ touch: ## touches all package requirement inputs only-tools: ## upgrades tools repo wide # Upgrading ONLY _tools.in - @$(foreach p,${_tools-in},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OPTION);) + @$(foreach p,${_tools-in},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION);) -reqs: ## updates test & tooling requirements - # Upgrading $(upgrade) requirements - @$(foreach p,${_target-inputs},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OPTION);) +reqs: guard-UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION ## updates test & tooling requirements + # Upgrading $(upgrade)$(startswith)$(if $(clean), cleaning) requirements + @$(foreach p,${_target-inputs},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION);) -reqs-all: guard-UPGRADE_OPTION ## updates a given package repository-wise IN ALL `requirements/` folders (e.g. make reqs-all upgrade=foo==1.2.3 ) - # Upgrading $(upgrade) ALL requirements - @$(foreach p,${_all-in},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OPTION);) +reqs-all: guard-UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION ## updates a given package or pattern repository-wise IN ALL `requirements/` folders (e.g. make reqs-all upgrade=foo==1.2.3 or make reqs-all startswith=pytest or make reqs-all clean=1) + # Upgrading $(upgrade)$(startswith)$(if $(clean), cleaning) ALL requirements + @$(foreach p,${_all-in},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION);) -reqs-services: guard-UPGRADE_OPTION ## updates a given package on all services [and not packages] (e.g. make reqs-services upgrade=foo==1.2.3 ) - # Upgrading $(upgrade) in services - @$(foreach p,${_services-in},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OPTION);) +reqs-services: guard-UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION ## updates a given package or pattern on all services [and not packages] (e.g. make reqs-services upgrade=foo==1.2.3 or make reqs-services startswith=pytest or make reqs-services clean=1) + # Upgrading $(upgrade)$(startswith)$(if $(clean), cleaning) in services + @$(foreach p,${_services-in},echo Touching $(p);touch $(p);$(MAKE_C) $(dir $(p)) reqs $(UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION);) reqs-ci: ## upgrades requirements for pylint recipe in CI @@ -112,7 +115,7 @@ run: build ## Runs upgrade in a container [WARNING! UNDER DEV. USE CAREFULY] --user=$(shell id -u):$(shell id -g) \ --entrypoint=/bin/bash \ ${IMAGE_NAME} \ - -c "cd requirements/tools; make reqs $(if $(upgrade),upgrade=$(upgrade),)" + -c "cd requirements/tools; make reqs $(UPGRADE_OR_STARTSWITH_OR_CLEAN_OPTION)" .PHONY: shell @@ -134,6 +137,21 @@ help: ## this colorful help @echo "" @awk --posix 'BEGIN {FS = ":.*?## "} /^[[:alpha:][:space:]_-]+:.*?## / {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) @echo "" + @echo "Examples:" + @echo " make reqs # Upgrade all test & tooling requirements" + @echo " make reqs upgrade=pytest # Upgrade only pytest package in test & tooling" + @echo " make reqs startswith=pytest # Upgrade all packages starting with 'pytest' in test & tooling" + @echo " make reqs clean=1 # Clean and rebuild all test & tooling requirements" + @echo "" + @echo " make reqs-all upgrade=fastapi # Upgrade fastapi in ALL requirements files" + @echo " make reqs-all startswith=pydantic # Upgrade all packages starting with pydantic repo-wide" + @echo " make reqs-all clean=1 # Clean and rebuild ALL requirements" + @echo "" + @echo " make reqs-services upgrade=uvicorn # Upgrade uvicorn only in services" + @echo " make reqs-services startswith=sqlalchemy # Upgrade all packages starting with sqlalchemy in services folder" + @echo "" + @echo " make only-tools upgrade=black # Upgrade black only in tools requirements" + @echo "" .PHONY: guard-% From d01a761afe82f81c5d5c14c01aa1d6dc0073e7f3 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:12:27 +0200 Subject: [PATCH 04/28] make reqs startswith=pytest --- .../requirements/_base.txt | 6 ++++-- .../requirements/_test.txt | 9 +++++++-- services/agent/requirements/_test.txt | 16 ++++++++++----- services/api-server/requirements/_test.txt | 18 +++++++++++------ services/autoscaling/requirements/_test.txt | 16 ++++++++++----- services/catalog/requirements/_test.txt | 18 +++++++++++------ .../clusters-keeper/requirements/_test.txt | 16 ++++++++++----- services/dask-sidecar/requirements/_test.txt | 16 ++++++++++----- .../datcore-adapter/requirements/_test.txt | 18 +++++++++++------ services/director-v2/requirements/_test.txt | 20 ++++++++++++------- services/director/requirements/_test.txt | 18 +++++++++++------ .../docker-api-proxy/requirements/_test.txt | 16 +++++++++------ .../dynamic-scheduler/requirements/_test.txt | 16 ++++++++++----- .../dynamic-sidecar/requirements/_test.txt | 16 ++++++++++----- services/invitations/requirements/_test.txt | 14 +++++++++---- services/migration/requirements/_test.txt | 14 ++++++++----- services/notifications/requirements/_test.txt | 16 ++++++++++----- services/payments/requirements/_test.txt | 16 ++++++++++----- .../requirements/_test.txt | 16 ++++++++++----- services/storage/requirements/_test.txt | 18 +++++++++++------ services/web/server/requirements/_test.txt | 17 +++++++++------- tests/e2e-playwright/requirements/_test.txt | 6 +++++- .../requirements/_test_wo_playwright.txt | 4 +++- .../requirements/requirements.txt | 6 ++++-- tests/public-api/requirements/_test.txt | 6 ++++-- tests/swarm-deploy/requirements/_test.txt | 10 ++++++---- 26 files changed, 244 insertions(+), 118 deletions(-) diff --git a/packages/service-integration/requirements/_base.txt b/packages/service-integration/requirements/_base.txt index 332dcc97001..be0b2d6b7c1 100644 --- a/packages/service-integration/requirements/_base.txt +++ b/packages/service-integration/requirements/_base.txt @@ -107,8 +107,10 @@ pydantic-settings==2.7.0 # -c requirements/../../../requirements/constraints.txt # -r requirements/../../../packages/models-library/requirements/_base.in pygments==2.19.1 - # via rich -pytest==8.3.5 + # via + # pytest + # rich +pytest==8.4.1 # via -r requirements/_base.in python-dateutil==2.9.0.post0 # via arrow diff --git a/packages/service-integration/requirements/_test.txt b/packages/service-integration/requirements/_test.txt index 19f48613efa..ee014572fd9 100644 --- a/packages/service-integration/requirements/_test.txt +++ b/packages/service-integration/requirements/_test.txt @@ -19,14 +19,19 @@ pluggy==1.5.0 # via # -c requirements/_base.txt # pytest -pytest==8.3.5 + # pytest-cov +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -c requirements/_base.txt # -r requirements/_test.in # pytest-cov # pytest-instafail # pytest-sugar -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in diff --git a/services/agent/requirements/_test.txt b/services/agent/requirements/_test.txt index c25f0cd5cb2..ce023f0a6ce 100644 --- a/services/agent/requirements/_test.txt +++ b/services/agent/requirements/_test.txt @@ -188,7 +188,9 @@ packaging==24.2 pathable==0.4.4 # via jsonschema-path pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng propcache==0.3.0 @@ -209,19 +211,23 @@ pydantic-core==2.27.2 # via # -c requirements/_base.txt # pydantic +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.2.1 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/api-server/requirements/_test.txt b/services/api-server/requirements/_test.txt index 1b0500d802d..f387a4242e5 100644 --- a/services/api-server/requirements/_test.txt +++ b/services/api-server/requirements/_test.txt @@ -223,7 +223,9 @@ pbr==6.1.1 # jschema-to-python # sarif-om pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov propcache==0.2.1 # via # -c requirements/_base.txt @@ -250,6 +252,10 @@ pydantic-core==2.27.1 # via # -c requirements/_base.txt # pydantic +pygments==2.18.0 + # via + # -c requirements/_base.txt + # pytest pyinstrument==5.0.0 # via # -c requirements/_base.txt @@ -260,20 +266,20 @@ pyrsistent==0.20.0 # via # -c requirements/_base.txt # jsonschema -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-docker # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/autoscaling/requirements/_test.txt b/services/autoscaling/requirements/_test.txt index 669083ffa99..a9e727a7372 100644 --- a/services/autoscaling/requirements/_test.txt +++ b/services/autoscaling/requirements/_test.txt @@ -173,7 +173,9 @@ packaging==25.0 pathable==0.4.4 # via jsonschema-path pluggy==1.6.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng pprintpp==0.4.0 @@ -195,9 +197,13 @@ pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.2.3 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -205,13 +211,13 @@ pytest==8.3.5 # pytest-icdiff # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.1.1 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/catalog/requirements/_test.txt b/services/catalog/requirements/_test.txt index 16868bf2812..bc0bdcea58a 100644 --- a/services/catalog/requirements/_test.txt +++ b/services/catalog/requirements/_test.txt @@ -111,7 +111,9 @@ packaging==24.2 # -c requirements/_base.txt # pytest pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov propcache==0.3.0 # via # -c requirements/_base.txt @@ -121,7 +123,11 @@ ptvsd==4.3.2 # via -r requirements/_test.in py-cpuinfo==9.0.0 # via pytest-benchmark -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-aiohttp @@ -132,15 +138,15 @@ pytest==8.3.5 # pytest-mock pytest-aiohttp==1.1.0 # via -r requirements/_test.in -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via pytest-aiohttp pytest-benchmark==5.1.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/clusters-keeper/requirements/_test.txt b/services/clusters-keeper/requirements/_test.txt index 37a4405b53c..b40d0223cbd 100644 --- a/services/clusters-keeper/requirements/_test.txt +++ b/services/clusters-keeper/requirements/_test.txt @@ -197,7 +197,9 @@ parse==1.20.2 pathable==0.4.4 # via jsonschema-path pluggy==1.6.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng propcache==0.3.1 @@ -222,19 +224,23 @@ pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.2.3 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.1.1 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/dask-sidecar/requirements/_test.txt b/services/dask-sidecar/requirements/_test.txt index c8760dadb48..ed2fec551e6 100644 --- a/services/dask-sidecar/requirements/_test.txt +++ b/services/dask-sidecar/requirements/_test.txt @@ -182,7 +182,9 @@ packaging==25.0 pathable==0.4.4 # via jsonschema-path pluggy==1.6.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng pprintpp==0.4.0 @@ -207,11 +209,15 @@ pydantic-core==2.33.2 # pydantic pyftpdlib==2.0.1 # via pytest-localftpserver +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyopenssl==25.1.0 # via pytest-localftpserver pyparsing==3.2.3 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -221,9 +227,9 @@ pytest==8.3.5 # pytest-localftpserver # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.1.1 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in @@ -231,7 +237,7 @@ pytest-instafail==0.5.0 # via -r requirements/_test.in pytest-localftpserver==1.3.2 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-sugar==1.0.0 # via -r requirements/_test.in diff --git a/services/datcore-adapter/requirements/_test.txt b/services/datcore-adapter/requirements/_test.txt index 4ff7b32ba9a..0beca877da7 100644 --- a/services/datcore-adapter/requirements/_test.txt +++ b/services/datcore-adapter/requirements/_test.txt @@ -57,10 +57,16 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff -pytest==8.3.5 +pygments==2.17.2 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -70,21 +76,21 @@ pytest==8.3.5 # pytest-mock # pytest-sugar # pytest-xdist -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in pytest-sugar==1.0.0 # via -r requirements/_test.in -pytest-xdist==3.6.1 +pytest-xdist==3.7.0 # via -r requirements/_test.in requests==2.32.3 # via diff --git a/services/director-v2/requirements/_test.txt b/services/director-v2/requirements/_test.txt index 2b9b8296252..4926c260b07 100644 --- a/services/director-v2/requirements/_test.txt +++ b/services/director-v2/requirements/_test.txt @@ -213,7 +213,9 @@ partd==1.4.2 pillow==11.2.1 # via bokeh pluggy==1.6.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff propcache==0.3.1 @@ -225,7 +227,11 @@ psutil==7.0.0 # via # -c requirements/_base.txt # distributed -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -234,19 +240,19 @@ pytest==8.3.5 # pytest-icdiff # pytest-mock # pytest-xdist -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.1.1 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.1 +pytest-docker==3.2.2 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in -pytest-xdist==3.6.1 +pytest-xdist==3.7.0 # via -r requirements/_test.in python-dateutil==2.9.0.post0 # via diff --git a/services/director/requirements/_test.txt b/services/director/requirements/_test.txt index 2b8407ed13a..2404bf3191b 100644 --- a/services/director/requirements/_test.txt +++ b/services/director/requirements/_test.txt @@ -82,7 +82,9 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov propcache==0.2.0 # via # -c requirements/_base.txt @@ -90,7 +92,11 @@ propcache==0.2.0 # yarl py-cpuinfo==9.0.0 # via pytest-benchmark -pytest==8.3.5 +pygments==2.18.0 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -100,17 +106,17 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in pytest-benchmark==5.1.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/docker-api-proxy/requirements/_test.txt b/services/docker-api-proxy/requirements/_test.txt index 3e7c5f24b35..c2738b7eb7c 100644 --- a/services/docker-api-proxy/requirements/_test.txt +++ b/services/docker-api-proxy/requirements/_test.txt @@ -217,7 +217,9 @@ packaging==24.2 pamqp==3.3.0 # via aiormq pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov propcache==0.3.0 # via # aiohttp @@ -290,20 +292,22 @@ pydantic-settings==2.7.0 # -r requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/_base.in # -r requirements/../../../packages/settings-library/requirements/_base.in pygments==2.19.1 - # via rich + # via + # pytest + # rich pyinstrument==5.0.1 # via -r requirements/../../../packages/service-library/requirements/_base.in -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in python-dateutil==2.9.0.post0 # via arrow diff --git a/services/dynamic-scheduler/requirements/_test.txt b/services/dynamic-scheduler/requirements/_test.txt index 07f543c069a..43c55e68052 100644 --- a/services/dynamic-scheduler/requirements/_test.txt +++ b/services/dynamic-scheduler/requirements/_test.txt @@ -79,14 +79,20 @@ packaging==24.2 playwright==1.50.0 # via -r requirements/_test.in pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff priority==2.0.0 # via hypercorn pyee==12.1.1 # via playwright -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -94,13 +100,13 @@ pytest==8.3.5 # pytest-icdiff # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/dynamic-sidecar/requirements/_test.txt b/services/dynamic-sidecar/requirements/_test.txt index 5b3d2c7509e..d2aa70e3e6c 100644 --- a/services/dynamic-sidecar/requirements/_test.txt +++ b/services/dynamic-sidecar/requirements/_test.txt @@ -90,23 +90,29 @@ packaging==24.2 # -c requirements/_base.txt # pytest pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov propcache==0.3.0 # via # -c requirements/_base.txt # aiohttp # yarl -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in python-dateutil==2.9.0.post0 # via diff --git a/services/invitations/requirements/_test.txt b/services/invitations/requirements/_test.txt index 0b1bfff0ba6..f969e2699b4 100644 --- a/services/invitations/requirements/_test.txt +++ b/services/invitations/requirements/_test.txt @@ -46,16 +46,22 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest -pytest==8.3.5 + # via + # pytest + # pytest-cov +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/migration/requirements/_test.txt b/services/migration/requirements/_test.txt index f807b504dae..9371f6fb5f0 100644 --- a/services/migration/requirements/_test.txt +++ b/services/migration/requirements/_test.txt @@ -30,21 +30,25 @@ mypy-extensions==1.0.0 packaging==24.2 # via pytest pluggy==1.5.0 + # via + # pytest + # pytest-cov +pygments==2.19.2 # via pytest -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-docker # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/notifications/requirements/_test.txt b/services/notifications/requirements/_test.txt index 483fca1f9a3..ef6e717d084 100644 --- a/services/notifications/requirements/_test.txt +++ b/services/notifications/requirements/_test.txt @@ -49,18 +49,24 @@ packaging==24.2 # -c requirements/_base.txt # pytest pluggy==1.5.0 - # via pytest -pytest==8.3.5 + # via + # pytest + # pytest-cov +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-mock -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/payments/requirements/_test.txt b/services/payments/requirements/_test.txt index 3a145503c3b..53102dcf578 100644 --- a/services/payments/requirements/_test.txt +++ b/services/payments/requirements/_test.txt @@ -95,7 +95,9 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff propcache==0.2.0 @@ -103,7 +105,11 @@ propcache==0.2.0 # -c requirements/_base.txt # aiohttp # yarl -pytest==8.3.5 +pygments==2.18.0 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -111,13 +117,13 @@ pytest==8.3.5 # pytest-icdiff # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/resource-usage-tracker/requirements/_test.txt b/services/resource-usage-tracker/requirements/_test.txt index 9c229a95f2d..fa88780ab07 100644 --- a/services/resource-usage-tracker/requirements/_test.txt +++ b/services/resource-usage-tracker/requirements/_test.txt @@ -178,7 +178,9 @@ packaging==24.0 pathable==0.4.4 # via jsonschema-path pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng py-partiql-parser==0.6.1 @@ -194,22 +196,26 @@ pydantic-core==2.27.1 # via # -c requirements/_base.txt # pydantic +pygments==2.17.2 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.1.2 # via # -c requirements/_base.txt # moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/storage/requirements/_test.txt b/services/storage/requirements/_test.txt index d8a2498e108..fdb93c0ee5b 100644 --- a/services/storage/requirements/_test.txt +++ b/services/storage/requirements/_test.txt @@ -243,7 +243,9 @@ pandas==2.2.3 pathable==0.4.4 # via jsonschema-path pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng pprintpp==0.4.0 @@ -274,9 +276,13 @@ pydantic-core==2.27.2 # via # -c requirements/_base.txt # pydantic +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.2.1 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -286,19 +292,19 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in pytest-celery==1.1.3 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker-tools==3.1.3 +pytest-docker-tools==3.1.9 # via pytest-celery pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/services/web/server/requirements/_test.txt b/services/web/server/requirements/_test.txt index 6a2710cf5cf..ec3e569a474 100644 --- a/services/web/server/requirements/_test.txt +++ b/services/web/server/requirements/_test.txt @@ -177,7 +177,9 @@ packaging==24.1 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff propcache==0.3.1 @@ -200,13 +202,14 @@ pydantic-core==2.27.1 pygments==2.15.1 # via # -c requirements/_base.txt + # pytest # rich pyrsistent==0.18.1 # via # -c requirements/_base.txt # jsonschema # referencing -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -218,25 +221,25 @@ pytest==8.3.5 # pytest-mock # pytest-sugar # pytest-xdist -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in pytest-benchmark==5.1.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in pytest-sugar==1.0.0 # via -r requirements/_test.in -pytest-xdist==3.6.1 +pytest-xdist==3.7.0 # via -r requirements/_test.in python-dateutil==2.8.2 # via diff --git a/tests/e2e-playwright/requirements/_test.txt b/tests/e2e-playwright/requirements/_test.txt index 43eb1c9e8d0..69a616a9d9a 100644 --- a/tests/e2e-playwright/requirements/_test.txt +++ b/tests/e2e-playwright/requirements/_test.txt @@ -78,7 +78,11 @@ pydantic-core==2.27.2 # pydantic pyee==12.1.1 # via playwright -pytest==8.3.5 +pygments==2.19.2 + # via + # -r requirements/_test_wo_playwright.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test_wo_playwright.txt # pytest-base-url diff --git a/tests/e2e-playwright/requirements/_test_wo_playwright.txt b/tests/e2e-playwright/requirements/_test_wo_playwright.txt index 6bb18aa518f..6dfdf593d17 100644 --- a/tests/e2e-playwright/requirements/_test_wo_playwright.txt +++ b/tests/e2e-playwright/requirements/_test_wo_playwright.txt @@ -47,7 +47,9 @@ pydantic==2.10.6 # via -r requirements/_test_wo_playwright.in pydantic-core==2.27.2 # via pydantic -pytest==8.3.5 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # pytest-html # pytest-instafail diff --git a/tests/environment-setup/requirements/requirements.txt b/tests/environment-setup/requirements/requirements.txt index be1f58f4078..6f6d70422b9 100644 --- a/tests/environment-setup/requirements/requirements.txt +++ b/tests/environment-setup/requirements/requirements.txt @@ -22,13 +22,15 @@ pydantic==2.10.6 # -r requirements/requirements.in pydantic-core==2.27.2 # via pydantic -pytest==8.3.5 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r requirements/requirements.in # pytest-asyncio # pytest-instafail # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/requirements.in pytest-instafail==0.5.0 # via -r requirements/requirements.in diff --git a/tests/public-api/requirements/_test.txt b/tests/public-api/requirements/_test.txt index fc3bed1b4b5..1c234e97713 100644 --- a/tests/public-api/requirements/_test.txt +++ b/tests/public-api/requirements/_test.txt @@ -64,11 +64,13 @@ propcache==0.3.0 # via # aiohttp # yarl -pytest==8.3.5 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in python-dotenv==1.0.1 # via -r requirements/_test.in diff --git a/tests/swarm-deploy/requirements/_test.txt b/tests/swarm-deploy/requirements/_test.txt index 720d2d69967..ce55e503141 100644 --- a/tests/swarm-deploy/requirements/_test.txt +++ b/tests/swarm-deploy/requirements/_test.txt @@ -514,23 +514,25 @@ pydantic-settings==2.7.0 # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/_base.in # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/_base.in pygments==2.19.1 - # via rich + # via + # pytest + # rich pyinstrument==5.0.1 # via # -r requirements/../../../packages/service-library/requirements/_base.in # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in From c3fd298026e3fb46e851c400e85efea0534c3405 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:23:50 +0200 Subject: [PATCH 05/28] update ptyest --- packages/aws-library/requirements/_test.txt | 16 +++++--- .../celery-library/requirements/_test.txt | 40 +++++-------------- .../common-library/requirements/_test.txt | 14 ++++--- .../requirements/_test.txt | 16 +++++--- .../models-library/requirements/_test.txt | 14 ++++--- .../requirements/_test.txt | 16 +++++--- .../postgres-database/requirements/_test.txt | 14 ++++--- .../service-library/requirements/_test.txt | 21 ++++++---- .../settings-library/requirements/_test.txt | 14 +++++-- packages/simcore-sdk/requirements/_test.txt | 18 ++++++--- 10 files changed, 105 insertions(+), 78 deletions(-) diff --git a/packages/aws-library/requirements/_test.txt b/packages/aws-library/requirements/_test.txt index 03936ad2eb0..9e5d9bb8686 100644 --- a/packages/aws-library/requirements/_test.txt +++ b/packages/aws-library/requirements/_test.txt @@ -163,7 +163,9 @@ pint==0.24.4 platformdirs==4.3.6 # via pint pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng pprintpp==0.4.0 @@ -184,9 +186,13 @@ pydantic-core==2.27.2 # via # -c requirements/_base.txt # pydantic +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.2.1 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -196,17 +202,17 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in pytest-benchmark==5.1.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/packages/celery-library/requirements/_test.txt b/packages/celery-library/requirements/_test.txt index 06df05f2779..58acd301d1a 100644 --- a/packages/celery-library/requirements/_test.txt +++ b/packages/celery-library/requirements/_test.txt @@ -2,15 +2,10 @@ amqp==5.3.1 # via # -c requirements/_base.txt # kombu -annotated-types==0.7.0 - # via - # -c requirements/_base.txt - # pydantic anyio==4.9.0 # via # -c requirements/_base.txt # httpx - # starlette billiard==4.2.1 # via # -c requirements/_base.txt @@ -61,8 +56,6 @@ docker==7.1.0 # pytest-docker-tools faker==37.3.0 # via -r requirements/_test.in -fastapi==0.115.12 - # via -r requirements/_test.in flexcache==0.3 # via pint flexparser==0.4 @@ -100,7 +93,9 @@ pint==0.24.4 platformdirs==4.3.8 # via pint pluggy==1.6.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff prompt-toolkit==3.0.51 @@ -113,16 +108,11 @@ psutil==7.0.0 # pytest-celery py-cpuinfo==9.0.0 # via pytest-benchmark -pydantic==2.11.4 +pygments==2.19.1 # via - # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt - # fastapi -pydantic-core==2.33.2 - # via - # -c requirements/_base.txt - # pydantic -pytest==8.3.5 + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -133,13 +123,13 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in pytest-benchmark==5.1.0 # via -r requirements/_test.in pytest-celery==1.2.0 # via -r requirements/_test.in -pytest-cov==6.1.1 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-docker-tools==3.1.9 # via pytest-celery @@ -147,7 +137,7 @@ pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in @@ -180,10 +170,6 @@ sniffio==1.3.1 # via # -c requirements/_base.txt # anyio -starlette==0.46.2 - # via - # -c requirements/../../../requirements/constraints.txt - # fastapi tenacity==9.1.2 # via # -c requirements/_base.txt @@ -194,17 +180,9 @@ typing-extensions==4.13.2 # via # -c requirements/_base.txt # anyio - # fastapi # flexcache # flexparser # pint - # pydantic - # pydantic-core - # typing-inspection -typing-inspection==0.4.0 - # via - # -c requirements/_base.txt - # pydantic tzdata==2025.2 # via # -c requirements/_base.txt diff --git a/packages/common-library/requirements/_test.txt b/packages/common-library/requirements/_test.txt index 9737c253a39..a75e8b078c3 100644 --- a/packages/common-library/requirements/_test.txt +++ b/packages/common-library/requirements/_test.txt @@ -17,7 +17,9 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff pydantic==2.10.6 @@ -33,7 +35,9 @@ pydantic-settings==2.7.0 # via # -c requirements/../../../requirements/constraints.txt # -r requirements/_test.in -pytest==8.3.5 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -42,15 +46,15 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/packages/dask-task-models-library/requirements/_test.txt b/packages/dask-task-models-library/requirements/_test.txt index 9daa7aacc47..238509a9338 100644 --- a/packages/dask-task-models-library/requirements/_test.txt +++ b/packages/dask-task-models-library/requirements/_test.txt @@ -22,10 +22,16 @@ pint==0.24.4 platformdirs==4.3.8 # via pint pluggy==1.6.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -34,15 +40,15 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.1.1 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/packages/models-library/requirements/_test.txt b/packages/models-library/requirements/_test.txt index f54c9d6f0f7..2d4089b21f8 100644 --- a/packages/models-library/requirements/_test.txt +++ b/packages/models-library/requirements/_test.txt @@ -31,14 +31,18 @@ pint==0.24.4 platformdirs==4.3.6 # via pint pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff propcache==0.3.0 # via yarl psutil==7.0.0 # via -r requirements/_test.in -pytest==8.3.5 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -47,15 +51,15 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/packages/notifications-library/requirements/_test.txt b/packages/notifications-library/requirements/_test.txt index ab95de187b1..40045c74b7a 100644 --- a/packages/notifications-library/requirements/_test.txt +++ b/packages/notifications-library/requirements/_test.txt @@ -58,7 +58,9 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff propcache==0.3.0 @@ -66,7 +68,11 @@ propcache==0.3.0 # -c requirements/_base.txt # aiohttp # yarl -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -75,15 +81,15 @@ pytest==8.3.5 # pytest-instafail # pytest-mock # pytest-sugar -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/packages/postgres-database/requirements/_test.txt b/packages/postgres-database/requirements/_test.txt index da15f704e3e..a8dac786ba5 100644 --- a/packages/postgres-database/requirements/_test.txt +++ b/packages/postgres-database/requirements/_test.txt @@ -28,24 +28,28 @@ packaging==24.2 # -c requirements/_base.txt # pytest pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov psycopg2-binary==2.9.10 # via # -c requirements/_base.txt # aiopg # sqlalchemy -pytest==8.3.5 +pygments==2.19.2 + # via pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio # pytest-cov # pytest-docker # pytest-instafail -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in diff --git a/packages/service-library/requirements/_test.txt b/packages/service-library/requirements/_test.txt index 1a50519d2a2..dd0189c54af 100644 --- a/packages/service-library/requirements/_test.txt +++ b/packages/service-library/requirements/_test.txt @@ -139,7 +139,9 @@ pillow==11.1.0 pip==25.0.1 # via -r requirements/_test.in pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov pprintpp==0.4.0 # via pytest-icdiff propcache==0.3.0 @@ -150,7 +152,12 @@ propcache==0.3.0 # yarl py-cpuinfo==9.0.0 # via pytest-benchmark -pytest==8.3.5 +pygments==2.19.1 + # via + # -c requirements/_base.txt + # -c requirements/_fastapi.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-aiohttp @@ -165,27 +172,27 @@ pytest==8.3.5 # pytest-xdist pytest-aiohttp==1.1.0 # via -r requirements/_test.in -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via # -r requirements/_test.in # pytest-aiohttp pytest-benchmark==5.1.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in -pytest-docker==3.2.0 +pytest-docker==3.2.2 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in pytest-sugar==1.0.0 # via -r requirements/_test.in -pytest-xdist==3.6.1 +pytest-xdist==3.7.0 # via -r requirements/_test.in python-dateutil==2.9.0.post0 # via diff --git a/packages/settings-library/requirements/_test.txt b/packages/settings-library/requirements/_test.txt index fb8381375d5..6a2a4716993 100644 --- a/packages/settings-library/requirements/_test.txt +++ b/packages/settings-library/requirements/_test.txt @@ -11,19 +11,25 @@ packaging==24.2 # pytest # pytest-sugar pluggy==1.5.0 - # via pytest -pytest==8.3.5 + # via + # pytest + # pytest-cov +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest +pytest==8.4.1 # via # -r requirements/_test.in # pytest-cov # pytest-instafail # pytest-mock # pytest-sugar -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in diff --git a/packages/simcore-sdk/requirements/_test.txt b/packages/simcore-sdk/requirements/_test.txt index 157ed62b2c6..16cdd382c93 100644 --- a/packages/simcore-sdk/requirements/_test.txt +++ b/packages/simcore-sdk/requirements/_test.txt @@ -198,7 +198,9 @@ packaging==24.2 pathable==0.4.4 # via jsonschema-path pluggy==1.5.0 - # via pytest + # via + # pytest + # pytest-cov ply==3.11 # via jsonpath-ng pprintpp==0.4.0 @@ -221,9 +223,13 @@ pydantic-core==2.27.2 # via # -c requirements/_base.txt # pydantic +pygments==2.19.1 + # via + # -c requirements/_base.txt + # pytest pyparsing==3.2.1 # via moto -pytest==8.3.5 +pytest==8.4.1 # via # -r requirements/_test.in # pytest-asyncio @@ -233,21 +239,21 @@ pytest==8.3.5 # pytest-mock # pytest-sugar # pytest-xdist -pytest-asyncio==0.26.0 +pytest-asyncio==1.0.0 # via -r requirements/_test.in -pytest-cov==6.0.0 +pytest-cov==6.2.1 # via -r requirements/_test.in pytest-icdiff==0.9 # via -r requirements/_test.in pytest-instafail==0.5.0 # via -r requirements/_test.in -pytest-mock==3.14.0 +pytest-mock==3.14.1 # via -r requirements/_test.in pytest-runner==6.0.1 # via -r requirements/_test.in pytest-sugar==1.0.0 # via -r requirements/_test.in -pytest-xdist==3.6.1 +pytest-xdist==3.7.0 # via -r requirements/_test.in python-dateutil==2.9.0.post0 # via From 6ce16b845a7cbb504f631a268d42c6c047b6a57f Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:16:27 +0200 Subject: [PATCH 06/28] upgrades pytest_asyncio using https://pytest-asyncio.readthedocs.io/en/stable/how-to-guides/migrate_from_0_23.html --- .../tests/aiohttp/test_client_session.py | 8 ++++---- .../tests/aiohttp/test_monitor_slow_callbacks.py | 6 ++++-- .../tests/aiohttp/test_requests_validation.py | 7 ++++--- services/web/server/tests/conftest.py | 9 --------- .../tests/unit/with_dbs/03/test_login_auth_app.py | 2 +- .../server/tests/unit/with_dbs/03/users/conftest.py | 11 ++++------- services/web/server/tests/unit/with_dbs/conftest.py | 2 +- 7 files changed, 18 insertions(+), 27 deletions(-) diff --git a/packages/service-library/tests/aiohttp/test_client_session.py b/packages/service-library/tests/aiohttp/test_client_session.py index 74b91655c31..792c254ee73 100644 --- a/packages/service-library/tests/aiohttp/test_client_session.py +++ b/packages/service-library/tests/aiohttp/test_client_session.py @@ -6,7 +6,7 @@ from collections.abc import Callable, Iterator from typing import Any -import pytest +import pytest_asyncio from aiohttp import web from aiohttp.client import ClientSession from aiohttp.test_utils import TestServer @@ -18,8 +18,8 @@ ) -@pytest.fixture -def server(event_loop, aiohttp_server: Callable) -> Iterator[TestServer]: +@pytest_asyncio.fixture(loop_scope="function", scope="function") +async def server(aiohttp_server: Callable) -> Iterator[TestServer]: async def echo(request): got = await request.json() return web.json_response(data=got) @@ -31,7 +31,7 @@ async def echo(request): assert not app.get(APP_CLIENT_SESSION_KEY) - test_server = event_loop.run_until_complete(aiohttp_server(app)) + test_server = await aiohttp_server(app) assert isinstance(app[APP_CLIENT_SESSION_KEY], ClientSession) assert not app[APP_CLIENT_SESSION_KEY].closed diff --git a/packages/service-library/tests/aiohttp/test_monitor_slow_callbacks.py b/packages/service-library/tests/aiohttp/test_monitor_slow_callbacks.py index 6c428eb485d..bc6ceaa2b46 100644 --- a/packages/service-library/tests/aiohttp/test_monitor_slow_callbacks.py +++ b/packages/service-library/tests/aiohttp/test_monitor_slow_callbacks.py @@ -8,6 +8,7 @@ from collections.abc import Iterable import pytest +import pytest_asyncio from servicelib.aiohttp import monitor_slow_callbacks from servicelib.aiohttp.aiopg_utils import DatabaseError from tenacity import retry @@ -24,11 +25,12 @@ async def fails_to_reach_pg_db(): raise DatabaseError -@pytest.fixture -def incidents_manager(event_loop) -> dict: +@pytest_asyncio.fixture(loop_scope="function", scope="function") +async def incidents_manager() -> dict: incidents = [] monitor_slow_callbacks.enable(slow_duration_secs=0.2, incidents=incidents) + event_loop = asyncio.get_running_loop() asyncio.ensure_future(slow_task(0.3), loop=event_loop) # noqa: RUF006 asyncio.ensure_future(slow_task(0.3), loop=event_loop) # noqa: RUF006 asyncio.ensure_future(slow_task(0.4), loop=event_loop) # noqa: RUF006 diff --git a/packages/service-library/tests/aiohttp/test_requests_validation.py b/packages/service-library/tests/aiohttp/test_requests_validation.py index 97c2b317b6a..5cd12a4ee10 100644 --- a/packages/service-library/tests/aiohttp/test_requests_validation.py +++ b/packages/service-library/tests/aiohttp/test_requests_validation.py @@ -7,6 +7,7 @@ from uuid import UUID import pytest +import pytest_asyncio from aiohttp import web from aiohttp.test_utils import TestClient, make_mocked_request from common_library.json_serialization import json_dumps @@ -98,8 +99,8 @@ def create_fake(cls, faker: Faker): return cls(x=faker.pyint(), y=faker.pybool(), z=Sub.create_fake(faker)) -@pytest.fixture -def client(event_loop, aiohttp_client: Callable, faker: Faker) -> TestClient: +@pytest_asyncio.fixture(loop_scope="function", scope="function") +async def client(aiohttp_client: Callable, faker: Faker) -> TestClient: """ Some app that: @@ -162,7 +163,7 @@ async def _middleware(request: web.Request, handler): # adds handler app.add_routes([web.get("/projects/{project_uuid}", _handler)]) - return event_loop.run_until_complete(aiohttp_client(app)) + return await aiohttp_client(app) @pytest.fixture diff --git a/services/web/server/tests/conftest.py b/services/web/server/tests/conftest.py index 4ecee99005b..2a6494db529 100644 --- a/services/web/server/tests/conftest.py +++ b/services/web/server/tests/conftest.py @@ -3,7 +3,6 @@ # pylint: disable=unused-argument # pylint: disable=unused-variable -import asyncio import contextlib import json import logging @@ -488,11 +487,3 @@ def mock_dynamic_scheduler(mocker: MockerFixture) -> None: "simcore_service_webserver.dynamic_scheduler.api.update_projects_networks", autospec=True, ) - - -@pytest.fixture -async def loop( - event_loop: asyncio.AbstractEventLoop, -) -> asyncio.AbstractEventLoop: - """Override the event loop inside pytest-aiohttp with the one from pytest-asyncio.""" - return event_loop diff --git a/services/web/server/tests/unit/with_dbs/03/test_login_auth_app.py b/services/web/server/tests/unit/with_dbs/03/test_login_auth_app.py index 351de51e218..9a69ba26b28 100644 --- a/services/web/server/tests/unit/with_dbs/03/test_login_auth_app.py +++ b/services/web/server/tests/unit/with_dbs/03/test_login_auth_app.py @@ -37,7 +37,7 @@ async def auth_app( return app -@pytest_asyncio.fixture(loop_scope="function") +@pytest_asyncio.fixture(loop_scope="function", scope="function") async def web_server( postgres_db: sa.engine.Engine, auth_app: web.Application, diff --git a/services/web/server/tests/unit/with_dbs/03/users/conftest.py b/services/web/server/tests/unit/with_dbs/03/users/conftest.py index 2b99f9e01f6..8911ab95d35 100644 --- a/services/web/server/tests/unit/with_dbs/03/users/conftest.py +++ b/services/web/server/tests/unit/with_dbs/03/users/conftest.py @@ -3,11 +3,11 @@ # pylint: disable=unused-variable # pylint: disable=too-many-arguments -import asyncio from collections.abc import AsyncGenerator, AsyncIterable, Callable from typing import Any import pytest +import pytest_asyncio import sqlalchemy as sa from aiohttp import web from aiohttp.test_utils import TestServer @@ -22,9 +22,8 @@ from sqlalchemy.ext.asyncio import AsyncEngine -@pytest.fixture -def web_server( - event_loop: asyncio.AbstractEventLoop, +@pytest_asyncio.fixture(loop_scope="function", scope="function") +async def web_server( app_environment: EnvVarsDict, # configs postgres_db: sa.engine.Engine, # db-ready webserver_test_server_port: int, @@ -37,9 +36,7 @@ def web_server( setup_settings(app) setup_db(app) - return event_loop.run_until_complete( - aiohttp_server(app, port=webserver_test_server_port) - ) + return await aiohttp_server(app, port=webserver_test_server_port) @pytest.fixture diff --git a/services/web/server/tests/unit/with_dbs/conftest.py b/services/web/server/tests/unit/with_dbs/conftest.py index c3f0e45e3f6..e446da4e19c 100644 --- a/services/web/server/tests/unit/with_dbs/conftest.py +++ b/services/web/server/tests/unit/with_dbs/conftest.py @@ -205,7 +205,7 @@ async def _print_mail_to_stdout( ) -@pytest_asyncio.fixture(loop_scope="function") +@pytest_asyncio.fixture(loop_scope="function", scope="function") async def web_server( app_environment: EnvVarsDict, postgres_db: sa.engine.Engine, From de1282b5161c45f6b568b8d4ae1fb672feb5ed09 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:20:09 +0200 Subject: [PATCH 07/28] config --- packages/celery-library/setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/celery-library/setup.cfg b/packages/celery-library/setup.cfg index 5b10d2dc187..21600ef1350 100644 --- a/packages/celery-library/setup.cfg +++ b/packages/celery-library/setup.cfg @@ -15,6 +15,7 @@ test = pytest [tool:pytest] asyncio_mode = auto +asyncio_default_fixture_loop_scope = function [mypy] plugins = From d426e672c156307537bb9d7f8df30a1aa03f5325 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:24:51 +0200 Subject: [PATCH 08/28] upgraed --- packages/models-library/requirements/_tools.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/models-library/requirements/_tools.txt b/packages/models-library/requirements/_tools.txt index 3ae7f8fc714..2a7b2d84cfa 100644 --- a/packages/models-library/requirements/_tools.txt +++ b/packages/models-library/requirements/_tools.txt @@ -58,8 +58,10 @@ platformdirs==4.3.6 # virtualenv pre-commit==4.1.0 # via -r requirements/../../../requirements/devenv.txt -pygments==2.19.1 - # via rich +pygments==2.19.2 + # via + # -c requirements/_test.txt + # rich pylint==3.3.4 # via -r requirements/../../../requirements/devenv.txt pyproject-hooks==1.2.0 From eff219f9cd70c0affa13546a75379645cf56ac4e Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:30:38 +0200 Subject: [PATCH 09/28] upgades pydantic family --- ci/helpers/requirements/requirements.txt | 7 ++- packages/aws-library/requirements/_base.txt | 9 ++- packages/aws-library/requirements/_test.txt | 9 ++- .../celery-library/requirements/_base.txt | 4 +- .../common-library/requirements/_base.txt | 9 ++- .../common-library/requirements/_test.txt | 9 ++- .../requirements/_base.txt | 4 +- .../models-library/requirements/_base.txt | 9 ++- .../requirements/_base.txt | 9 ++- .../postgres-database/requirements/_base.txt | 9 ++- .../requirements/_base.txt | 9 ++- .../service-library/requirements/_base.txt | 9 ++- .../service-library/requirements/_fastapi.txt | 7 ++- .../settings-library/requirements/_base.txt | 9 ++- packages/simcore-sdk/requirements/_base.txt | 9 ++- packages/simcore-sdk/requirements/_test.txt | 9 ++- services/agent/requirements/_base.txt | 9 ++- services/agent/requirements/_test.txt | 9 ++- services/api-server/requirements/_base.txt | 11 ++-- services/api-server/requirements/_test.txt | 9 ++- services/autoscaling/requirements/_base.txt | 4 +- services/autoscaling/requirements/_test.txt | 2 +- services/catalog/requirements/_base.txt | 9 ++- .../clusters-keeper/requirements/_base.txt | 4 +- .../clusters-keeper/requirements/_test.txt | 2 +- services/dask-sidecar/requirements/_base.txt | 4 +- services/dask-sidecar/requirements/_test.txt | 2 +- .../datcore-adapter/requirements/_base.txt | 12 ++-- services/director-v2/requirements/_base.txt | 4 +- services/director/requirements/_base.txt | 11 ++-- .../docker-api-proxy/requirements/_test.txt | 9 ++- .../dynamic-scheduler/requirements/_base.txt | 9 ++- .../dynamic-sidecar/requirements/_base.txt | 9 ++- services/invitations/requirements/_base.txt | 9 ++- services/notifications/requirements/_base.txt | 6 +- services/payments/requirements/_base.txt | 11 ++-- .../requirements/_base.txt | 12 ++-- .../requirements/_test.txt | 9 ++- services/storage/requirements/_base.txt | 56 ++++--------------- services/storage/requirements/_test.txt | 9 ++- services/web/server/requirements/_base.txt | 12 ++-- services/web/server/requirements/_test.txt | 9 ++- tests/e2e-playwright/requirements/_test.txt | 9 ++- .../requirements/_test_wo_playwright.txt | 7 ++- .../requirements/requirements.txt | 7 ++- tests/performance/requirements/_test.txt | 4 +- tests/public-api/requirements/_base.txt | 9 ++- tests/swarm-deploy/requirements/_test.txt | 9 ++- 48 files changed, 261 insertions(+), 166 deletions(-) diff --git a/ci/helpers/requirements/requirements.txt b/ci/helpers/requirements/requirements.txt index 803199fdc3e..412d31f575e 100644 --- a/ci/helpers/requirements/requirements.txt +++ b/ci/helpers/requirements/requirements.txt @@ -39,11 +39,11 @@ propcache==0.3.1 # via # aiohttp # yarl -pydantic==2.10.5 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # fastapi -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic requests==2.32.3 # via docker @@ -58,6 +58,9 @@ typing-extensions==4.12.2 # fastapi # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../requirements/constraints.txt diff --git a/packages/aws-library/requirements/_base.txt b/packages/aws-library/requirements/_base.txt index 2df7407a009..61d0bf7dd0b 100644 --- a/packages/aws-library/requirements/_base.txt +++ b/packages/aws-library/requirements/_base.txt @@ -239,7 +239,7 @@ psutil==7.0.0 # via -r requirements/../../../packages/service-library/requirements/_base.in pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -268,9 +268,9 @@ pydantic==2.10.6 # fast-depends # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -414,6 +414,9 @@ typing-extensions==4.12.2 # types-aiobotocore-ec2 # types-aiobotocore-s3 # types-aiobotocore-ssm + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/aws-library/requirements/_test.txt b/packages/aws-library/requirements/_test.txt index 9e5d9bb8686..650795f414e 100644 --- a/packages/aws-library/requirements/_test.txt +++ b/packages/aws-library/requirements/_test.txt @@ -176,13 +176,13 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # aws-sam-translator # fastapi -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -315,6 +315,11 @@ typing-extensions==4.12.2 # types-aioboto3 # types-aiobotocore # types-boto3 + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2025.1 # via faker urllib3==2.3.0 diff --git a/packages/celery-library/requirements/_base.txt b/packages/celery-library/requirements/_base.txt index 6954b4092b4..dbca2d1f519 100644 --- a/packages/celery-library/requirements/_base.txt +++ b/packages/celery-library/requirements/_base.txt @@ -225,7 +225,7 @@ psutil==7.0.0 # via -r requirements/../../../packages/service-library/requirements/_base.in pycryptodome==3.23.0 # via stream-zip -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -255,7 +255,7 @@ pydantic==2.11.4 # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.4 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/packages/common-library/requirements/_base.txt b/packages/common-library/requirements/_base.txt index 062e97cee34..9a64d08d4f6 100644 --- a/packages/common-library/requirements/_base.txt +++ b/packages/common-library/requirements/_base.txt @@ -4,17 +4,20 @@ orjson==3.10.15 # via # -c requirements/../../../requirements/constraints.txt # -r requirements/_base.in -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -r requirements/_base.in # pydantic-extra-types -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via -r requirements/_base.in typing-extensions==4.12.2 # via # pydantic # pydantic-core # pydantic-extra-types + # typing-inspection +typing-inspection==0.4.1 + # via pydantic diff --git a/packages/common-library/requirements/_test.txt b/packages/common-library/requirements/_test.txt index a75e8b078c3..2ff96eeb71d 100644 --- a/packages/common-library/requirements/_test.txt +++ b/packages/common-library/requirements/_test.txt @@ -22,12 +22,12 @@ pluggy==1.5.0 # pytest-cov pprintpp==0.4.0 # via pytest-icdiff -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -71,5 +71,10 @@ typing-extensions==4.12.2 # -c requirements/_base.txt # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2025.1 # via faker diff --git a/packages/dask-task-models-library/requirements/_base.txt b/packages/dask-task-models-library/requirements/_base.txt index 75b9136287c..503c50da1df 100644 --- a/packages/dask-task-models-library/requirements/_base.txt +++ b/packages/dask-task-models-library/requirements/_base.txt @@ -76,7 +76,7 @@ partd==1.4.2 # via dask psutil==7.0.0 # via distributed -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -94,7 +94,7 @@ pydantic==2.11.4 # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.4 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/packages/models-library/requirements/_base.txt b/packages/models-library/requirements/_base.txt index 9daa42c4b0a..fd562cb2c63 100644 --- a/packages/models-library/requirements/_base.txt +++ b/packages/models-library/requirements/_base.txt @@ -22,7 +22,7 @@ orjson==3.10.15 # -c requirements/../../../requirements/constraints.txt # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/_base.in -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt @@ -30,9 +30,9 @@ pydantic==2.10.6 # -r requirements/_base.in # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/_base.in @@ -64,3 +64,6 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # pydantic-extra-types + # typing-inspection +typing-inspection==0.4.1 + # via pydantic diff --git a/packages/notifications-library/requirements/_base.txt b/packages/notifications-library/requirements/_base.txt index 59793cd02df..f5a7bc9a954 100644 --- a/packages/notifications-library/requirements/_base.txt +++ b/packages/notifications-library/requirements/_base.txt @@ -102,7 +102,7 @@ propcache==0.3.0 # via yarl psycopg2-binary==2.9.10 # via sqlalchemy -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -121,9 +121,9 @@ pydantic==2.10.6 # -r requirements/../../../packages/settings-library/requirements/_base.in # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -195,6 +195,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic wrapt==1.17.2 # via # deprecated diff --git a/packages/postgres-database/requirements/_base.txt b/packages/postgres-database/requirements/_base.txt index b16bdd318cf..a6987b5cc74 100644 --- a/packages/postgres-database/requirements/_base.txt +++ b/packages/postgres-database/requirements/_base.txt @@ -47,16 +47,16 @@ propcache==0.3.0 # via yarl psycopg2-binary==2.9.10 # via sqlalchemy -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/_base.in # pydantic-extra-types -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via -r requirements/../../../packages/common-library/requirements/_base.in sqlalchemy==1.4.54 # via @@ -70,6 +70,9 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # pydantic-extra-types + # typing-inspection +typing-inspection==0.4.1 + # via pydantic wrapt==1.17.2 # via # deprecated diff --git a/packages/service-integration/requirements/_base.txt b/packages/service-integration/requirements/_base.txt index be0b2d6b7c1..112a11fb79c 100644 --- a/packages/service-integration/requirements/_base.txt +++ b/packages/service-integration/requirements/_base.txt @@ -81,7 +81,7 @@ pluggy==1.5.0 # via pytest propcache==0.3.0 # via yarl -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -92,9 +92,9 @@ pydantic==2.10.6 # -r requirements/../../../packages/models-library/requirements/_base.in # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -162,6 +162,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/service-library/requirements/_base.txt b/packages/service-library/requirements/_base.txt index de6bd828580..55e237de5e5 100644 --- a/packages/service-library/requirements/_base.txt +++ b/packages/service-library/requirements/_base.txt @@ -179,7 +179,7 @@ psutil==7.0.0 # via -r requirements/_base.in pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -196,9 +196,9 @@ pydantic==2.10.6 # fast-depends # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -288,6 +288,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/service-library/requirements/_fastapi.txt b/packages/service-library/requirements/_fastapi.txt index c6e5a29f597..39a5140bc51 100644 --- a/packages/service-library/requirements/_fastapi.txt +++ b/packages/service-library/requirements/_fastapi.txt @@ -98,9 +98,9 @@ packaging==24.2 # via opentelemetry-instrumentation prometheus-client==0.21.1 # via -r requirements/_fastapi.in -pydantic==2.10.6 +pydantic==2.11.7 # via fastapi -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic pygments==2.19.1 # via rich @@ -132,6 +132,9 @@ typing-extensions==4.12.2 # pydantic-core # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic uvicorn==0.34.2 # via # fastapi diff --git a/packages/settings-library/requirements/_base.txt b/packages/settings-library/requirements/_base.txt index bc7e8331334..3fed0019177 100644 --- a/packages/settings-library/requirements/_base.txt +++ b/packages/settings-library/requirements/_base.txt @@ -11,7 +11,7 @@ orjson==3.10.15 # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt # -r requirements/../../../packages/common-library/requirements/_base.in -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt @@ -19,9 +19,9 @@ pydantic==2.10.6 # -r requirements/_base.in # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via -r requirements/../../../packages/common-library/requirements/_base.in pydantic-settings==2.7.0 # via @@ -46,3 +46,6 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic diff --git a/packages/simcore-sdk/requirements/_base.txt b/packages/simcore-sdk/requirements/_base.txt index b8490e23d4e..749efe16924 100644 --- a/packages/simcore-sdk/requirements/_base.txt +++ b/packages/simcore-sdk/requirements/_base.txt @@ -283,7 +283,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -316,9 +316,9 @@ pydantic==2.10.6 # fast-depends # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -477,6 +477,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/simcore-sdk/requirements/_test.txt b/packages/simcore-sdk/requirements/_test.txt index 16cdd382c93..3a5416ba094 100644 --- a/packages/simcore-sdk/requirements/_test.txt +++ b/packages/simcore-sdk/requirements/_test.txt @@ -214,12 +214,12 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # aws-sam-translator -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -344,6 +344,11 @@ typing-extensions==4.12.2 # sqlalchemy2-stubs # types-aiobotocore # types-aiobotocore-s3 + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2025.1 # via faker urllib3==2.3.0 diff --git a/services/agent/requirements/_base.txt b/services/agent/requirements/_base.txt index ac926fc2403..b5dcc75a899 100644 --- a/services/agent/requirements/_base.txt +++ b/services/agent/requirements/_base.txt @@ -297,7 +297,7 @@ psutil==7.0.0 # via -r requirements/../../../packages/service-library/requirements/_base.in pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -327,9 +327,9 @@ pydantic==2.10.6 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -478,6 +478,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/agent/requirements/_test.txt b/services/agent/requirements/_test.txt index ce023f0a6ce..566693bb68e 100644 --- a/services/agent/requirements/_test.txt +++ b/services/agent/requirements/_test.txt @@ -202,12 +202,12 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # aws-sam-translator -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -298,6 +298,11 @@ typing-extensions==4.12.2 # cfn-lint # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2025.1 # via faker urllib3==2.3.0 diff --git a/services/api-server/requirements/_base.txt b/services/api-server/requirements/_base.txt index 286f3348700..f40efd50a96 100644 --- a/services/api-server/requirements/_base.txt +++ b/services/api-server/requirements/_base.txt @@ -518,7 +518,7 @@ pycparser==2.22 # via cffi pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.3 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -581,9 +581,9 @@ pydantic==2.10.3 # fastapi-pagination # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.0 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -603,7 +603,7 @@ pydantic-extra-types==2.10.0 # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in -pydantic-settings==2.6.1 +pydantic-settings==2.7.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -858,6 +858,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.2.3 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/api-server/requirements/_test.txt b/services/api-server/requirements/_test.txt index f387a4242e5..01647cf1669 100644 --- a/services/api-server/requirements/_test.txt +++ b/services/api-server/requirements/_test.txt @@ -243,12 +243,12 @@ pycparser==2.22 # via # -c requirements/_base.txt # cffi -pydantic==2.10.3 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # fastapi -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -383,6 +383,11 @@ typing-extensions==4.12.2 # pydantic-core # sqlalchemy2-stubs # types-boto3 + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2025.1 # via faker urllib3==2.2.3 diff --git a/services/autoscaling/requirements/_base.txt b/services/autoscaling/requirements/_base.txt index 15d81cd9f09..e5d85c8c8bc 100644 --- a/services/autoscaling/requirements/_base.txt +++ b/services/autoscaling/requirements/_base.txt @@ -475,7 +475,7 @@ psutil==7.0.0 # distributed pycryptodome==3.23.0 # via stream-zip -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -530,7 +530,7 @@ pydantic==2.11.4 # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.4 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/services/autoscaling/requirements/_test.txt b/services/autoscaling/requirements/_test.txt index a9e727a7372..c5d81990b04 100644 --- a/services/autoscaling/requirements/_test.txt +++ b/services/autoscaling/requirements/_test.txt @@ -188,7 +188,7 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt diff --git a/services/catalog/requirements/_base.txt b/services/catalog/requirements/_base.txt index ee02de1b421..1ee31ecd5be 100644 --- a/services/catalog/requirements/_base.txt +++ b/services/catalog/requirements/_base.txt @@ -344,7 +344,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -378,9 +378,9 @@ pydantic==2.10.6 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.3 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -563,6 +563,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/clusters-keeper/requirements/_base.txt b/services/clusters-keeper/requirements/_base.txt index 1defead76ca..c353d5f2986 100644 --- a/services/clusters-keeper/requirements/_base.txt +++ b/services/clusters-keeper/requirements/_base.txt @@ -473,7 +473,7 @@ psutil==7.0.0 # distributed pycryptodome==3.23.0 # via stream-zip -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -528,7 +528,7 @@ pydantic==2.11.4 # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.4 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/services/clusters-keeper/requirements/_test.txt b/services/clusters-keeper/requirements/_test.txt index b40d0223cbd..15b88fc10ee 100644 --- a/services/clusters-keeper/requirements/_test.txt +++ b/services/clusters-keeper/requirements/_test.txt @@ -215,7 +215,7 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt diff --git a/services/dask-sidecar/requirements/_base.txt b/services/dask-sidecar/requirements/_base.txt index 832ed077ecd..26f887f41db 100644 --- a/services/dask-sidecar/requirements/_base.txt +++ b/services/dask-sidecar/requirements/_base.txt @@ -328,7 +328,7 @@ psutil==7.0.0 # distributed pycryptodome==3.23.0 # via stream-zip -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -371,7 +371,7 @@ pydantic==2.11.4 # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.4 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/dask-task-models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/services/dask-sidecar/requirements/_test.txt b/services/dask-sidecar/requirements/_test.txt index ed2fec551e6..ccec49cf1b9 100644 --- a/services/dask-sidecar/requirements/_test.txt +++ b/services/dask-sidecar/requirements/_test.txt @@ -198,7 +198,7 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt diff --git a/services/datcore-adapter/requirements/_base.txt b/services/datcore-adapter/requirements/_base.txt index f5513d5ada1..4bf5e6ea652 100644 --- a/services/datcore-adapter/requirements/_base.txt +++ b/services/datcore-adapter/requirements/_base.txt @@ -304,7 +304,7 @@ psutil==6.0.0 # via -r requirements/../../../packages/service-library/requirements/_base.in pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -335,9 +335,9 @@ pydantic==2.10.2 # fastapi-pagination # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.9.0 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -347,7 +347,7 @@ pydantic-extra-types==2.9.0 # -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in # -r requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in -pydantic-settings==2.6.1 +pydantic-settings==2.7.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -494,8 +494,12 @@ typing-extensions==4.12.2 # opentelemetry-sdk # pydantic # pydantic-core + # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.2.3 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/director-v2/requirements/_base.txt b/services/director-v2/requirements/_base.txt index 347fb5c01b7..fee54340475 100644 --- a/services/director-v2/requirements/_base.txt +++ b/services/director-v2/requirements/_base.txt @@ -583,7 +583,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.23.0 # via stream-zip -pydantic==2.11.4 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -659,7 +659,7 @@ pydantic==2.11.4 # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.4 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/dask-task-models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/services/director/requirements/_base.txt b/services/director/requirements/_base.txt index 86f1516ce41..09266999573 100644 --- a/services/director/requirements/_base.txt +++ b/services/director/requirements/_base.txt @@ -297,7 +297,7 @@ psutil==6.1.0 # via -r requirements/../../../packages/service-library/requirements/_base.in pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -327,9 +327,9 @@ pydantic==2.10.2 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.0 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -339,7 +339,7 @@ pydantic-extra-types==2.10.0 # -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in # -r requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in -pydantic-settings==2.6.1 +pydantic-settings==2.7.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -477,6 +477,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.2.3 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/docker-api-proxy/requirements/_test.txt b/services/docker-api-proxy/requirements/_test.txt index c2738b7eb7c..97f09f36c08 100644 --- a/services/docker-api-proxy/requirements/_test.txt +++ b/services/docker-api-proxy/requirements/_test.txt @@ -232,7 +232,7 @@ psutil==7.0.0 # via -r requirements/../../../packages/service-library/requirements/_base.in pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -261,9 +261,9 @@ pydantic==2.10.6 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -425,6 +425,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic tzdata==2025.1 # via faker urllib3==2.3.0 diff --git a/services/dynamic-scheduler/requirements/_base.txt b/services/dynamic-scheduler/requirements/_base.txt index 59db53ab867..f295abfb0d4 100644 --- a/services/dynamic-scheduler/requirements/_base.txt +++ b/services/dynamic-scheduler/requirements/_base.txt @@ -362,7 +362,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -395,9 +395,9 @@ pydantic==2.10.6 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -592,6 +592,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic u-msgpack-python==2.8.0 # via -r requirements/_base.in urllib3==2.3.0 diff --git a/services/dynamic-sidecar/requirements/_base.txt b/services/dynamic-sidecar/requirements/_base.txt index d70ac247d7a..1d267abfbc6 100644 --- a/services/dynamic-sidecar/requirements/_base.txt +++ b/services/dynamic-sidecar/requirements/_base.txt @@ -487,7 +487,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -549,9 +549,9 @@ pydantic==2.10.6 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -859,6 +859,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic u-msgpack-python==2.8.0 # via -r requirements/_base.in urllib3==2.3.0 diff --git a/services/invitations/requirements/_base.txt b/services/invitations/requirements/_base.txt index d2adb130028..b930f981bbb 100644 --- a/services/invitations/requirements/_base.txt +++ b/services/invitations/requirements/_base.txt @@ -314,7 +314,7 @@ pycparser==2.22 # via cffi pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -343,9 +343,9 @@ pydantic==2.10.6 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.3 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -495,6 +495,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/notifications/requirements/_base.txt b/services/notifications/requirements/_base.txt index 9a93d41335f..9cb19024d03 100644 --- a/services/notifications/requirements/_base.txt +++ b/services/notifications/requirements/_base.txt @@ -338,7 +338,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.22.0 # via stream-zip -pydantic==2.11.0 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -372,9 +372,9 @@ pydantic==2.11.0 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.33.0 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.3 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in diff --git a/services/payments/requirements/_base.txt b/services/payments/requirements/_base.txt index efcb0649829..5c85f660482 100644 --- a/services/payments/requirements/_base.txt +++ b/services/payments/requirements/_base.txt @@ -371,7 +371,7 @@ pycparser==2.22 # via cffi pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -404,9 +404,9 @@ pydantic==2.10.2 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.0 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -417,7 +417,7 @@ pydantic-extra-types==2.10.0 # -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in # -r requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in -pydantic-settings==2.6.1 +pydantic-settings==2.7.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -616,6 +616,9 @@ typing-extensions==4.12.2 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.2.3 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/resource-usage-tracker/requirements/_base.txt b/services/resource-usage-tracker/requirements/_base.txt index 5b99b68e3a9..2d0a879c620 100644 --- a/services/resource-usage-tracker/requirements/_base.txt +++ b/services/resource-usage-tracker/requirements/_base.txt @@ -508,7 +508,7 @@ psycopg2-binary==2.9.9 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -565,9 +565,9 @@ pydantic==2.10.2 # fastapi # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.9.0 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -586,7 +586,7 @@ pydantic-extra-types==2.9.0 # -r requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in # -r requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in -pydantic-settings==2.6.1 +pydantic-settings==2.7.0 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -881,12 +881,16 @@ typing-extensions==4.12.2 # opentelemetry-sdk # pydantic # pydantic-core + # pydantic-extra-types # rich-toolkit # typer # types-aiobotocore # types-aiobotocore-ec2 # types-aiobotocore-s3 # types-aiobotocore-ssm + # typing-inspection +typing-inspection==0.4.1 + # via pydantic tzdata==2024.1 # via pandas tzlocal==5.2 diff --git a/services/resource-usage-tracker/requirements/_test.txt b/services/resource-usage-tracker/requirements/_test.txt index fa88780ab07..08fc0e2669e 100644 --- a/services/resource-usage-tracker/requirements/_test.txt +++ b/services/resource-usage-tracker/requirements/_test.txt @@ -187,12 +187,12 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # aws-sam-translator -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -320,6 +320,11 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # sqlalchemy2-stubs + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2024.1 # via # -c requirements/_base.txt diff --git a/services/storage/requirements/_base.txt b/services/storage/requirements/_base.txt index 0ba91078bfb..983b51f2f59 100644 --- a/services/storage/requirements/_base.txt +++ b/services/storage/requirements/_base.txt @@ -132,7 +132,9 @@ botocore==1.37.3 botocore-stubs==1.36.17 # via types-aiobotocore celery==5.5.2 - # via -r requirements/../../../packages/celery-library/requirements/_base.in + # via + # -r requirements/../../../packages/celery-library/requirements/_base.in + # -r requirements/_base.in certifi==2025.1.31 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -289,6 +291,7 @@ httpx==0.28.1 # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt # -r requirements/../../../packages/service-library/requirements/_fastapi.in + # -r requirements/_base.in # fastapi hyperframe==6.1.0 # via h2 @@ -462,6 +465,7 @@ opentelemetry-instrumentation==0.51b0 opentelemetry-instrumentation-aio-pika==0.51b0 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in + # -r requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/_base.in # -r requirements/../../../packages/service-library/requirements/_base.in opentelemetry-instrumentation-asgi==0.51b0 # via opentelemetry-instrumentation-fastapi @@ -617,7 +621,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -699,9 +703,9 @@ pydantic==2.10.6 # fastapi-pagination # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -1105,49 +1109,11 @@ typing-extensions==4.12.2 # types-aiobotocore-ec2 # types-aiobotocore-s3 # types-aiobotocore-ssm + # typing-inspection +typing-inspection==0.4.1 + # via pydantic tzdata==2025.2 # via kombu -ujson==5.10.0 - # via - # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/celery-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt - # -c requirements/../../../requirements/constraints.txt - # fastapi urllib3==2.3.0 # via # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/storage/requirements/_test.txt b/services/storage/requirements/_test.txt index fdb93c0ee5b..321131974e4 100644 --- a/services/storage/requirements/_test.txt +++ b/services/storage/requirements/_test.txt @@ -267,12 +267,12 @@ py-partiql-parser==0.6.1 # via moto pycparser==2.22 # via cffi -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../requirements/constraints.txt # -c requirements/_base.txt # aws-sam-translator -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -414,6 +414,11 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # sqlalchemy2-stubs + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic tzdata==2025.2 # via # -c requirements/_base.txt diff --git a/services/web/server/requirements/_base.txt b/services/web/server/requirements/_base.txt index bf2bc9b11e3..9341737921d 100644 --- a/services/web/server/requirements/_base.txt +++ b/services/web/server/requirements/_base.txt @@ -619,7 +619,7 @@ pycparser==2.21 # via cffi pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -696,9 +696,9 @@ pydantic==2.10.2 # fast-depends # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.9.0 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../../packages/common-library/requirements/_base.in # -r requirements/../../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in @@ -723,7 +723,7 @@ pydantic-extra-types==2.9.0 # -r requirements/../../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/_base.in # -r requirements/../../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in -pydantic-settings==2.5.2 +pydantic-settings==2.7.0 # via # -c requirements/../../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -990,7 +990,11 @@ typing-extensions==4.12.2 # pint # pydantic # pydantic-core + # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.2.3 # via # -c requirements/../../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/web/server/requirements/_test.txt b/services/web/server/requirements/_test.txt index ec3e569a474..55620bcc9f2 100644 --- a/services/web/server/requirements/_test.txt +++ b/services/web/server/requirements/_test.txt @@ -189,13 +189,13 @@ propcache==0.3.1 # yarl py-cpuinfo==9.0.0 # via pytest-benchmark -pydantic==2.10.2 +pydantic==2.11.7 # via # -c requirements/../../../../requirements/constraints.txt # -c requirements/_base.txt # fastapi # fastapi-pagination -pydantic-core==2.27.1 +pydantic-core==2.33.2 # via # -c requirements/_base.txt # pydantic @@ -340,6 +340,11 @@ typing-extensions==4.12.2 # pydantic-core # sqlalchemy2-stubs # typer + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic urllib3==2.2.3 # via # -c requirements/../../../../requirements/constraints.txt diff --git a/tests/e2e-playwright/requirements/_test.txt b/tests/e2e-playwright/requirements/_test.txt index 69a616a9d9a..fef4c0ad90d 100644 --- a/tests/e2e-playwright/requirements/_test.txt +++ b/tests/e2e-playwright/requirements/_test.txt @@ -70,9 +70,9 @@ pluggy==1.5.0 # via # -r requirements/_test_wo_playwright.txt # pytest -pydantic==2.10.6 +pydantic==2.11.7 # via -r requirements/_test_wo_playwright.txt -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via # -r requirements/_test_wo_playwright.txt # pydantic @@ -147,6 +147,11 @@ typing-extensions==4.12.2 # pydantic # pydantic-core # pyee + # typing-inspection +typing-inspection==0.4.1 + # via + # -r requirements/_test_wo_playwright.txt + # pydantic tzdata==2025.1 # via # -r requirements/_test_wo_playwright.txt diff --git a/tests/e2e-playwright/requirements/_test_wo_playwright.txt b/tests/e2e-playwright/requirements/_test_wo_playwright.txt index 6dfdf593d17..269cece4469 100644 --- a/tests/e2e-playwright/requirements/_test_wo_playwright.txt +++ b/tests/e2e-playwright/requirements/_test_wo_playwright.txt @@ -43,9 +43,9 @@ packaging==24.2 # pytest-sugar pluggy==1.5.0 # via pytest -pydantic==2.10.6 +pydantic==2.11.7 # via -r requirements/_test_wo_playwright.in -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic pygments==2.19.2 # via pytest @@ -86,6 +86,9 @@ typing-extensions==4.12.2 # anyio # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic tzdata==2025.1 # via faker urllib3==2.3.0 diff --git a/tests/environment-setup/requirements/requirements.txt b/tests/environment-setup/requirements/requirements.txt index 6f6d70422b9..7824be8418e 100644 --- a/tests/environment-setup/requirements/requirements.txt +++ b/tests/environment-setup/requirements/requirements.txt @@ -8,7 +8,7 @@ packaging==24.2 # pytest-sugar pluggy==1.5.0 # via pytest -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt @@ -20,7 +20,7 @@ pydantic==2.10.6 # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt # -r requirements/requirements.in -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic pygments==2.19.2 # via pytest @@ -56,3 +56,6 @@ typing-extensions==4.12.2 # via # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic diff --git a/tests/performance/requirements/_test.txt b/tests/performance/requirements/_test.txt index 03a956a7cd7..ec69d98e461 100644 --- a/tests/performance/requirements/_test.txt +++ b/tests/performance/requirements/_test.txt @@ -67,13 +67,13 @@ psycogreen==1.0.2 # via locust-plugins psycopg2-binary==2.9.10 # via locust-plugins -pydantic==2.11.5 +pydantic==2.11.7 # via # -r requirements/_test.in # pydantic-settings pydantic-core==2.33.2 # via pydantic -pydantic-settings==2.9.1 +pydantic-settings==2.10.1 # via -r requirements/_test.in python-dotenv==1.1.0 # via pydantic-settings diff --git a/tests/public-api/requirements/_base.txt b/tests/public-api/requirements/_base.txt index 79d2ca83c91..0222d62604a 100644 --- a/tests/public-api/requirements/_base.txt +++ b/tests/public-api/requirements/_base.txt @@ -41,7 +41,7 @@ osparc-client==0.8.3 # via osparc packaging==24.2 # via osparc -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt @@ -50,9 +50,9 @@ pydantic==2.10.6 # osparc # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via -r requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/_base.in pydantic-settings==2.7.0 # via @@ -91,6 +91,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.3.0 # via # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/tests/swarm-deploy/requirements/_test.txt b/tests/swarm-deploy/requirements/_test.txt index ce55e503141..d5fefc2cda2 100644 --- a/tests/swarm-deploy/requirements/_test.txt +++ b/tests/swarm-deploy/requirements/_test.txt @@ -404,7 +404,7 @@ psycopg2-binary==2.9.10 # via sqlalchemy pycryptodome==3.21.0 # via stream-zip -pydantic==2.10.6 +pydantic==2.11.7 # via # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt @@ -458,9 +458,9 @@ pydantic==2.10.6 # fast-depends # pydantic-extra-types # pydantic-settings -pydantic-core==2.27.2 +pydantic-core==2.33.2 # via pydantic -pydantic-extra-types==2.10.2 +pydantic-extra-types==2.10.5 # via # -r requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../packages/models-library/requirements/_base.in @@ -730,6 +730,9 @@ typing-extensions==4.12.2 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic tzdata==2025.1 # via faker urllib3==2.3.0 From 80cfef3fa8193aa36ee729c512edc343e4235a97 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:39:47 +0200 Subject: [PATCH 10/28] Fixes pydantic.warnings.PydanticDeprecatedSince211 pydantic.warnings.PydanticDeprecatedSince211: Accessing the 'model_fields' attribute on the instance is deprecated. Instead, you should access this attribute from the model class. Deprecated in Pydantic V2.11 to be removed in V3.0 --- .../src/models_library/service_settings_labels.py | 5 +++-- .../tests/unit/test_services_solver_job_models_converters.py | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/models-library/src/models_library/service_settings_labels.py b/packages/models-library/src/models_library/service_settings_labels.py index b3e1956caba..9cbfb64b00b 100644 --- a/packages/models-library/src/models_library/service_settings_labels.py +++ b/packages/models-library/src/models_library/service_settings_labels.py @@ -570,8 +570,9 @@ def _not_allowed_in_both_specs(self): "containers_allowed_outgoing_internet", "containers_allowed_outgoing_permit_list", } - if match_keys & set(self.model_fields) != match_keys: - err_msg = f"Expected the following keys {match_keys} to be present {self.model_fields=}" + cls = self.__class__ + if match_keys & set(cls.model_fields) != match_keys: + err_msg = f"Expected the following keys {match_keys} to be present {cls.model_fields=}" raise ValueError(err_msg) if ( diff --git a/services/api-server/tests/unit/test_services_solver_job_models_converters.py b/services/api-server/tests/unit/test_services_solver_job_models_converters.py index 5be97bdca2a..c12bf647b6f 100644 --- a/services/api-server/tests/unit/test_services_solver_job_models_converters.py +++ b/services/api-server/tests/unit/test_services_solver_job_models_converters.py @@ -225,8 +225,10 @@ def fake_url_for(*args, **kwargs) -> HttpUrl: assert job.id == project.uuid + field_names = Job.model_fields.keys() + non_propagated_fields = { - name for name in job.model_fields if name.endswith("url") + name for name in field_names if name.endswith("url") }.union({"name"}) assert all(getattr(job, _) for _ in non_propagated_fields) From 00148b0278fe1d39e8e65eab45cbbd5c07da9dd6 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:40:34 +0200 Subject: [PATCH 11/28] Fixes deprecation of popuplate_by_name populate_by_name usage is not recommended in v2.11+ and will be deprecated in v3. Instead, you should use the validate_by_name configuration setting. https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name --- .../api_schemas_webserver/_base.py | 5 +- .../tests/test__pydantic_models.py | 124 +++++++++++++++++- .../src/settings_library/base.py | 33 ++--- .../src/settings_library/postgres.py | 47 ++++--- .../src/settings_library/utils_cli.py | 3 +- .../tests/test__models_examples.py | 7 + packages/settings-library/tests/test_base.py | 46 ++++--- .../core/settings.py | 8 +- .../projects/models.py | 2 +- .../session/settings.py | 4 +- 10 files changed, 202 insertions(+), 77 deletions(-) diff --git a/packages/models-library/src/models_library/api_schemas_webserver/_base.py b/packages/models-library/src/models_library/api_schemas_webserver/_base.py index 4dfcf1473dd..44ae40ddc51 100644 --- a/packages/models-library/src/models_library/api_schemas_webserver/_base.py +++ b/packages/models-library/src/models_library/api_schemas_webserver/_base.py @@ -1,5 +1,5 @@ """ - Base model classes for schemas in OpenAPI specs (OAS) for this service +Base model classes for schemas in OpenAPI specs (OAS) for this service """ @@ -29,9 +29,8 @@ class InputSchemaWithoutCamelCase(BaseModel): ) -class InputSchema(BaseModel): +class InputSchema(InputSchemaWithoutCamelCase): model_config = ConfigDict( - **InputSchemaWithoutCamelCase.model_config, alias_generator=snake_to_camel, ) diff --git a/packages/models-library/tests/test__pydantic_models.py b/packages/models-library/tests/test__pydantic_models.py index 1d9dc14e3b4..e11f97c0d13 100644 --- a/packages/models-library/tests/test__pydantic_models.py +++ b/packages/models-library/tests/test__pydantic_models.py @@ -1,4 +1,4 @@ -""" This test suite does not intend to re-test pydantic but rather +"""This test suite does not intend to re-test pydantic but rather check some "corner cases" or critical setups with pydantic model such that: - we can ensure a given behaviour is preserved through updates @@ -6,13 +6,14 @@ """ -from typing import Any, Union, get_args, get_origin +from typing import Any, Literal, Union, get_args, get_origin import pytest from common_library.json_serialization import json_dumps from models_library.projects_nodes import InputTypes, OutputTypes from models_library.projects_nodes_io import SimCoreFileLink -from pydantic import BaseModel, Field, TypeAdapter, ValidationError +from models_library.utils.change_case import snake_to_camel +from pydantic import BaseModel, ConfigDict, Field, TypeAdapter, ValidationError from pydantic.types import Json from pydantic.version import version_short @@ -120,7 +121,7 @@ class Func(BaseModel): {"$ref": "#/$defs/DatCoreFileLink"}, {"$ref": "#/$defs/DownloadLink"}, {"type": "array", "items": {}}, - {"type": "object"}, + {"type": "object", "additionalProperties": True}, ], } @@ -154,7 +155,7 @@ class Func(BaseModel): MINIMAL = 2 # <--- index of the example with the minimum required fields assert SimCoreFileLink in get_args(OutputTypes) example = SimCoreFileLink.model_validate( - SimCoreFileLink.model_config["json_schema_extra"]["examples"][MINIMAL] + SimCoreFileLink.model_json_schema()["examples"][MINIMAL] ) model = Func.model_validate( { @@ -183,7 +184,9 @@ def test_nullable_fields_from_pydantic_v1(): # SEE https://github.com/ITISFoundation/osparc-simcore/pull/6751 class MyModel(BaseModel): # pydanticv1 would add a default to fields set as nullable - nullable_required: str | None # <--- This was default to =None in pydantic 1 !!! + nullable_required: ( + str | None + ) # <--- This was default to =None in pydantic 1 !!! nullable_required_with_hyphen: str | None = Field(default=...) nullable_optional: str | None = None @@ -209,3 +212,112 @@ class MyModel(BaseModel): data["nullable_required"] = None model = MyModel.model_validate(data) assert model.model_dump(exclude_unset=True) == data + + +# BELOW some tests related to depreacated `populate_by_name` in pydantic v2.11+ !! +# +# https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name +# +# `populate_by_name` usage is not recommended in v2.11+ and will be deprecated in v3. Instead, you should use the validate_by_name configuration setting. +# When validate_by_name=True and validate_by_alias=True, this is strictly equivalent to the previous behavior of populate_by_name=True. +# In v2.11, we also introduced a validate_by_alias setting that introduces more fine grained control for validation behavior. +# Here's how you might go about using the new settings to achieve the same behavior: +# + + +@pytest.mark.parametrize("extra", ["ignore", "allow", "forbid"]) +@pytest.mark.parametrize( + "validate_by_alias, validate_by_name", + [ + # NOTE: (False, False) is not allowed: at least one has to be True! + # SEE https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.validate_by_alias + (False, True), + (True, False), + (True, True), + ], +) +def test_model_config_validate_by_alias_and_name( + validate_by_alias: bool, + validate_by_name: bool, + extra: Literal["ignore", "allow", "forbid"], +): + class TestModel(BaseModel): + snake_case: str | None = None + + model_config = ConfigDict( + validate_by_alias=validate_by_alias, + validate_by_name=validate_by_name, + extra=extra, + alias_generator=snake_to_camel, + ) + + assert TestModel.model_config.get("populate_by_name") is None + assert TestModel.model_config.get("validate_by_alias") is validate_by_alias + assert TestModel.model_config.get("validate_by_name") is validate_by_name + assert TestModel.model_config.get("extra") == extra + + if validate_by_alias is False: + + if extra == "forbid": + with pytest.raises(ValidationError): + TestModel.model_validate({"snakeCase": "foo"}) + + elif extra == "ignore": + model = TestModel.model_validate({"snakeCase": "foo"}) + assert model.snake_case is None + assert model.model_dump() == {"snake_case": None} + + elif extra == "allow": + model = TestModel.model_validate({"snakeCase": "foo"}) + assert model.snake_case is None + assert model.model_dump() == {"snake_case": None, "snakeCase": "foo"} + + else: + assert TestModel.model_validate({"snakeCase": "foo"}).snake_case == "foo" + + if validate_by_name is False: + if extra == "forbid": + with pytest.raises(ValidationError): + TestModel.model_validate({"snake_case": "foo"}) + + elif extra == "ignore": + model = TestModel.model_validate({"snake_case": "foo"}) + assert model.snake_case is None + assert model.model_dump() == {"snake_case": None} + + elif extra == "allow": + model = TestModel.model_validate({"snake_case": "foo"}) + assert model.snake_case is None + assert model.model_dump() == {"snake_case": "foo"} + else: + assert TestModel.model_validate({"snake_case": "foo"}).snake_case == "foo" + + +@pytest.mark.parametrize("populate_by_name", [True, False]) +def test_model_config_populate_by_name(populate_by_name: bool): + # SEE https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name + class TestModel(BaseModel): + snake_case: str | None = None + + model_config = ConfigDict( + populate_by_name=populate_by_name, + extra="forbid", # easier to check the effect of populate_by_name! + alias_generator=snake_to_camel, + ) + + # checks how they are set + assert TestModel.model_config.get("populate_by_name") is populate_by_name + assert TestModel.model_config.get("extra") == "forbid" + + # NOTE how defaults work with populate_by_name!! + assert TestModel.model_config.get("validate_by_name") == populate_by_name + assert TestModel.model_config.get("validate_by_alias") is True # Default + + # validate_by_alias BEHAVIUOR defaults to True + TestModel.model_validate({"snakeCase": "foo"}) + + if populate_by_name: + assert TestModel.model_validate({"snake_case": "foo"}).snake_case == "foo" + else: + with pytest.raises(ValidationError): + TestModel.model_validate({"snake_case": "foo"}) diff --git a/packages/settings-library/src/settings_library/base.py b/packages/settings-library/src/settings_library/base.py index 9ab3119dfc7..209f39a2888 100644 --- a/packages/settings-library/src/settings_library/base.py +++ b/packages/settings-library/src/settings_library/base.py @@ -1,6 +1,6 @@ import logging from functools import cached_property -from typing import Any, Final, get_origin +from typing import Any, Final from common_library.pydantic_fields_extension import get_type, is_literal, is_nullable from pydantic import ValidationInfo, field_validator @@ -15,9 +15,9 @@ _logger = logging.getLogger(__name__) -_AUTO_DEFAULT_FACTORY_RESOLVES_TO_NONE_FSTRING: Final[ - str -] = "{field_name} auto_default_from_env unresolved, defaulting to None" +_AUTO_DEFAULT_FACTORY_RESOLVES_TO_NONE_FSTRING: Final[str] = ( + "{field_name} auto_default_from_env unresolved, defaulting to None" +) class DefaultFromEnvFactoryError(ValueError): @@ -119,11 +119,13 @@ def _parse_none(cls, v, info: ValidationInfo): model_config = SettingsConfigDict( case_sensitive=True, # All must be capitalized - extra="forbid", + env_parse_none_str="null", + extra="ignore", frozen=True, - validate_default=True, ignored_types=(cached_property,), - env_parse_none_str="null", + validate_by_alias=True, + validate_by_name=True, + validate_default=True, ) @classmethod @@ -133,28 +135,15 @@ def __pydantic_init_subclass__(cls, **kwargs: Any): for name, field in cls.model_fields.items(): auto_default_from_env = _is_auto_default_from_env_enabled(field) field_type = get_type(field) - - # Avoids issubclass raising TypeError. SEE test_issubclass_type_error_with_pydantic_models - is_not_composed = ( - get_origin(field_type) is None - ) # is not composed as dict[str, Any] or Generic[Base] is_not_literal = not is_literal(field) - if ( - is_not_literal - and is_not_composed - and issubclass(field_type, BaseCustomSettings) - ): + if is_not_literal and issubclass(field_type, BaseCustomSettings): if auto_default_from_env: # Builds a default factory `Field(default_factory=create_settings_from_env(field))` field.default_factory = _create_settings_from_env(name, field) field.default = None - elif ( - is_not_literal - and is_not_composed - and issubclass(field_type, BaseSettings) - ): + elif is_not_literal and issubclass(field_type, BaseSettings): msg = f"{cls}.{name} of type {field_type} must inherit from BaseCustomSettings" raise ValueError(msg) diff --git a/packages/settings-library/src/settings_library/postgres.py b/packages/settings-library/src/settings_library/postgres.py index 83aa960c92c..82aa39ad067 100644 --- a/packages/settings-library/src/settings_library/postgres.py +++ b/packages/settings-library/src/settings_library/postgres.py @@ -10,6 +10,7 @@ ValidationInfo, field_validator, ) +from pydantic.config import JsonDict from pydantic_settings import SettingsConfigDict from .base import BaseCustomSettings @@ -41,7 +42,6 @@ class PostgresSettings(BaseCustomSettings): Field( description="Name of the application connecting the postgres database, will default to use the host hostname (hostname on linux)", validation_alias=AliasChoices( - "POSTGRES_CLIENT_NAME", # This is useful when running inside a docker container, then the hostname is set each client gets a different name "HOST", "HOSTNAME", @@ -103,17 +103,34 @@ def _update_query(self, uri: str) -> str: return urlunparse(parsed_uri._replace(query=updated_query)) return uri - model_config = SettingsConfigDict( - json_schema_extra={ - "examples": [ - # minimal required - { - "POSTGRES_HOST": "localhost", - "POSTGRES_PORT": "5432", - "POSTGRES_USER": "usr", - "POSTGRES_PASSWORD": "secret", - "POSTGRES_DB": "db", - } - ], - } - ) + @staticmethod + def _update_json_schema_extra(schema: JsonDict) -> None: + schema.update( + { + "examples": [ + # minimal required + { + "POSTGRES_HOST": "localhost", + "POSTGRES_PORT": "5432", + "POSTGRES_USER": "usr", + "POSTGRES_PASSWORD": "secret", + "POSTGRES_DB": "db", + }, + # full example + { + "POSTGRES_HOST": "localhost", + "POSTGRES_PORT": "5432", + "POSTGRES_USER": "usr", + "POSTGRES_PASSWORD": "secret", + "POSTGRES_DB": "db", + "POSTGRES_MINSIZE": 1, + "POSTGRES_MAXSIZE": 50, + "POSTGRES_CLIENT_NAME": "my_app", # first-choice + "HOST": "should be ignored", + "HOST_NAME": "should be ignored", + }, + ], + } + ) + + model_config = SettingsConfigDict(json_schema_extra=_update_json_schema_extra) diff --git a/packages/settings-library/src/settings_library/utils_cli.py b/packages/settings-library/src/settings_library/utils_cli.py index 106b1d6fb74..7115c547768 100644 --- a/packages/settings-library/src/settings_library/utils_cli.py +++ b/packages/settings-library/src/settings_library/utils_cli.py @@ -26,8 +26,9 @@ def print_as_envfile( **pydantic_export_options, ): exclude_unset = pydantic_export_options.get("exclude_unset", False) + settings_cls = settings_obj.__class__ - for name, field in settings_obj.model_fields.items(): + for name, field in settings_cls.model_fields.items(): auto_default_from_env = ( field.json_schema_extra is not None and field.json_schema_extra.get("auto_default_from_env", False) diff --git a/packages/settings-library/tests/test__models_examples.py b/packages/settings-library/tests/test__models_examples.py index c93ed934cf1..c701835b0a8 100644 --- a/packages/settings-library/tests/test__models_examples.py +++ b/packages/settings-library/tests/test__models_examples.py @@ -17,6 +17,13 @@ def test_all_settings_library_models_config_examples( model_cls: type[BaseModel], example_name: str, example_data: Any ): + assert ( + model_cls.model_config.get("validate_by_alias") is True + ), f"validate_by_alias must be enabled in {model_cls}" + assert ( + model_cls.model_config.get("validate_by_name") is True + ), f"validate_by_name must be enabled in {model_cls}" + assert_validation_model( model_cls, example_name=example_name, example_data=example_data ) diff --git a/packages/settings-library/tests/test_base.py b/packages/settings-library/tests/test_base.py index 3a94448b510..026abdfc5d6 100644 --- a/packages/settings-library/tests/test_base.py +++ b/packages/settings-library/tests/test_base.py @@ -335,28 +335,34 @@ class SettingsClassExt(SettingsClass): } -def test_issubclass_type_error_with_pydantic_models(): - # There is a problem - # - # TypeError: issubclass() arg 1 must be a class - # - # SEE https://github.com/pydantic/pydantic/issues/545 - # - # >> issubclass(dict, BaseSettings) - # False - # >> issubclass(dict[str, str], BaseSettings) - # Traceback (most recent call last): - # File "", line 1, in - # File "/home/crespo/.pyenv/versions/3.10.13/lib/python3.10/abc.py", line 123, in __subclasscheck__ - # return _abc_subclasscheck(cls, subclass) - # TypeError: issubclass() arg 1 must be a class - # +def test_fixed_issubclass_type_error_with_pydantic_models(): assert not issubclass(dict, BaseSettings) - - # NOTE: this should be fixed by pydantic at some point. When this happens, this test will fail - with pytest.raises(TypeError): - issubclass(dict[str, str], BaseSettings) + assert not issubclass( + # FIXED with + # + # pydantic 2.11.7 + # pydantic_core 2.33.2 + # pydantic-extra-types 2.10.5 + # pydantic-settings 2.7.0 + # + # + # TypeError: issubclass() arg 1 must be a class + # + # SEE https://github.com/pydantic/pydantic/issues/545 + # + # >> issubclass(dict, BaseSettings) + # False + # >> issubclass(dict[str, str], BaseSettings) + # Traceback (most recent call last): + # File "", line 1, in + # File "/home/crespo/.pyenv/versions/3.10.13/lib/python3.10/abc.py", line 123, in __subclasscheck__ + # return _abc_subclasscheck(cls, subclass) + # TypeError: issubclass() arg 1 must be a class + # + dict[str, str], + BaseSettings, + ) # here reproduces the problem with our settings that ANE and PC had class SettingsClassThatFailed(BaseCustomSettings): diff --git a/services/api-server/src/simcore_service_api_server/core/settings.py b/services/api-server/src/simcore_service_api_server/core/settings.py index cf734ed1040..a6def225fd3 100644 --- a/services/api-server/src/simcore_service_api_server/core/settings.py +++ b/services/api-server/src/simcore_service_api_server/core/settings.py @@ -34,9 +34,7 @@ class WebServerSettings(WebServerBaseSettings, MixinSessionSettings): description="Secret key to encrypt cookies. " 'TIP: python3 -c "from cryptography.fernet import *; print(Fernet.generate_key())"', min_length=44, - validation_alias=AliasChoices( - "SESSION_SECRET_KEY", "WEBSERVER_SESSION_SECRET_KEY" - ), + validation_alias=AliasChoices("SESSION_SECRET_KEY"), ), ] WEBSERVER_SESSION_NAME: str = DEFAULT_SESSION_COOKIE_NAME @@ -65,9 +63,7 @@ class BasicSettings(BaseCustomSettings, MixinLoggingSettings): LOG_LEVEL: Annotated[ LogLevel, Field( - validation_alias=AliasChoices( - "API_SERVER_LOGLEVEL", "LOG_LEVEL", "LOGLEVEL" - ), + validation_alias=AliasChoices("API_SERVER_LOGLEVEL", "LOGLEVEL"), ), ] = LogLevel.INFO diff --git a/services/web/server/src/simcore_service_webserver/projects/models.py b/services/web/server/src/simcore_service_webserver/projects/models.py index 03d595d741c..e754bde1cf2 100644 --- a/services/web/server/src/simcore_service_webserver/projects/models.py +++ b/services/web/server/src/simcore_service_webserver/projects/models.py @@ -112,7 +112,7 @@ class ProjectPatchInternalExtended(ProjectPatch): trashed_by: UserID | None trashed_explicitly: bool - model_config = ConfigDict(populate_by_name=True, extra="forbid") + model_config = ConfigDict(validate_by_name=True, extra="forbid") def to_domain_model(self) -> dict[str, Any]: return remap_keys( diff --git a/services/web/server/src/simcore_service_webserver/session/settings.py b/services/web/server/src/simcore_service_webserver/session/settings.py index 4e1c99dac68..8ed7aa397c9 100644 --- a/services/web/server/src/simcore_service_webserver/session/settings.py +++ b/services/web/server/src/simcore_service_webserver/session/settings.py @@ -21,9 +21,7 @@ class SessionSettings(BaseCustomSettings, MixinSessionSettings): description="Secret key to encrypt cookies. " 'TIP: python3 -c "from cryptography.fernet import *; print(Fernet.generate_key())"', min_length=44, - validation_alias=AliasChoices( - "SESSION_SECRET_KEY", "WEBSERVER_SESSION_SECRET_KEY" - ), + validation_alias=AliasChoices("WEBSERVER_SESSION_SECRET_KEY"), ), ] From 355cbdf7a44ebd4e4c455fa583b5d95dd575d1fa Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 14:48:57 +0200 Subject: [PATCH 12/28] cleanup --- requirements/constraints.txt | 11 +++++------ services/web/server/requirements/constraints.txt | 3 --- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 706be29d117..d0740890e2f 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -50,6 +50,11 @@ httpx!=0.28.0 # Waiting for fix in respx: https://github.com/lundberg/respx/pul # pydantic>=2.10.0 # Avoids inter-version compatibility serialization errors as: _pickle.UnpicklingError: NEWOBJ class argument must be a type, not _AnnotatedAlias +# avoid downgrades of openapi-spec-validator related libraries +referencing<=0.35.1 + +# See issue https://github.com/ITISFoundation/osparc-simcore/issues/7300 +pydantic-settings<2.7.1 # @@ -66,9 +71,3 @@ pennsieve>=999999999 # User alternative e.g. parametrized fixture or request.getfixturevalue(.) pytest-lazy-fixture>=999999999 - -# avoid downgrades of openapi-spec-validator related libraries -referencing<=0.35.1 - -# See issue https://github.com/ITISFoundation/osparc-simcore/issues/7300 -pydantic-settings<2.7.1 diff --git a/services/web/server/requirements/constraints.txt b/services/web/server/requirements/constraints.txt index 71c712593cb..da024164311 100644 --- a/services/web/server/requirements/constraints.txt +++ b/services/web/server/requirements/constraints.txt @@ -7,6 +7,3 @@ # SEE services/web/server/tests/unit/isolated/test_utils.py::test_yarl_new_url_generation for properly usage yarl>=1.8.2 frozenlist>=1.3.1 - -# See: https://github.com/pydantic/pydantic/issues/4011 -pydantic>=1.10 From e62498f5c6ad39c1bbf70a675c6fbda455d1ea9d Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 14:50:19 +0200 Subject: [PATCH 13/28] upgrades pydantic --- api/tests/requirements.txt | 4 ++-- ci/helpers/requirements/requirements.txt | 3 +++ packages/aws-library/requirements/_base.txt | 3 +++ packages/notifications-library/requirements/_base.txt | 3 +++ packages/postgres-database/requirements/_base.txt | 3 +++ packages/service-integration/requirements/_base.txt | 3 +++ packages/service-library/requirements/_base.txt | 3 +++ packages/simcore-sdk/requirements/_base.txt | 3 +++ requirements/constraints.txt | 6 +++--- services/agent/requirements/_base.txt | 3 +++ services/api-server/requirements/_base.txt | 3 +++ services/catalog/requirements/_base.txt | 3 +++ services/datcore-adapter/requirements/_base.txt | 3 +++ services/director/requirements/_base.txt | 3 +++ services/invitations/requirements/_base.txt | 3 +++ services/payments/requirements/_base.txt | 3 +++ services/web/server/requirements/_base.txt | 4 +++- services/web/server/requirements/_test.txt | 5 +++++ tests/public-api/requirements/_base.txt | 3 +++ 19 files changed, 58 insertions(+), 6 deletions(-) diff --git a/api/tests/requirements.txt b/api/tests/requirements.txt index c4c2337ad6d..cb1405f4c0e 100644 --- a/api/tests/requirements.txt +++ b/api/tests/requirements.txt @@ -1,6 +1,6 @@ aiohappyeyeballs==2.6.1 # via aiohttp -aiohttp==3.12.13 +aiohttp==3.12.14 # via # -c ../../requirements/constraints.txt # -r requirements.in @@ -11,7 +11,7 @@ attrs==25.3.0 # aiohttp # jsonschema # referencing -certifi==2025.6.15 +certifi==2025.7.9 # via # -c ../../requirements/constraints.txt # requests diff --git a/ci/helpers/requirements/requirements.txt b/ci/helpers/requirements/requirements.txt index cdd59388d9d..6d023c4a3ec 100644 --- a/ci/helpers/requirements/requirements.txt +++ b/ci/helpers/requirements/requirements.txt @@ -58,6 +58,9 @@ typing-extensions==4.14.1 # fastapi # pydantic # pydantic-core + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../requirements/constraints.txt diff --git a/packages/aws-library/requirements/_base.txt b/packages/aws-library/requirements/_base.txt index 913c3e1d90a..9b99e72ea68 100644 --- a/packages/aws-library/requirements/_base.txt +++ b/packages/aws-library/requirements/_base.txt @@ -417,6 +417,9 @@ typing-extensions==4.14.1 # types-aiobotocore-ec2 # types-aiobotocore-s3 # types-aiobotocore-ssm + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/notifications-library/requirements/_base.txt b/packages/notifications-library/requirements/_base.txt index 9abe83b5cf9..7909138f23a 100644 --- a/packages/notifications-library/requirements/_base.txt +++ b/packages/notifications-library/requirements/_base.txt @@ -174,5 +174,8 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic yarl==1.18.3 # via -r requirements/../../../packages/postgres-database/requirements/_base.in diff --git a/packages/postgres-database/requirements/_base.txt b/packages/postgres-database/requirements/_base.txt index fb7f69c12f5..ad96d677f66 100644 --- a/packages/postgres-database/requirements/_base.txt +++ b/packages/postgres-database/requirements/_base.txt @@ -49,5 +49,8 @@ typing-extensions==4.14.1 # pydantic # pydantic-core # pydantic-extra-types + # typing-inspection +typing-inspection==0.4.1 + # via pydantic yarl==1.18.3 # via -r requirements/_base.in diff --git a/packages/service-integration/requirements/_base.txt b/packages/service-integration/requirements/_base.txt index 843ff785bfe..869172883c5 100644 --- a/packages/service-integration/requirements/_base.txt +++ b/packages/service-integration/requirements/_base.txt @@ -162,6 +162,9 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/service-library/requirements/_base.txt b/packages/service-library/requirements/_base.txt index 39210d4638f..3a8a3cfe4e3 100644 --- a/packages/service-library/requirements/_base.txt +++ b/packages/service-library/requirements/_base.txt @@ -291,6 +291,9 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/packages/simcore-sdk/requirements/_base.txt b/packages/simcore-sdk/requirements/_base.txt index 03709069203..82c65e06d1a 100644 --- a/packages/simcore-sdk/requirements/_base.txt +++ b/packages/simcore-sdk/requirements/_base.txt @@ -475,6 +475,9 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/requirements/constraints.txt b/requirements/constraints.txt index d0740890e2f..b839fb276dc 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -50,12 +50,12 @@ httpx!=0.28.0 # Waiting for fix in respx: https://github.com/lundberg/respx/pul # pydantic>=2.10.0 # Avoids inter-version compatibility serialization errors as: _pickle.UnpicklingError: NEWOBJ class argument must be a type, not _AnnotatedAlias -# avoid downgrades of openapi-spec-validator related libraries -referencing<=0.35.1 - # See issue https://github.com/ITISFoundation/osparc-simcore/issues/7300 pydantic-settings<2.7.1 +# avoid downgrades of openapi-spec-validator related libraries +referencing<=0.35.1 + # # Blocked ----------------------------------------------------------------------------------------- diff --git a/services/agent/requirements/_base.txt b/services/agent/requirements/_base.txt index db4ebaccde1..3d223fe81c8 100644 --- a/services/agent/requirements/_base.txt +++ b/services/agent/requirements/_base.txt @@ -481,6 +481,9 @@ typing-extensions==4.14.1 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/api-server/requirements/_base.txt b/services/api-server/requirements/_base.txt index b15f39eb84e..b93d186b0dd 100644 --- a/services/api-server/requirements/_base.txt +++ b/services/api-server/requirements/_base.txt @@ -856,6 +856,9 @@ typing-extensions==4.14.1 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/catalog/requirements/_base.txt b/services/catalog/requirements/_base.txt index c5cf41284ec..a69012ff573 100644 --- a/services/catalog/requirements/_base.txt +++ b/services/catalog/requirements/_base.txt @@ -561,6 +561,9 @@ typing-extensions==4.14.1 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/datcore-adapter/requirements/_base.txt b/services/datcore-adapter/requirements/_base.txt index 66f0fe04893..5fc065474e5 100644 --- a/services/datcore-adapter/requirements/_base.txt +++ b/services/datcore-adapter/requirements/_base.txt @@ -501,6 +501,9 @@ typing-extensions==4.14.1 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/director/requirements/_base.txt b/services/director/requirements/_base.txt index c76eb5a48cb..733fdc9a602 100644 --- a/services/director/requirements/_base.txt +++ b/services/director/requirements/_base.txt @@ -480,6 +480,9 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/invitations/requirements/_base.txt b/services/invitations/requirements/_base.txt index a384221a10c..361e11fb160 100644 --- a/services/invitations/requirements/_base.txt +++ b/services/invitations/requirements/_base.txt @@ -498,6 +498,9 @@ typing-extensions==4.14.1 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/payments/requirements/_base.txt b/services/payments/requirements/_base.txt index 2c7846b4310..e1a012cbb07 100644 --- a/services/payments/requirements/_base.txt +++ b/services/payments/requirements/_base.txt @@ -614,6 +614,9 @@ typing-extensions==4.14.1 # pydantic-extra-types # rich-toolkit # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/web/server/requirements/_base.txt b/services/web/server/requirements/_base.txt index 621ac167307..b2a23208960 100644 --- a/services/web/server/requirements/_base.txt +++ b/services/web/server/requirements/_base.txt @@ -652,7 +652,6 @@ pydantic==2.11.7 # -c requirements/../../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../../packages/simcore-sdk/requirements/../../../requirements/constraints.txt # -c requirements/../../../../requirements/constraints.txt - # -c requirements/./constraints.txt # -r requirements/../../../../packages/common-library/requirements/_base.in # -r requirements/../../../../packages/models-library/requirements/../../../packages/common-library/requirements/_base.in # -r requirements/../../../../packages/models-library/requirements/_base.in @@ -989,6 +988,9 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../../packages/common-library/requirements/../../../requirements/constraints.txt diff --git a/services/web/server/requirements/_test.txt b/services/web/server/requirements/_test.txt index 1c9e2daecf1..8f7e0133255 100644 --- a/services/web/server/requirements/_test.txt +++ b/services/web/server/requirements/_test.txt @@ -342,6 +342,11 @@ typing-extensions==4.14.1 # pydantic-core # sqlalchemy2-stubs # typer + # typing-inspection +typing-inspection==0.4.1 + # via + # -c requirements/_base.txt + # pydantic urllib3==2.5.0 # via # -c requirements/../../../../requirements/constraints.txt diff --git a/tests/public-api/requirements/_base.txt b/tests/public-api/requirements/_base.txt index 2c7c7a0b666..60bd286eb25 100644 --- a/tests/public-api/requirements/_base.txt +++ b/tests/public-api/requirements/_base.txt @@ -91,6 +91,9 @@ typing-extensions==4.14.1 # pydantic-core # pydantic-extra-types # typer + # typing-inspection +typing-inspection==0.4.1 + # via pydantic urllib3==2.5.0 # via # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt From 6eb6a3d9439596abb03e0f944d847565ffce978a Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 16:36:25 +0200 Subject: [PATCH 14/28] minor --- .../tests/test__pydantic_models.py | 2 +- .../tests/test__pydantic_settings.py | 62 +++++++++++++++++-- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/packages/models-library/tests/test__pydantic_models.py b/packages/models-library/tests/test__pydantic_models.py index e11f97c0d13..4e2aa2f4a23 100644 --- a/packages/models-library/tests/test__pydantic_models.py +++ b/packages/models-library/tests/test__pydantic_models.py @@ -214,7 +214,7 @@ class MyModel(BaseModel): assert model.model_dump(exclude_unset=True) == data -# BELOW some tests related to depreacated `populate_by_name` in pydantic v2.11+ !! +# BELOW some tests related to deprecated `populate_by_name` in pydantic v2.11+ !! # # https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.populate_by_name # diff --git a/packages/settings-library/tests/test__pydantic_settings.py b/packages/settings-library/tests/test__pydantic_settings.py index eb2989852cb..242dcadd890 100644 --- a/packages/settings-library/tests/test__pydantic_settings.py +++ b/packages/settings-library/tests/test__pydantic_settings.py @@ -2,7 +2,7 @@ # pylint: disable=unused-argument # pylint: disable=unused-variable -""" Tests subtle details about pydantic models +"""Tests subtle details about pydantic models This test suite intends to "freeze" some concepts/invariants from pydantic upon which we are going to build this libraries. @@ -12,14 +12,25 @@ """ -from typing import Annotated +from collections.abc import Callable +from typing import Annotated, Any import pytest from common_library.basic_types import LogLevel from common_library.pydantic_fields_extension import is_nullable -from pydantic import AliasChoices, Field, ValidationInfo, field_validator +from pydantic import ( + AliasChoices, + AmqpDsn, + BaseModel, + Field, + ImportString, + PostgresDsn, + RedisDsn, + ValidationInfo, + field_validator, +) from pydantic_core import PydanticUndefined -from pydantic_settings import BaseSettings +from pydantic_settings import BaseSettings, SettingsConfigDict from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict from settings_library.application import BaseApplicationSettings @@ -198,3 +209,46 @@ def test_pydantic_serialization_user_warning(monkeypatch: pytest.MonkeyPatch): settings = _TestSettings.create_from_envs() assert settings.APP_LOGLEVEL == LogLevel.DEBUG assert settings.model_dump_json(indent=2) + + +def test_it(): + class SubModel(BaseModel): + foo: str = "bar" + apple: int = 1 + + class Settings(BaseSettings): + auth_key: str = Field(validation_alias="my_auth_key") + + api_key: str = Field(alias="my_api_key") + + redis_dsn: RedisDsn = Field( + "redis://user:pass@localhost:6379/1", + validation_alias=AliasChoices("service_redis_dsn", "redis_url"), + ) + pg_dsn: PostgresDsn = "postgres://user:pass@localhost:5432/foobar" + amqp_dsn: AmqpDsn = "amqp://user:pass@localhost:5672/" + + special_function: ImportString[Callable[[Any], Any]] = "math.cos" + + # to override domains: + # export my_prefix_domains='["foo.com", "bar.com"]' + domains: set[str] = set() + + # to override more_settings: + # export my_prefix_more_settings='{"foo": "x", "apple": 1}' + more_settings: SubModel = SubModel() + + model_config = SettingsConfigDict(env_prefix="my_prefix_") + + import math + + assert Settings().model_dump() == { + "auth_key": "xxx", + "api_key": "xxx", + "redis_dsn": RedisDsn("redis://user:pass@localhost:6379/1"), + "pg_dsn": PostgresDsn("postgres://user:pass@localhost:5432/foobar"), + "amqp_dsn": AmqpDsn("amqp://user:pass@localhost:5672/"), + "special_function": math.cos, + "domains": set(), + "more_settings": {"foo": "bar", "apple": 1}, + } From 4773e3c4de41a3c1091d31bb0f5c94715afd42fc Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 16:48:55 +0200 Subject: [PATCH 15/28] feat: add `populate_by_name` option to `BaseCustomSettings` for compatibility with pydantic v2.11+ feat: include `POSTGRES_CLIENT_NAME` as a validation alias in `PostgresSettings` --- packages/settings-library/src/settings_library/base.py | 1 + packages/settings-library/src/settings_library/postgres.py | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/settings-library/src/settings_library/base.py b/packages/settings-library/src/settings_library/base.py index 209f39a2888..791bf8e04ef 100644 --- a/packages/settings-library/src/settings_library/base.py +++ b/packages/settings-library/src/settings_library/base.py @@ -123,6 +123,7 @@ def _parse_none(cls, v, info: ValidationInfo): extra="ignore", frozen=True, ignored_types=(cached_property,), + populate_by_name=True, # deprecated in pydantic v2.11+ validate_by_alias=True, validate_by_name=True, validate_default=True, diff --git a/packages/settings-library/src/settings_library/postgres.py b/packages/settings-library/src/settings_library/postgres.py index 82aa39ad067..2a53ef57bce 100644 --- a/packages/settings-library/src/settings_library/postgres.py +++ b/packages/settings-library/src/settings_library/postgres.py @@ -43,6 +43,7 @@ class PostgresSettings(BaseCustomSettings): description="Name of the application connecting the postgres database, will default to use the host hostname (hostname on linux)", validation_alias=AliasChoices( # This is useful when running inside a docker container, then the hostname is set each client gets a different name + "POSTGRES_CLIENT_NAME", "HOST", "HOSTNAME", ), From 3e9b7c27b3066cf4e14627e83f150f8ef806ad38 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 17:18:49 +0200 Subject: [PATCH 16/28] fix: update model field access to use class reference in serialization and settings --- .../src/common_library/serialization.py | 8 ++- .../src/settings_library/base.py | 4 +- .../tests/test__pydantic_settings.py | 53 +------------------ .../tests/test_base_w_postgres.py | 4 +- .../core/settings.py | 4 +- 5 files changed, 16 insertions(+), 57 deletions(-) diff --git a/packages/common-library/src/common_library/serialization.py b/packages/common-library/src/common_library/serialization.py index 70dd53e13c4..a24f0e7e96e 100644 --- a/packages/common-library/src/common_library/serialization.py +++ b/packages/common-library/src/common_library/serialization.py @@ -11,7 +11,9 @@ def model_dump_with_secrets( ) -> dict[str, Any]: data = settings_obj.model_dump(**pydantic_export_options) - for field_name in settings_obj.model_fields: + settings_cls = settings_obj.__class__ + + for field_name in settings_cls.model_fields: if field_name not in data: continue @@ -29,7 +31,9 @@ def model_dump_with_secrets( data[field_name] = str(field_data) elif isinstance(field_data, dict): - possible_pydantic_model = settings_obj.model_fields[field_name].annotation + possible_pydantic_model = settings_obj.__class__.model_fields[ + field_name + ].annotation # NOTE: data could be a dict which does not represent a pydantic model or a union of models with contextlib.suppress(AttributeError, ValidationError): data[field_name] = model_dump_with_secrets( diff --git a/packages/settings-library/src/settings_library/base.py b/packages/settings-library/src/settings_library/base.py index 791bf8e04ef..8c5a06488ca 100644 --- a/packages/settings-library/src/settings_library/base.py +++ b/packages/settings-library/src/settings_library/base.py @@ -120,10 +120,10 @@ def _parse_none(cls, v, info: ValidationInfo): model_config = SettingsConfigDict( case_sensitive=True, # All must be capitalized env_parse_none_str="null", - extra="ignore", + extra="ignore", # NOTE: if "strict" then fields with multiple aliases defined in the envs will fail to validate! frozen=True, ignored_types=(cached_property,), - populate_by_name=True, # deprecated in pydantic v2.11+ + populate_by_name=True, # NOTE: populate_by_name deprecated in pydantic v2.11+ validate_by_alias=True, validate_by_name=True, validate_default=True, diff --git a/packages/settings-library/tests/test__pydantic_settings.py b/packages/settings-library/tests/test__pydantic_settings.py index 242dcadd890..a2d06c8a3ef 100644 --- a/packages/settings-library/tests/test__pydantic_settings.py +++ b/packages/settings-library/tests/test__pydantic_settings.py @@ -12,25 +12,19 @@ """ -from collections.abc import Callable -from typing import Annotated, Any +from typing import Annotated import pytest from common_library.basic_types import LogLevel from common_library.pydantic_fields_extension import is_nullable from pydantic import ( AliasChoices, - AmqpDsn, - BaseModel, Field, - ImportString, - PostgresDsn, - RedisDsn, ValidationInfo, field_validator, ) from pydantic_core import PydanticUndefined -from pydantic_settings import BaseSettings, SettingsConfigDict +from pydantic_settings import BaseSettings from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict from settings_library.application import BaseApplicationSettings @@ -209,46 +203,3 @@ def test_pydantic_serialization_user_warning(monkeypatch: pytest.MonkeyPatch): settings = _TestSettings.create_from_envs() assert settings.APP_LOGLEVEL == LogLevel.DEBUG assert settings.model_dump_json(indent=2) - - -def test_it(): - class SubModel(BaseModel): - foo: str = "bar" - apple: int = 1 - - class Settings(BaseSettings): - auth_key: str = Field(validation_alias="my_auth_key") - - api_key: str = Field(alias="my_api_key") - - redis_dsn: RedisDsn = Field( - "redis://user:pass@localhost:6379/1", - validation_alias=AliasChoices("service_redis_dsn", "redis_url"), - ) - pg_dsn: PostgresDsn = "postgres://user:pass@localhost:5432/foobar" - amqp_dsn: AmqpDsn = "amqp://user:pass@localhost:5672/" - - special_function: ImportString[Callable[[Any], Any]] = "math.cos" - - # to override domains: - # export my_prefix_domains='["foo.com", "bar.com"]' - domains: set[str] = set() - - # to override more_settings: - # export my_prefix_more_settings='{"foo": "x", "apple": 1}' - more_settings: SubModel = SubModel() - - model_config = SettingsConfigDict(env_prefix="my_prefix_") - - import math - - assert Settings().model_dump() == { - "auth_key": "xxx", - "api_key": "xxx", - "redis_dsn": RedisDsn("redis://user:pass@localhost:6379/1"), - "pg_dsn": PostgresDsn("postgres://user:pass@localhost:5432/foobar"), - "amqp_dsn": AmqpDsn("amqp://user:pass@localhost:5672/"), - "special_function": math.cos, - "domains": set(), - "more_settings": {"foo": "bar", "apple": 1}, - } diff --git a/packages/settings-library/tests/test_base_w_postgres.py b/packages/settings-library/tests/test_base_w_postgres.py index 1597e9edf99..67021222204 100644 --- a/packages/settings-library/tests/test_base_w_postgres.py +++ b/packages/settings-library/tests/test_base_w_postgres.py @@ -62,7 +62,9 @@ class _FakePostgresSettings(BaseCustomSettings): str | None, Field( validation_alias=AliasChoices( - "HOST", "HOSTNAME", "POSTGRES_CLIENT_NAME" + "POSTGRES_CLIENT_NAME", + "HOST", + "HOSTNAME", ), ), ] = None diff --git a/services/api-server/src/simcore_service_api_server/core/settings.py b/services/api-server/src/simcore_service_api_server/core/settings.py index a6def225fd3..59f6812b896 100644 --- a/services/api-server/src/simcore_service_api_server/core/settings.py +++ b/services/api-server/src/simcore_service_api_server/core/settings.py @@ -34,7 +34,9 @@ class WebServerSettings(WebServerBaseSettings, MixinSessionSettings): description="Secret key to encrypt cookies. " 'TIP: python3 -c "from cryptography.fernet import *; print(Fernet.generate_key())"', min_length=44, - validation_alias=AliasChoices("SESSION_SECRET_KEY"), + validation_alias=AliasChoices( + "WEBSERVER_SESSION_SECRET_KEY", "SESSION_SECRET_KEY" + ), ), ] WEBSERVER_SESSION_NAME: str = DEFAULT_SESSION_COOKIE_NAME From 0cc449b196372d4b07bc0e753c13bf892e648b71 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:09:43 +0200 Subject: [PATCH 17/28] fix: update test to use BaseSettings instead of BaseModel for compatibility --- packages/settings-library/tests/test__models_examples.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/settings-library/tests/test__models_examples.py b/packages/settings-library/tests/test__models_examples.py index c701835b0a8..beaaefc8880 100644 --- a/packages/settings-library/tests/test__models_examples.py +++ b/packages/settings-library/tests/test__models_examples.py @@ -2,7 +2,7 @@ import pytest import settings_library -from pydantic import BaseModel +from pydantic_settings import BaseSettings from pytest_simcore.pydantic_models import ( assert_validation_model, walk_model_examples_in_package, @@ -14,9 +14,12 @@ walk_model_examples_in_package(settings_library), ) def test_all_settings_library_models_config_examples( - model_cls: type[BaseModel], example_name: str, example_data: Any + model_cls: type[BaseSettings], example_name: str, example_data: Any ): + assert ( + model_cls.model_config.get("populate_by_name") is True + ), f"populate_by_name must be enabled in {model_cls}. It will be deprecated in the future but for now it is required to use aliases in the settings" assert ( model_cls.model_config.get("validate_by_alias") is True ), f"validate_by_alias must be enabled in {model_cls}" From bbc85dc557a32958d22c92198e7e1368313c268a Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:11:25 +0200 Subject: [PATCH 18/28] chore: update openapi.json for improved documentation clarity --- services/payments/openapi.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/payments/openapi.json b/services/payments/openapi.json index 3a0aaf09fb7..5809e58228e 100644 --- a/services/payments/openapi.json +++ b/services/payments/openapi.json @@ -449,6 +449,9 @@ }, "docs_url": { "type": "string", + "maxLength": 2083, + "minLength": 1, + "format": "uri", "title": "Docs Url" } }, From c0a6112b0473b95958cd9c66e24433bc772cd736 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:14:40 +0200 Subject: [PATCH 19/28] fix: add additionalProperties to JSON schemas for improved flexibility --- services/dynamic-sidecar/openapi.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/dynamic-sidecar/openapi.json b/services/dynamic-sidecar/openapi.json index 442005a03c1..05584f5eceb 100644 --- a/services/dynamic-sidecar/openapi.json +++ b/services/dynamic-sidecar/openapi.json @@ -139,6 +139,7 @@ "application/json": { "schema": { "type": "object", + "additionalProperties": true, "title": "Response Containers Docker Inspect V1 Containers Get" } } @@ -261,7 +262,8 @@ "type": "string" }, { - "type": "object" + "type": "object", + "additionalProperties": true } ], "title": "Response Get Containers Name V1 Containers Name Get" @@ -304,6 +306,7 @@ "application/json": { "schema": { "type": "object", + "additionalProperties": true, "title": "Response Inspect Container V1 Containers Id Get" } } @@ -986,6 +989,7 @@ "title": "Service Resources" }, "service_additional_metadata": { + "additionalProperties": true, "type": "object", "title": "Service Additional Metadata" } @@ -1230,6 +1234,7 @@ "contentSchema": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { From 2e5f8c3c33902b9f12a5df498951426695ef6e1f Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:14:42 +0200 Subject: [PATCH 20/28] =?UTF-8?q?services/dynamic-sidecar=20version:=201.2?= =?UTF-8?q?.0=20=E2=86=92=201.2.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/dynamic-sidecar/VERSION | 2 +- services/dynamic-sidecar/setup.cfg | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/dynamic-sidecar/VERSION b/services/dynamic-sidecar/VERSION index 26aaba0e866..6085e946503 100644 --- a/services/dynamic-sidecar/VERSION +++ b/services/dynamic-sidecar/VERSION @@ -1 +1 @@ -1.2.0 +1.2.1 diff --git a/services/dynamic-sidecar/setup.cfg b/services/dynamic-sidecar/setup.cfg index e02fb54d462..92696537f9a 100644 --- a/services/dynamic-sidecar/setup.cfg +++ b/services/dynamic-sidecar/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.2.0 +current_version = 1.2.1 commit = True message = services/dynamic-sidecar version: {current_version} → {new_version} tag = False @@ -10,9 +10,9 @@ commit_args = --no-verify [tool:pytest] asyncio_mode = auto asyncio_default_fixture_loop_scope = function -markers = +markers = testit: "marks test to run during development" [mypy] -plugins = +plugins = pydantic.mypy From f5235319f5f1d6cbb9b4c33a729e501e8d247e97 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:27:08 +0200 Subject: [PATCH 21/28] fix: update openapi specifications to enhance flexibility and validation --- services/catalog/openapi.json | 8 + services/dynamic-sidecar/openapi.json | 2 +- services/resource-usage-tracker/openapi.json | 3 + services/storage/openapi.json | 4 +- .../api/v0/openapi.yaml | 168 ++++++++++++++++-- 5 files changed, 165 insertions(+), 20 deletions(-) diff --git a/services/catalog/openapi.json b/services/catalog/openapi.json index 4295d0ebd1c..bca3a991b70 100644 --- a/services/catalog/openapi.json +++ b/services/catalog/openapi.json @@ -172,6 +172,7 @@ "application/json": { "schema": { "type": "object", + "additionalProperties": true, "title": "Response Get Service Labels V0 Services Service Key Service Version Labels Get" } } @@ -839,6 +840,7 @@ "Runtime": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -1534,6 +1536,7 @@ "Global": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -1556,6 +1559,7 @@ "GlobalJob": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -2688,6 +2692,7 @@ "title": "Classifiers" }, "quality": { + "additionalProperties": true, "type": "object", "title": "Quality", "default": {} @@ -2933,6 +2938,7 @@ "contentSchema": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -3044,6 +3050,7 @@ "contentSchema": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -3130,6 +3137,7 @@ "content_schema": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { diff --git a/services/dynamic-sidecar/openapi.json b/services/dynamic-sidecar/openapi.json index 05584f5eceb..5e51d9d362a 100644 --- a/services/dynamic-sidecar/openapi.json +++ b/services/dynamic-sidecar/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "simcore-service-dynamic-sidecar", "description": "Implements a sidecar service to manage user's dynamic/interactive services", - "version": "1.2.0" + "version": "1.2.1" }, "servers": [ { diff --git a/services/resource-usage-tracker/openapi.json b/services/resource-usage-tracker/openapi.json index cef757856bf..984751d5748 100644 --- a/services/resource-usage-tracker/openapi.json +++ b/services/resource-usage-tracker/openapi.json @@ -605,6 +605,9 @@ }, "docs_url": { "type": "string", + "maxLength": 2083, + "minLength": 1, + "format": "uri", "title": "Docs Url" } }, diff --git a/services/storage/openapi.json b/services/storage/openapi.json index 6f73e78bce7..51e3e74b36d 100644 --- a/services/storage/openapi.json +++ b/services/storage/openapi.json @@ -1374,6 +1374,7 @@ "description": "Application's version" }, "services": { + "additionalProperties": true, "type": "object", "title": "Services", "description": "Other backend services connected from this service", @@ -1382,6 +1383,7 @@ "sessions": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -1812,6 +1814,7 @@ "data": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -2511,7 +2514,6 @@ "title": "S3 Secret Key" } }, - "additionalProperties": false, "type": "object", "required": [ "S3_ACCESS_KEY", diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml index 60d8dc97b91..1a4b330fcdb 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml @@ -8488,6 +8488,7 @@ components: AccountRequestInfo: properties: form: + additionalProperties: true type: object title: Form captcha: @@ -8556,6 +8557,7 @@ components: - type: 'null' title: Color attributes: + additionalProperties: true type: object title: Attributes description: svg attributes @@ -8579,6 +8581,7 @@ components: type: string title: Color attributes: + additionalProperties: true type: object title: Attributes description: svg attributes @@ -8675,6 +8678,9 @@ components: apiBaseUrl: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Apibaseurl apiKey: @@ -8717,13 +8723,15 @@ components: title: Version description: Application's version services: + additionalProperties: true type: object title: Services description: Other backend services connected from this service default: {} sessions: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Sessions description: Client sessions info. If single session per app, then is denoted @@ -8732,12 +8740,16 @@ components: url: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Url description: Link to current resource diagnostics_url: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Diagnostics Url description: Link to diagnostics report sub-resource. This MIGHT take some @@ -8854,11 +8866,17 @@ components: thumbnail: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Thumbnail icon: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Icon descriptionUi: @@ -8910,6 +8928,7 @@ components: - type: 'null' title: Classifiers quality: + additionalProperties: true type: object title: Quality release: @@ -9073,11 +9092,17 @@ components: thumbnail: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Thumbnail icon: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Icon descriptionUi: @@ -9131,6 +9156,7 @@ components: - type: 'null' title: Classifiers quality: + additionalProperties: true type: object title: Quality history: @@ -9273,6 +9299,7 @@ components: - type: 'null' title: Classifiers quality: + additionalProperties: true type: object title: Quality default: {} @@ -9411,11 +9438,15 @@ components: task url: type: string + minLength: 1 + format: uri title: Url description: the link where to get the status of the task stop_url: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Stop Url description: the link where to stop the task @@ -9442,6 +9473,7 @@ components: state: $ref: '#/components/schemas/RunningState' info: + additionalProperties: true type: object title: Info submittedAt: @@ -9464,6 +9496,7 @@ components: type: string title: Rootprojectname projectCustomMetadata: + additionalProperties: true type: object title: Projectcustommetadata type: object @@ -9527,6 +9560,7 @@ components: type: number title: Progress image: + additionalProperties: true type: object title: Image startedAt: @@ -9544,6 +9578,8 @@ components: logDownloadLink: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Logdownloadlink nodeName: @@ -9967,9 +10003,11 @@ components: EmailTestPassed: properties: fixtures: + additionalProperties: true type: object title: Fixtures info: + additionalProperties: true type: object title: Info type: object @@ -10009,6 +10047,8 @@ components: data: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Data error: @@ -11014,7 +11054,8 @@ components: properties: data: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Data error: @@ -11837,6 +11878,8 @@ components: properties: state: type: string + minLength: 1 + format: uri title: State type: object required: @@ -11871,9 +11914,13 @@ components: properties: abort_upload: type: string + minLength: 1 + format: uri title: Abort Upload complete_upload: type: string + minLength: 1 + format: uri title: Complete Upload type: object required: @@ -11889,6 +11936,8 @@ components: urls: items: type: string + minLength: 1 + format: uri type: array title: Urls links: @@ -12117,6 +12166,8 @@ components: thumbnail: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Thumbnail description: url to the group thumbnail @@ -12413,6 +12464,9 @@ components: title: Created invitationLink: type: string + maxLength: 2083 + minLength: 1 + format: uri title: Invitationlink type: object required: @@ -12437,6 +12491,7 @@ components: JSONFunctionInputSchema: properties: schema_content: + additionalProperties: true type: object title: JSON Schema description: JSON Schema @@ -12451,6 +12506,7 @@ components: JSONFunctionOutputSchema: properties: schema_content: + additionalProperties: true type: object title: JSON Schema description: JSON Schema @@ -12580,11 +12636,17 @@ components: categoryIcon: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Categoryicon termsOfUseUrl: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Termsofuseurl createdAt: @@ -13214,6 +13276,10 @@ components: thumbnail: anyOf: - type: string + - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Thumbnail description: url of the latest screenshot of the node @@ -13387,7 +13453,6 @@ components: exclusiveMinimum: true title: Serviceport description: port to access the service within the network - default: 8080 maximum: 65535 minimum: 0 serviceBasepath: @@ -13424,6 +13489,7 @@ components: - serviceKey - serviceVersion - serviceHost + - servicePort - serviceState - userId title: NodeGet @@ -13466,6 +13532,7 @@ components: NodeOutputs: properties: outputs: + additionalProperties: true type: object title: Outputs type: object @@ -13520,12 +13587,14 @@ components: title: Progress bootOptions: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Bootoptions outputs: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Outputs type: object @@ -13556,9 +13625,15 @@ components: properties: thumbnail_url: type: string + maxLength: 2083 + minLength: 1 + format: uri title: Thumbnail Url file_url: type: string + maxLength: 2083 + minLength: 1 + format: uri title: File Url mimetype: anyOf: @@ -14134,6 +14209,9 @@ components: title: Paymentmethodid paymentMethodFormUrl: type: string + maxLength: 2083 + minLength: 1 + format: uri title: Paymentmethodformurl description: Link to external site that holds the payment submission form type: object @@ -14191,6 +14269,9 @@ components: invoiceUrl: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Invoiceurl type: object @@ -14339,6 +14420,7 @@ components: type: string title: Country extras: + additionalProperties: true type: object title: Extras description: Keeps extra information provided in the request form. @@ -14370,6 +14452,8 @@ components: properties: link: type: string + minLength: 1 + format: uri title: Link type: object required: @@ -14585,13 +14669,15 @@ components: description: Short display name for SMS vendor: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Vendor description: vendor attributes issues: anyOf: - items: + additionalProperties: true type: object type: array - type: 'null' @@ -14600,6 +14686,7 @@ components: manuals: anyOf: - items: + additionalProperties: true type: object type: array - type: 'null' @@ -14608,12 +14695,14 @@ components: support: anyOf: - items: + additionalProperties: true type: object type: array - type: 'null' title: Support description: List of support resources loginSettings: + additionalProperties: true type: object title: Loginsettings maxOpenStudiesPerUser: @@ -14668,6 +14757,7 @@ components: type: string title: Productname ui: + additionalProperties: true type: object title: Ui description: Front-end owned ui product configuration @@ -14805,7 +14895,8 @@ components: application/schema+json: '#/components/schemas/JSONFunctionOutputSchema' defaultInputs: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Defaultinputs projectId: @@ -14834,6 +14925,9 @@ components: thumbnail: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: string const: '' title: Thumbnail @@ -14896,6 +14990,7 @@ components: title: Classifiers default: [] quality: + additionalProperties: true type: object title: Quality default: {} @@ -14907,7 +15002,8 @@ components: title: Ui dev: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Dev permalink: @@ -15032,6 +15128,9 @@ components: thumbnail: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: string const: '' title: Thumbnail @@ -15094,6 +15193,7 @@ components: title: Classifiers default: [] quality: + additionalProperties: true type: object title: Quality default: {} @@ -15105,7 +15205,8 @@ components: title: Ui dev: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Dev permalink: @@ -15202,7 +15303,8 @@ components: title: Kind content_schema: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Content Schema description: jsonschema for the port's value. SEE https://json-schema.org/understanding-json-schema/ @@ -15301,7 +15403,8 @@ components: title: Classifiers dev: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Dev ui: @@ -15310,7 +15413,8 @@ components: - type: 'null' quality: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Quality templateType: @@ -15323,6 +15427,9 @@ components: properties: url: type: string + maxLength: 2083 + minLength: 1 + format: uri title: Url is_public: type: boolean @@ -15378,6 +15485,9 @@ components: title: Shareeemail confirmationLink: type: string + maxLength: 2083 + minLength: 1 + format: uri title: Confirmationlink type: object required: @@ -15623,7 +15733,8 @@ components: application/schema+json: '#/components/schemas/JSONFunctionOutputSchema' defaultInputs: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Defaultinputs uid: @@ -15680,7 +15791,8 @@ components: application/schema+json: '#/components/schemas/JSONFunctionOutputSchema' defaultInputs: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Defaultinputs uid: @@ -15889,7 +16001,6 @@ components: exclusiveMinimum: true title: Service Port description: the service swarm internal port - default: 8080 maximum: 65535 minimum: 0 published_port: @@ -15927,6 +16038,7 @@ components: - project_id - service_uuid - service_host + - service_port - service_state title: RunningDynamicServiceDetails RunningState: @@ -15995,6 +16107,9 @@ components: description: Long description of the service thumbnail: type: string + maxLength: 2083 + minLength: 1 + format: uri title: Thumbnail description: Url to service thumbnail file_extensions: @@ -16005,6 +16120,9 @@ components: description: File extensions that this service can process view_url: type: string + maxLength: 2083 + minLength: 1 + format: uri title: View Url description: Redirection to open a service in osparc (see /view) type: object @@ -16075,7 +16193,8 @@ components: is allowed contentSchema: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Contentschema description: jsonschema of this input/output. Required when type='ref_contentSchema' @@ -16192,7 +16311,8 @@ components: is allowed contentSchema: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Contentschema description: jsonschema of this input/output. Required when type='ref_contentSchema' @@ -16545,7 +16665,8 @@ components: application/schema+json: '#/components/schemas/JSONFunctionOutputSchema' defaultInputs: anyOf: - - type: object + - additionalProperties: true + type: object - type: 'null' title: Defaultinputs solverKey: @@ -16711,6 +16832,9 @@ components: icon: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Icon workbench: @@ -17001,6 +17125,7 @@ components: title: Template Name default: registration_email.jinja2 template_context: + additionalProperties: true type: object title: Template Context default: {} @@ -17248,6 +17373,7 @@ components: - type: 'null' title: Country extras: + additionalProperties: true type: object title: Extras description: Keeps extra information provided in the request form @@ -17529,6 +17655,9 @@ components: description: Identifier for the file type view_url: type: string + maxLength: 2083 + minLength: 1 + format: uri title: View Url description: Base url to execute viewer. Needs appending file_size,[file_name] and download_link as query parameters @@ -17684,6 +17813,9 @@ components: paymentFormUrl: anyOf: - type: string + maxLength: 2083 + minLength: 1 + format: uri - type: 'null' title: Paymentformurl description: Link to external site that holds the payment submission form.None From 7b4bb19cc5d76276e089115723f8842d48580409 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:28:01 +0200 Subject: [PATCH 22/28] api-server --- services/api-server/openapi.json | 35 +++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/services/api-server/openapi.json b/services/api-server/openapi.json index 883c72b81cb..beb0f3e802d 100644 --- a/services/api-server/openapi.json +++ b/services/api-server/openapi.json @@ -5669,7 +5669,8 @@ "schema": { "anyOf": [ { - "type": "object" + "type": "object", + "additionalProperties": true }, { "type": "null" @@ -7529,7 +7530,8 @@ "schema": { "anyOf": [ { - "type": "object" + "type": "object", + "additionalProperties": true }, { "type": "null" @@ -7649,7 +7651,8 @@ "schema": { "anyOf": [ { - "type": "object" + "type": "object", + "additionalProperties": true }, { "type": "null" @@ -7783,7 +7786,8 @@ "items": { "anyOf": [ { - "type": "object" + "type": "object", + "additionalProperties": true }, { "type": "null" @@ -8249,6 +8253,7 @@ "JSONFunctionInputSchema": { "properties": { "schema_content": { + "additionalProperties": true, "type": "object", "title": "JSON Schema", "description": "JSON Schema", @@ -8267,6 +8272,7 @@ "JSONFunctionOutputSchema": { "properties": { "schema_content": { + "additionalProperties": true, "type": "object", "title": "JSON Schema", "description": "JSON Schema", @@ -9994,6 +10000,7 @@ "default_inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10037,6 +10044,7 @@ "inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10048,6 +10056,7 @@ "outputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10126,6 +10135,7 @@ "default_inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10168,6 +10178,7 @@ "inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10179,6 +10190,7 @@ "outputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10290,6 +10302,7 @@ "default_inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10345,6 +10358,7 @@ "inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10356,6 +10370,7 @@ "outputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10446,6 +10461,7 @@ "default_inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10500,6 +10516,7 @@ "inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10511,6 +10528,7 @@ "outputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10595,6 +10613,7 @@ "default_inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10656,6 +10675,7 @@ "inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10667,6 +10687,7 @@ "outputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10907,6 +10928,7 @@ "default_inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10956,6 +10978,7 @@ "inputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -10967,6 +10990,7 @@ "outputs": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -11015,6 +11039,7 @@ "content_schema": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -11098,6 +11123,7 @@ "content_schema": { "anyOf": [ { + "additionalProperties": true, "type": "object" }, { @@ -11261,7 +11287,6 @@ }, "workspace_path": { "type": "string", - "pattern": "^workspace/.*", "format": "path", "title": "Workspace Path", "description": "The file's relative path within the job's workspace directory. E.g. 'workspace/myfile.txt'" From eae547f65c401ebee8f92c467b6003c479d074a7 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:28:07 +0200 Subject: [PATCH 23/28] =?UTF-8?q?services/api-server=20version:=200.9.1=20?= =?UTF-8?q?=E2=86=92=200.9.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/api-server/VERSION | 2 +- services/api-server/setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/api-server/VERSION b/services/api-server/VERSION index f374f6662e9..2003b639c40 100644 --- a/services/api-server/VERSION +++ b/services/api-server/VERSION @@ -1 +1 @@ -0.9.1 +0.9.2 diff --git a/services/api-server/setup.cfg b/services/api-server/setup.cfg index 6f7fe90adca..6bd6174290b 100644 --- a/services/api-server/setup.cfg +++ b/services/api-server/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.9.1 +current_version = 0.9.2 commit = True message = services/api-server version: {current_version} → {new_version} tag = False From 6a43d7911d34fc550571df4c801363fd73bceb76 Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:28:16 +0200 Subject: [PATCH 24/28] =?UTF-8?q?services/catalog=20version:=200.8.1=20?= =?UTF-8?q?=E2=86=92=200.8.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/catalog/VERSION | 2 +- services/catalog/setup.cfg | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/catalog/VERSION b/services/catalog/VERSION index c18d72be303..53a48a1e8c6 100644 --- a/services/catalog/VERSION +++ b/services/catalog/VERSION @@ -1 +1 @@ -0.8.1 \ No newline at end of file +0.8.2 \ No newline at end of file diff --git a/services/catalog/setup.cfg b/services/catalog/setup.cfg index 812aa1c836c..cce4210c9f9 100644 --- a/services/catalog/setup.cfg +++ b/services/catalog/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.8.1 +current_version = 0.8.2 commit = True message = services/catalog version: {current_version} → {new_version} tag = False @@ -10,10 +10,10 @@ commit_args = --no-verify [tool:pytest] asyncio_mode = auto asyncio_default_fixture_loop_scope = function -markers = +markers = testit: "marks test to run during development" [mypy] -plugins = +plugins = pydantic.mypy sqlalchemy.ext.mypy.plugin From 39834d7449d85f1588932d18bb31994b91ecf99c Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:28:47 +0200 Subject: [PATCH 25/28] =?UTF-8?q?services/resource-usage-tracker=20version?= =?UTF-8?q?:=201.0.0=20=E2=86=92=201.0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/resource-usage-tracker/VERSION | 2 +- services/resource-usage-tracker/setup.cfg | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/services/resource-usage-tracker/VERSION b/services/resource-usage-tracker/VERSION index 3eefcb9dd5b..7dea76edb3d 100644 --- a/services/resource-usage-tracker/VERSION +++ b/services/resource-usage-tracker/VERSION @@ -1 +1 @@ -1.0.0 +1.0.1 diff --git a/services/resource-usage-tracker/setup.cfg b/services/resource-usage-tracker/setup.cfg index 1dbddd94448..361d4cd4c06 100644 --- a/services/resource-usage-tracker/setup.cfg +++ b/services/resource-usage-tracker/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1.0.0 +current_version = 1.0.1 commit = True message = services/resource-usage-tracker version: {current_version} → {new_version} tag = False @@ -10,9 +10,10 @@ commit_args = --no-verify [tool:pytest] asyncio_mode = auto asyncio_default_fixture_loop_scope = function -markers = +markers = testit: "marks test to run during development" + [mypy] -plugins = +plugins = pydantic.mypy sqlalchemy.ext.mypy.plugin From 3e8f4672b9c743e3e9a79d021a1c68fbf7db942e Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:28:56 +0200 Subject: [PATCH 26/28] =?UTF-8?q?services/storage=20api=20version:=200.7.0?= =?UTF-8?q?=20=E2=86=92=200.7.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/storage/VERSION | 2 +- services/storage/setup.cfg | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/storage/VERSION b/services/storage/VERSION index faef31a4357..39e898a4f95 100644 --- a/services/storage/VERSION +++ b/services/storage/VERSION @@ -1 +1 @@ -0.7.0 +0.7.1 diff --git a/services/storage/setup.cfg b/services/storage/setup.cfg index 6c4b25275d5..34668cb65b9 100644 --- a/services/storage/setup.cfg +++ b/services/storage/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.7.0 +current_version = 0.7.1 commit = True message = services/storage api version: {current_version} → {new_version} tag = False @@ -10,13 +10,13 @@ commit_args = --no-verify [tool:pytest] asyncio_mode = auto asyncio_default_fixture_loop_scope = function -markers = +markers = slow: marks tests as slow (deselect with '-m "not slow"') acceptance_test: "marks tests as 'acceptance tests' i.e. does the system do what the user expects? Typically those are workflows." testit: "marks test to run during development" heavy_load: "mark tests that require large amount of data" [mypy] -plugins = +plugins = pydantic.mypy sqlalchemy.ext.mypy.plugin From 4d7efc89e1ac90ee742795c76078d73cebccad9f Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:29:04 +0200 Subject: [PATCH 27/28] =?UTF-8?q?services/webserver=20api=20version:=200.7?= =?UTF-8?q?1.0=20=E2=86=92=200.71.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/web/server/VERSION | 2 +- services/web/server/setup.cfg | 2 +- .../server/src/simcore_service_webserver/api/v0/openapi.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/web/server/VERSION b/services/web/server/VERSION index e6c73154d93..5e5d529aada 100644 --- a/services/web/server/VERSION +++ b/services/web/server/VERSION @@ -1 +1 @@ -0.71.0 +0.71.1 diff --git a/services/web/server/setup.cfg b/services/web/server/setup.cfg index 05cf7cceee2..a7d95433e23 100644 --- a/services/web/server/setup.cfg +++ b/services/web/server/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.71.0 +current_version = 0.71.1 commit = True message = services/webserver api version: {current_version} → {new_version} tag = False diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml index 1a4b330fcdb..a349ccfc223 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml @@ -2,7 +2,7 @@ openapi: 3.1.0 info: title: simcore-service-webserver description: Main service with an interface (http-API & websockets) to the web front-end - version: 0.71.0 + version: 0.71.1 servers: - url: '' description: webserver From fdd2beb2ce2383710429fdcab44586f0b57b983b Mon Sep 17 00:00:00 2001 From: Pedro Crespo-Valero <32402063+pcrespov@users.noreply.github.com> Date: Mon, 14 Jul 2025 09:34:53 +0200 Subject: [PATCH 28/28] updates versions --- services/api-server/openapi.json | 2 +- services/catalog/openapi.json | 2 +- services/resource-usage-tracker/openapi.json | 2 +- services/storage/openapi.json | 2 +- .../server/src/simcore_service_webserver/api/v0/openapi.yaml | 4 ++++ 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/services/api-server/openapi.json b/services/api-server/openapi.json index beb0f3e802d..2543e1d0a79 100644 --- a/services/api-server/openapi.json +++ b/services/api-server/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "osparc.io public API", "description": "osparc-simcore public API specifications", - "version": "0.9.1" + "version": "0.9.2" }, "paths": { "/v0/meta": { diff --git a/services/catalog/openapi.json b/services/catalog/openapi.json index bca3a991b70..652ef43537e 100644 --- a/services/catalog/openapi.json +++ b/services/catalog/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "simcore-service-catalog", "description": "Manages and maintains a catalog of all published components (e.g. macro-algorithms, scripts, etc)", - "version": "0.8.1" + "version": "0.8.2" }, "paths": { "/": { diff --git a/services/resource-usage-tracker/openapi.json b/services/resource-usage-tracker/openapi.json index 984751d5748..abad2c654aa 100644 --- a/services/resource-usage-tracker/openapi.json +++ b/services/resource-usage-tracker/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "simcore-service-resource-usage-tracker web API", "description": "Service that collects and stores computational resources usage used in osparc-simcore", - "version": "1.0.0" + "version": "1.0.1" }, "paths": { "/": { diff --git a/services/storage/openapi.json b/services/storage/openapi.json index 51e3e74b36d..527eec0d03c 100644 --- a/services/storage/openapi.json +++ b/services/storage/openapi.json @@ -3,7 +3,7 @@ "info": { "title": "simcore_service_storage", "description": "Service that manages osparc storage backend", - "version": "0.7.0" + "version": "0.7.1" }, "paths": { "/v0/": { diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml index cde9eb05fad..6bad4a0bb53 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml @@ -9398,6 +9398,7 @@ components: state: $ref: '#/components/schemas/RunningState' info: + additionalProperties: true type: object title: Info submittedAt: @@ -9446,6 +9447,7 @@ components: type: number title: Progress image: + additionalProperties: true type: object title: Image startedAt: @@ -9463,6 +9465,8 @@ components: logDownloadLink: anyOf: - type: string + minLength: 1 + format: uri - type: 'null' title: Logdownloadlink osparcCredits: