From e6a3ece5deb4f0d3b977b6d7296ba92946163d82 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:00:53 +0000 Subject: [PATCH 01/10] Checkpoint AFTER step 0 - Rule 1 Timestamp: 2025-06-02 19:00:53.544 Step ID: 0 Title: Rule 1 --- scripts/filestash/create_config.py | 10 +++++++++- .../director/src/simcore_service_director/config.py | 10 +++++++++- .../director/src/simcore_service_director/producer.py | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/scripts/filestash/create_config.py b/scripts/filestash/create_config.py index cd9476f0722..c0ddc40e8d1 100644 --- a/scripts/filestash/create_config.py +++ b/scripts/filestash/create_config.py @@ -10,7 +10,15 @@ import string import tempfile -from distutils.util import strtobool +def strtobool(val): + """Convert a string representation of truth to true (1) or false (0).""" + val = val.lower() + if val in ('y', 'yes', 't', 'true', 'on', '1'): + return 1 + elif val in ('n', 'no', 'f', 'false', 'off', '0'): + return 0 + else: + raise ValueError(f"invalid truth value {val!r}") from pathlib import Path from string import Template diff --git a/services/director/src/simcore_service_director/config.py b/services/director/src/simcore_service_director/config.py index 187c963a853..2bb254ac032 100644 --- a/services/director/src/simcore_service_director/config.py +++ b/services/director/src/simcore_service_director/config.py @@ -3,7 +3,15 @@ import logging import os -from distutils.util import strtobool +def strtobool(val): + """Convert a string representation of truth to true (1) or false (0).""" + val = val.lower() + if val in ('y', 'yes', 't', 'true', 'on', '1'): + return 1 + elif val in ('n', 'no', 'f', 'false', 'off', '0'): + return 0 + else: + raise ValueError(f"invalid truth value {val!r}") from typing import Dict, Optional from servicelib.client_session import ( # pylint: disable=no-name-in-module diff --git a/services/director/src/simcore_service_director/producer.py b/services/director/src/simcore_service_director/producer.py index a34f06508fc..2fddcddd455 100644 --- a/services/director/src/simcore_service_director/producer.py +++ b/services/director/src/simcore_service_director/producer.py @@ -3,7 +3,7 @@ import logging import re from datetime import datetime, timedelta -from distutils.version import StrictVersion +from packaging.version import Version as StrictVersion from enum import Enum from http import HTTPStatus from pprint import pformat From f6c658319cde338a0a2ceb863062b62bfb42ccef Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:02:12 +0000 Subject: [PATCH 02/10] Checkpoint AFTER step 2 - Rule 3 Timestamp: 2025-06-02 19:02:12.349 Step ID: 2 Title: Rule 3 --- .../tests/aiohttp/test_incidents_monitoring.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/service-library/tests/aiohttp/test_incidents_monitoring.py b/packages/service-library/tests/aiohttp/test_incidents_monitoring.py index b822ca1fce5..80fb746948a 100644 --- a/packages/service-library/tests/aiohttp/test_incidents_monitoring.py +++ b/packages/service-library/tests/aiohttp/test_incidents_monitoring.py @@ -26,12 +26,12 @@ def incidents_manager(event_loop): incidents = [] monitor_slow_callbacks.enable(slow_duration_secs=0.2, incidents=incidents) - f1a = asyncio.ensure_future(slow_task(0.3), loop=event_loop) - f1b = asyncio.ensure_future(slow_task(0.3), loop=event_loop) - f1c = asyncio.ensure_future(slow_task(0.4), loop=event_loop) + f1a = asyncio.ensure_future(slow_task(0.3)) + f1b = asyncio.ensure_future(slow_task(0.3)) + f1c = asyncio.ensure_future(slow_task(0.4)) incidents_pg = None # aiopg_utils.monitor_pg_responsiveness.enable() - f2 = asyncio.ensure_future(fails_to_reach_pg_db(), loop=event_loop) + f2 = asyncio.ensure_future(fails_to_reach_pg_db()) yield {"slow_callback": incidents, "posgres_responsive": incidents_pg} From 2a75a7bca0992db8c4fb128a4b1e7b1299bd9977 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:05:55 +0000 Subject: [PATCH 03/10] Checkpoint AFTER step 4 - Rule 5 Timestamp: 2025-06-02 19:05:55.392 Step ID: 4 Title: Rule 5 --- .../dask-task-models-library/pyproject.toml | 22 +++++++++++ packages/models-library/pyproject.toml | 22 +++++++++++ packages/postgres-database/pyproject.toml | 38 +++++++++++++++++++ packages/pytest-simcore/pyproject.toml | 22 +++++++++++ packages/service-integration/pyproject.toml | 22 +++++++++++ packages/service-library/pyproject.toml | 22 +++++++++++ packages/settings-library/pyproject.toml | 22 +++++++++++ packages/simcore-sdk/pyproject.toml | 19 ++++++++++ services/agent/pyproject.toml | 22 +++++++++++ services/api-server/pyproject.toml | 22 +++++++++++ services/autoscaling/pyproject.toml | 22 +++++++++++ services/catalog/pyproject.toml | 22 +++++++++++ services/dask-sidecar/pyproject.toml | 22 +++++++++++ services/datcore-adapter/pyproject.toml | 22 +++++++++++ services/director-v2/pyproject.toml | 22 +++++++++++ services/director/pyproject.toml | 22 +++++++++++ services/dynamic-sidecar/pyproject.toml | 22 +++++++++++ services/invitations/pyproject.toml | 22 +++++++++++ services/osparc-gateway-server/pyproject.toml | 22 +++++++++++ services/storage/pyproject.toml | 22 +++++++++++ services/web/server/pyproject.toml | 22 +++++++++++ 21 files changed, 475 insertions(+) create mode 100644 packages/dask-task-models-library/pyproject.toml create mode 100644 packages/models-library/pyproject.toml create mode 100644 packages/postgres-database/pyproject.toml create mode 100644 packages/pytest-simcore/pyproject.toml create mode 100644 packages/service-integration/pyproject.toml create mode 100644 packages/service-library/pyproject.toml create mode 100644 packages/settings-library/pyproject.toml create mode 100644 packages/simcore-sdk/pyproject.toml create mode 100644 services/agent/pyproject.toml create mode 100644 services/api-server/pyproject.toml create mode 100644 services/autoscaling/pyproject.toml create mode 100644 services/catalog/pyproject.toml create mode 100644 services/dask-sidecar/pyproject.toml create mode 100644 services/datcore-adapter/pyproject.toml create mode 100644 services/director-v2/pyproject.toml create mode 100644 services/director/pyproject.toml create mode 100644 services/dynamic-sidecar/pyproject.toml create mode 100644 services/invitations/pyproject.toml create mode 100644 services/osparc-gateway-server/pyproject.toml create mode 100644 services/storage/pyproject.toml create mode 100644 services/web/server/pyproject.toml diff --git a/packages/dask-task-models-library/pyproject.toml b/packages/dask-task-models-library/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/packages/dask-task-models-library/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/packages/models-library/pyproject.toml b/packages/models-library/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/packages/models-library/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/packages/postgres-database/pyproject.toml b/packages/postgres-database/pyproject.toml new file mode 100644 index 00000000000..9c1f3a5b1ec --- /dev/null +++ b/packages/postgres-database/pyproject.toml @@ -0,0 +1,38 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "simcore-postgres-database" +dynamic = ["version"] +description = "Database models served by the simcore 'postgres' core service" +authors = [{name = "Pedro Crespo (pcrespov)"}] +license = {text = "MIT license"} +readme = "README.md" +requires-python = ">=3.10" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] +dynamic = ["version", "dependencies", "optional-dependencies"] + +[project.scripts] +simcore-postgres-database = "simcore_postgres_database.cli:main" +sc-pg = "simcore_postgres_database.cli:main" + +[tool.setuptools.dynamic] +version = {file = "VERSION"} +dependencies = {file = ["requirements/_base.in"]} + +[tool.setuptools.dynamic.optional-dependencies] +migration = {file = ["requirements/_migration.in"]} +test = {file = ["requirements/_test.txt"]} + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools.package-data] +"*" = ["*.ini", "migration/*.py", "migration/*.mako", "migration/versions/*.py"] \ No newline at end of file diff --git a/packages/pytest-simcore/pyproject.toml b/packages/pytest-simcore/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/packages/pytest-simcore/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/packages/service-integration/pyproject.toml b/packages/service-integration/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/packages/service-integration/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/packages/service-library/pyproject.toml b/packages/service-library/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/packages/service-library/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/packages/settings-library/pyproject.toml b/packages/settings-library/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/packages/settings-library/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/packages/simcore-sdk/pyproject.toml b/packages/simcore-sdk/pyproject.toml new file mode 100644 index 00000000000..30832a5f9ff --- /dev/null +++ b/packages/simcore-sdk/pyproject.toml @@ -0,0 +1,19 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "simcore-sdk" +dynamic = ["version"] +requires-python = ">=3.10" +dynamic = ["version", "dependencies", "optional-dependencies"] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} +dependencies = {file = ["requirements/_base.in"]} + +[tool.setuptools.dynamic.optional-dependencies] +test = {file = ["requirements/_test.txt"]} + +[tool.setuptools.packages.find] +where = ["src"] \ No newline at end of file diff --git a/services/agent/pyproject.toml b/services/agent/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/agent/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/api-server/pyproject.toml b/services/api-server/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/api-server/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/autoscaling/pyproject.toml b/services/autoscaling/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/autoscaling/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/catalog/pyproject.toml b/services/catalog/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/catalog/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/dask-sidecar/pyproject.toml b/services/dask-sidecar/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/dask-sidecar/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/datcore-adapter/pyproject.toml b/services/datcore-adapter/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/datcore-adapter/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/director-v2/pyproject.toml b/services/director-v2/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/director-v2/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/director/pyproject.toml b/services/director/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/director/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/dynamic-sidecar/pyproject.toml b/services/dynamic-sidecar/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/dynamic-sidecar/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/invitations/pyproject.toml b/services/invitations/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/invitations/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/osparc-gateway-server/pyproject.toml b/services/osparc-gateway-server/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/osparc-gateway-server/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/storage/pyproject.toml b/services/storage/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/storage/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] diff --git a/services/web/server/pyproject.toml b/services/web/server/pyproject.toml new file mode 100644 index 00000000000..67be2b1ebca --- /dev/null +++ b/services/web/server/pyproject.toml @@ -0,0 +1,22 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +dynamic = ["name", "version", "description", "authors", "dependencies", "optional-dependencies"] +requires-python = ">=3.10" +license = {text = "MIT license"} +readme = "README.md" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.10", +] + +[tool.setuptools.dynamic] +version = {file = "VERSION"} + +[tool.setuptools.packages.find] +where = ["src"] From 3bfe90b63cdcae1948d342ca715604fb63a1c651 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:08:00 +0000 Subject: [PATCH 04/10] Checkpoint AFTER step 5 - Rule 6 Timestamp: 2025-06-02 19:08:00.014 Step ID: 5 Title: Rule 6 --- packages/dask-task-models-library/setup.py | 2 +- packages/models-library/setup.py | 2 +- packages/postgres-database/setup.py | 1 + packages/pytest-simcore/setup.py | 2 +- packages/service-integration/setup.py | 2 +- packages/service-library/setup.py | 2 +- packages/settings-library/setup.py | 1 + packages/simcore-sdk/setup.py | 2 +- services/agent/setup.py | 2 +- services/api-server/setup.py | 2 +- services/autoscaling/setup.py | 2 +- services/catalog/setup.py | 2 +- services/dask-sidecar/setup.py | 2 +- services/datcore-adapter/setup.py | 2 +- services/director-v2/setup.py | 2 +- services/director/setup.py | 2 +- services/dynamic-sidecar/setup.py | 2 +- services/invitations/setup.py | 2 +- services/osparc-gateway-server/setup.py | 2 +- services/storage/setup.py | 2 +- services/web/server/setup.py | 2 +- 21 files changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/dask-task-models-library/setup.py b/packages/dask-task-models-library/setup.py index 3745ccf3420..3cfd848f319 100644 --- a/packages/dask-task-models-library/setup.py +++ b/packages/dask-task-models-library/setup.py @@ -36,7 +36,7 @@ def read_reqs(reqs_path: Path) -> set[str]: version=Path(CURRENT_DIR / "VERSION").read_text().strip(), author="Sylvain Anderegg (sanderegg)", description="Core service library for simcore pydantic dask task models", - python_requires="~=3.9", + python_requires=">=3.10", classifiers=[ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", diff --git a/packages/models-library/setup.py b/packages/models-library/setup.py index d57014008d1..7e58e25c3a9 100644 --- a/packages/models-library/setup.py +++ b/packages/models-library/setup.py @@ -35,7 +35,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: version=Path(CURRENT_DIR / "VERSION").read_text().strip(), author="Sylvain Anderegg (sanderegg)", description="Core service library for simcore pydantic models", - python_requires="~=3.9", + python_requires=">=3.10", classifiers=[ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", diff --git a/packages/postgres-database/setup.py b/packages/postgres-database/setup.py index d8c50dff82f..8593d72c1cf 100644 --- a/packages/postgres-database/setup.py +++ b/packages/postgres-database/setup.py @@ -45,6 +45,7 @@ def read_reqs(reqs_path: Path) -> set[str]: ], long_description=Path(CURRENT_DIR / "README.md").read_text(), license="MIT license", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={"": "src"}, test_suite="tests", diff --git a/packages/pytest-simcore/setup.py b/packages/pytest-simcore/setup.py index 61874d47ea8..7c0ddf5bc28 100644 --- a/packages/pytest-simcore/setup.py +++ b/packages/pytest-simcore/setup.py @@ -17,7 +17,7 @@ description="pytest plugin with fixtures and test helpers for osparc-simcore repo modules", py_modules=["pytest_simcore"], # WARNING: this is used in frozen services as well !!!! - python_requires=">=3.6", + python_requires=">=3.10", install_requires=["pytest>=3.5.0"], extras_require={ "all": [ diff --git a/packages/service-integration/setup.py b/packages/service-integration/setup.py index 2039f6af8ef..d1d5dcd661f 100644 --- a/packages/service-integration/setup.py +++ b/packages/service-integration/setup.py @@ -64,7 +64,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "Framework :: Pytest", ], long_description=Path(CURRENT_DIR / "README.md").read_text(), - python_requires=">=3.6", # TODO: should we deal with ~=3.9?? + python_requires=">=3.10", license="MIT license", install_requires=INSTALL_REQUIREMENTS, packages=find_packages(where="src"), diff --git a/packages/service-library/setup.py b/packages/service-library/setup.py index f9c63e55ea4..e582ca54c3a 100644 --- a/packages/service-library/setup.py +++ b/packages/service-library/setup.py @@ -36,7 +36,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: author="Pedro Crespo-Valero (pcrespov)", description="Core service library for simcore (or servicelib)", license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", install_requires=tuple(PROD_REQUIREMENTS), packages=find_packages(where="src"), package_dir={"": "src"}, diff --git a/packages/settings-library/setup.py b/packages/settings-library/setup.py index 30aecb77c68..89ff11fd5f7 100644 --- a/packages/settings-library/setup.py +++ b/packages/settings-library/setup.py @@ -49,6 +49,7 @@ def read_reqs(reqs_path: Path) -> set[str]: ], long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", + python_requires=">=3.10", install_requires=INSTALL_REQUIREMENTS, packages=find_packages(where="src"), package_dir={"": "src"}, diff --git a/packages/simcore-sdk/setup.py b/packages/simcore-sdk/setup.py index d8d36cb39cf..ec607cd3831 100644 --- a/packages/simcore-sdk/setup.py +++ b/packages/simcore-sdk/setup.py @@ -36,7 +36,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: version=Path(CURRENT_DIR / "VERSION").read_text().strip(), packages=find_packages(where="src"), package_dir={"": "src"}, - python_requires=">=3.6", + python_requires=">=3.10", install_requires=INSTALL_REQUIREMENTS, tests_require=TEST_REQUIREMENTS, extras_require={"test": TEST_REQUIREMENTS}, diff --git a/services/agent/setup.py b/services/agent/setup.py index 509cb8619b6..4dca15c6b43 100644 --- a/services/agent/setup.py +++ b/services/agent/setup.py @@ -46,7 +46,7 @@ def read_reqs(reqs_path: Path) -> set[str]: description=DESCRIPTION, long_description=README, license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/api-server/setup.py b/services/api-server/setup.py index 53afcf1293e..4736fd3da4f 100644 --- a/services/api-server/setup.py +++ b/services/api-server/setup.py @@ -48,7 +48,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: description=DESCRIPTION, long_description=README, license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/autoscaling/setup.py b/services/autoscaling/setup.py index e3e711abf83..528507c6441 100644 --- a/services/autoscaling/setup.py +++ b/services/autoscaling/setup.py @@ -49,7 +49,7 @@ def read_reqs(reqs_path: Path) -> set[str]: description=DESCRIPTION, long_description=README, license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/catalog/setup.py b/services/catalog/setup.py index d724da7744e..53f8ae638e2 100644 --- a/services/catalog/setup.py +++ b/services/catalog/setup.py @@ -44,7 +44,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: description="Manages and maintains a catalog of all published components (e.g. macro-algorithms, scripts, etc)", long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/dask-sidecar/setup.py b/services/dask-sidecar/setup.py index ab1d750e06d..2d2173c58ab 100644 --- a/services/dask-sidecar/setup.py +++ b/services/dask-sidecar/setup.py @@ -37,7 +37,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: ], long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/datcore-adapter/setup.py b/services/datcore-adapter/setup.py index 7d31111d7a2..f6b847bb80f 100644 --- a/services/datcore-adapter/setup.py +++ b/services/datcore-adapter/setup.py @@ -38,7 +38,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: description="Interfaces with datcore storage", long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/director-v2/setup.py b/services/director-v2/setup.py index 1f57f74e031..b64c891f269 100644 --- a/services/director-v2/setup.py +++ b/services/director-v2/setup.py @@ -48,7 +48,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: description="Orchestrates the pipeline of services defined by the user", long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/director/setup.py b/services/director/setup.py index b9fefde11b3..dea00d983ae 100644 --- a/services/director/setup.py +++ b/services/director/setup.py @@ -35,7 +35,7 @@ def read_reqs(reqs_path: Path): version="0.1.0", description="oSparc Director webserver service", author="Sylvain Anderegg (sanderegg)", - python_requires="~=3.6", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/dynamic-sidecar/setup.py b/services/dynamic-sidecar/setup.py index c4171130c44..72935508ec0 100644 --- a/services/dynamic-sidecar/setup.py +++ b/services/dynamic-sidecar/setup.py @@ -49,7 +49,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "": "src", }, include_package_data=True, - python_requires="~=3.9", + python_requires=">=3.10", PROD_REQUIREMENTS=PROD_REQUIREMENTS, TEST_REQUIREMENTS=TEST_REQUIREMENTS, setup_requires=["setuptools_scm"], diff --git a/services/invitations/setup.py b/services/invitations/setup.py index a30deabc332..c3d612a1646 100755 --- a/services/invitations/setup.py +++ b/services/invitations/setup.py @@ -44,7 +44,7 @@ def read_reqs(reqs_path: Path) -> set[str]: description=DESCRIPTION, long_description=README, license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/osparc-gateway-server/setup.py b/services/osparc-gateway-server/setup.py index b517cccd943..1b13658f661 100755 --- a/services/osparc-gateway-server/setup.py +++ b/services/osparc-gateway-server/setup.py @@ -37,7 +37,7 @@ def read_reqs(reqs_path: Path) -> set[str]: ], long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={ "": "src", diff --git a/services/storage/setup.py b/services/storage/setup.py index 5f08ec64cb8..22be545422b 100644 --- a/services/storage/setup.py +++ b/services/storage/setup.py @@ -39,7 +39,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: version=Path(CURRENT_DIR / "VERSION").read_text().strip(), description="Service to manage data storage in simcore", author="Manuel Guidon (mguidon)", - python_requires="~=3.9", + python_requires=">=3.10", packages=find_packages(where="src"), package_dir={"": "src"}, include_package_data=True, diff --git a/services/web/server/setup.py b/services/web/server/setup.py index 7a71b500f01..3bf5178f49c 100644 --- a/services/web/server/setup.py +++ b/services/web/server/setup.py @@ -59,7 +59,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "simcore-service-webserver=simcore_service_webserver.__main__:main", ] }, - python_requires="~=3.9", + python_requires=">=3.10", install_requires=INSTALL_REQUIREMENTS, tests_require=TEST_REQUIREMENTS, setup_requires=["pytest-runner"], From 6f2fa6b9738b16bfd4005a7b6097ac365c653027 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:11:08 +0000 Subject: [PATCH 05/10] Checkpoint AFTER step 6 - Rule 7 Timestamp: 2025-06-02 19:11:08.294 Step ID: 6 Title: Rule 7 --- .../src/simcore_service_autoscaling/dynamic_scaling_core.py | 1 + .../src/simcore_service_autoscaling/utils/utils_docker.py | 1 + .../director-v2/src/simcore_service_director_v2/utils/dask.py | 1 + 3 files changed, 3 insertions(+) diff --git a/services/autoscaling/src/simcore_service_autoscaling/dynamic_scaling_core.py b/services/autoscaling/src/simcore_service_autoscaling/dynamic_scaling_core.py index 059c10462f4..cb7d792c0ff 100644 --- a/services/autoscaling/src/simcore_service_autoscaling/dynamic_scaling_core.py +++ b/services/autoscaling/src/simcore_service_autoscaling/dynamic_scaling_core.py @@ -1,5 +1,6 @@ import asyncio import collections +import collections.abc import dataclasses import itertools import logging diff --git a/services/autoscaling/src/simcore_service_autoscaling/utils/utils_docker.py b/services/autoscaling/src/simcore_service_autoscaling/utils/utils_docker.py index 4a0b2ee3fb8..f38eff2d484 100644 --- a/services/autoscaling/src/simcore_service_autoscaling/utils/utils_docker.py +++ b/services/autoscaling/src/simcore_service_autoscaling/utils/utils_docker.py @@ -4,6 +4,7 @@ import asyncio import collections +import collections.abc import datetime import logging import re diff --git a/services/director-v2/src/simcore_service_director_v2/utils/dask.py b/services/director-v2/src/simcore_service_director_v2/utils/dask.py index 8a1816a7a97..73147af0078 100644 --- a/services/director-v2/src/simcore_service_director_v2/utils/dask.py +++ b/services/director-v2/src/simcore_service_director_v2/utils/dask.py @@ -1,5 +1,6 @@ import asyncio import collections +import collections.abc import logging from typing import Any, Awaitable, Callable, Final, Iterable, Optional, Union, get_args from uuid import uuid4 From d78c01a98772a92415692f65c87cb8f9d9511ebd Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:14:08 +0000 Subject: [PATCH 06/10] Checkpoint AFTER step 7 - Rule 8 Timestamp: 2025-06-02 19:14:08.739 Step ID: 7 Title: Rule 8 --- api/specs/webserver/scripts/requirements.txt | 4 ++++ requirements/constraints.txt | 3 +++ scripts/demo-meta/requirements.txt | 4 ++++ scripts/erd/requirements.txt | 4 ++++ scripts/maintenance/migrate_project/requirements.txt | 4 ++++ scripts/maintenance/requirements.txt | 4 ++++ scripts/metrics/requirements.txt | 4 ++++ scripts/mypy/requirements.txt | 4 ++++ 8 files changed, 31 insertions(+) diff --git a/api/specs/webserver/scripts/requirements.txt b/api/specs/webserver/scripts/requirements.txt index 30c49abedff..db309ac71c6 100644 --- a/api/specs/webserver/scripts/requirements.txt +++ b/api/specs/webserver/scripts/requirements.txt @@ -1,3 +1,7 @@ # Extra reqs, besides webserver's +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + fastapi diff --git a/requirements/constraints.txt b/requirements/constraints.txt index a3ef7c52497..f6c76b18418 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -53,6 +53,9 @@ minio==7.0.4 # Compatibility/coordination # +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 # Keeps all docker compose to the same version. TODO: remove when all synced docker-compose==1.29.1 diff --git a/scripts/demo-meta/requirements.txt b/scripts/demo-meta/requirements.txt index 4aa7c6af281..18b17602c03 100644 --- a/scripts/demo-meta/requirements.txt +++ b/scripts/demo-meta/requirements.txt @@ -1,3 +1,7 @@ +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + httpx pandas pydantic[dotenv,email] diff --git a/scripts/erd/requirements.txt b/scripts/erd/requirements.txt index 9318b18043d..5abf7b50aa6 100644 --- a/scripts/erd/requirements.txt +++ b/scripts/erd/requirements.txt @@ -1,3 +1,7 @@ +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + eralchemy erdantic pydot diff --git a/scripts/maintenance/migrate_project/requirements.txt b/scripts/maintenance/migrate_project/requirements.txt index 800e200809d..f909bd66924 100644 --- a/scripts/maintenance/migrate_project/requirements.txt +++ b/scripts/maintenance/migrate_project/requirements.txt @@ -1,3 +1,7 @@ +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + psycopg2 pydantic sqlalchemy diff --git a/scripts/maintenance/requirements.txt b/scripts/maintenance/requirements.txt index 315585c0189..84fba7aa24c 100644 --- a/scripts/maintenance/requirements.txt +++ b/scripts/maintenance/requirements.txt @@ -1,3 +1,7 @@ +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + aiopg black httpx diff --git a/scripts/metrics/requirements.txt b/scripts/metrics/requirements.txt index c843a6494bf..cd625da3bf3 100644 --- a/scripts/metrics/requirements.txt +++ b/scripts/metrics/requirements.txt @@ -1,3 +1,7 @@ +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + black httpx[http2] pydantic[email,dotenv] diff --git a/scripts/mypy/requirements.txt b/scripts/mypy/requirements.txt index 144956c4dbc..2781f337042 100644 --- a/scripts/mypy/requirements.txt +++ b/scripts/mypy/requirements.txt @@ -1,3 +1,7 @@ +# Python 3.10 compatibility - replace distutils functionality +setuptools>=45 +packaging>=20.9 + mypy==0.971 pydantic[email]==1.9.2 types-aiofiles==0.8.10 From d25bb78570bc0b326d8ef2d0177e35a6e3ab05e4 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:21:25 +0000 Subject: [PATCH 07/10] Checkpoint AFTER step 8 - Rule 9 Timestamp: 2025-06-02 19:21:25.250 Step ID: 8 Title: Rule 9 --- .github/workflows/ci-release.yml | 2 +- .github/workflows/ci-staging.yml | 2 +- .github/workflows/ci-testing-deploy.yml | 70 +++++++++---------- mypy.ini | 2 +- packages/dask-task-models-library/setup.py | 2 +- packages/models-library/setup.py | 2 +- .../postgres-database/scripts/erd/Dockerfile | 2 +- packages/postgres-database/setup.py | 2 +- packages/service-integration/Dockerfile | 2 +- packages/service-integration/setup.py | 2 +- packages/settings-library/setup.py | 2 +- requirements/tools/Dockerfile | 2 +- scripts/erd/Dockerfile | 2 +- .../maintenance/migrate_project/Dockerfile | 2 +- scripts/mypy/Dockerfile | 2 +- scripts/pydeps-docker/Dockerfile | 2 +- scripts/pyupgrade.bash | 4 +- services/agent/Dockerfile | 2 +- services/api-server/Dockerfile | 2 +- services/autoscaling/Dockerfile | 2 +- services/catalog/Dockerfile | 2 +- services/dask-sidecar/Dockerfile | 2 +- services/dask-sidecar/setup.py | 2 +- services/datcore-adapter/Dockerfile | 2 +- services/director-v2/Dockerfile | 2 +- services/dynamic-sidecar/Dockerfile | 2 +- services/invitations/Dockerfile | 2 +- services/migration/Dockerfile | 2 +- services/osparc-gateway-server/Dockerfile | 2 +- services/osparc-gateway-server/setup.py | 2 +- services/storage/Dockerfile | 2 +- services/web/Dockerfile | 2 +- 32 files changed, 67 insertions(+), 67 deletions(-) diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml index b4f018e9efe..5763c4b8657 100644 --- a/.github/workflows/ci-release.yml +++ b/.github/workflows/ci-release.yml @@ -21,7 +21,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] diff --git a/.github/workflows/ci-staging.yml b/.github/workflows/ci-staging.yml index 80bb898c7fd..4fd26432e3f 100644 --- a/.github/workflows/ci-staging.yml +++ b/.github/workflows/ci-staging.yml @@ -21,7 +21,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] diff --git a/.github/workflows/ci-testing-deploy.yml b/.github/workflows/ci-testing-deploy.yml index 978f76c9a9a..cc4ab0cb4b6 100644 --- a/.github/workflows/ci-testing-deploy.yml +++ b/.github/workflows/ci-testing-deploy.yml @@ -186,7 +186,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -228,7 +228,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -272,7 +272,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -314,7 +314,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -356,7 +356,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -398,7 +398,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -445,7 +445,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -484,7 +484,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -526,7 +526,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -571,7 +571,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -619,7 +619,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -714,7 +714,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -762,7 +762,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -807,7 +807,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -851,7 +851,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -905,7 +905,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -991,7 +991,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9", "3.10", "3.11"] + python: ["3.10", "3.11"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1030,7 +1030,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1075,7 +1075,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1120,7 +1120,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1162,7 +1162,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1204,7 +1204,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1246,7 +1246,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1288,7 +1288,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1374,7 +1374,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1432,7 +1432,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1492,7 +1492,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1552,7 +1552,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1615,7 +1615,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1690,7 +1690,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1773,7 +1773,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1830,7 +1830,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -1894,7 +1894,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] node: [14] os: [ubuntu-22.04] docker_buildx: [v0.10.4] @@ -1971,7 +1971,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] @@ -2033,7 +2033,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - python: ["3.9"] + python: ["3.10"] os: [ubuntu-22.04] docker_buildx: [v0.10.4] docker_compose: [1.29.1] diff --git a/mypy.ini b/mypy.ini index bbd2479ab01..63d99fb2279 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,6 +1,6 @@ # Global options: [mypy] -python_version = 3.9 +python_version = 3.10 warn_return_any = True warn_unused_configs = True diff --git a/packages/dask-task-models-library/setup.py b/packages/dask-task-models-library/setup.py index 3cfd848f319..57fd2bd6141 100644 --- a/packages/dask-task-models-library/setup.py +++ b/packages/dask-task-models-library/setup.py @@ -42,7 +42,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + ], long_description=Path(CURRENT_DIR / "README.md").read_text(), license="MIT license", diff --git a/packages/models-library/setup.py b/packages/models-library/setup.py index 7e58e25c3a9..e79e8edff14 100644 --- a/packages/models-library/setup.py +++ b/packages/models-library/setup.py @@ -41,7 +41,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + ], long_description=Path(CURRENT_DIR / "README.md").read_text(), license="MIT license", diff --git a/packages/postgres-database/scripts/erd/Dockerfile b/packages/postgres-database/scripts/erd/Dockerfile index abb61e39b9e..26e1676be12 100644 --- a/packages/postgres-database/scripts/erd/Dockerfile +++ b/packages/postgres-database/scripts/erd/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base RUN apt-get update \ diff --git a/packages/postgres-database/setup.py b/packages/postgres-database/setup.py index 8593d72c1cf..230ebb40792 100644 --- a/packages/postgres-database/setup.py +++ b/packages/postgres-database/setup.py @@ -41,7 +41,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + ], long_description=Path(CURRENT_DIR / "README.md").read_text(), license="MIT license", diff --git a/packages/service-integration/Dockerfile b/packages/service-integration/Dockerfile index 2eebf66a5b2..421d87074dc 100644 --- a/packages/service-integration/Dockerfile +++ b/packages/service-integration/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base LABEL maintainer=pcrespov diff --git a/packages/service-integration/setup.py b/packages/service-integration/setup.py index d1d5dcd661f..eb7d74f092b 100644 --- a/packages/service-integration/setup.py +++ b/packages/service-integration/setup.py @@ -60,7 +60,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + "Framework :: Pytest", ], long_description=Path(CURRENT_DIR / "README.md").read_text(), diff --git a/packages/settings-library/setup.py b/packages/settings-library/setup.py index 89ff11fd5f7..0b29c160dcc 100644 --- a/packages/settings-library/setup.py +++ b/packages/settings-library/setup.py @@ -45,7 +45,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + ], long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", diff --git a/requirements/tools/Dockerfile b/requirements/tools/Dockerfile index 49e3ccf7159..14552696c01 100644 --- a/requirements/tools/Dockerfile +++ b/requirements/tools/Dockerfile @@ -7,7 +7,7 @@ # - Can be installed with pyenv (SEE pyenv install --list ) # # -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base diff --git a/scripts/erd/Dockerfile b/scripts/erd/Dockerfile index b66f1b705c1..cb072850b43 100644 --- a/scripts/erd/Dockerfile +++ b/scripts/erd/Dockerfile @@ -6,7 +6,7 @@ # - https://erdantic.drivendata.org/stable/ # -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base RUN apt-get update \ diff --git a/scripts/maintenance/migrate_project/Dockerfile b/scripts/maintenance/migrate_project/Dockerfile index 969d84a7fc4..6f16ea9bdd9 100644 --- a/scripts/maintenance/migrate_project/Dockerfile +++ b/scripts/maintenance/migrate_project/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9.12-buster +FROM python:3.10.12-buster RUN curl https://rclone.org/install.sh | bash && \ rclone --version diff --git a/scripts/mypy/Dockerfile b/scripts/mypy/Dockerfile index f06626b05aa..75c838be1dd 100644 --- a/scripts/mypy/Dockerfile +++ b/scripts/mypy/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base diff --git a/scripts/pydeps-docker/Dockerfile b/scripts/pydeps-docker/Dockerfile index 67b2ec430ac..f1f4443f60f 100644 --- a/scripts/pydeps-docker/Dockerfile +++ b/scripts/pydeps-docker/Dockerfile @@ -7,7 +7,7 @@ # - Can be installed with pyenv (SEE pyenv install --list ) # # -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base diff --git a/scripts/pyupgrade.bash b/scripts/pyupgrade.bash index b015f0194ac..4cfa5761c87 100755 --- a/scripts/pyupgrade.bash +++ b/scripts/pyupgrade.bash @@ -8,7 +8,7 @@ IFS=$'\n\t' # # # NOTE: check --py* flag in CLI when PYTHON_VERSION is modified -PYTHON_VERSION=3.9.12 +PYTHON_VERSION=3.10.12 IMAGE_NAME="local/pyupgrade-devkit:${PYTHON_VERSION}" WORKDIR="$(pwd)" @@ -27,7 +27,7 @@ RUN pip install \ pyupgrade ENTRYPOINT ["pyupgrade", \ - "--py39-plus" ] + "--py310-plus" ] EOF } diff --git a/services/agent/Dockerfile b/services/agent/Dockerfile index 5079a5e66db..b7317de3628 100644 --- a/services/agent/Dockerfile +++ b/services/agent/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # diff --git a/services/api-server/Dockerfile b/services/api-server/Dockerfile index 100e0a00320..e9f55fe084e 100644 --- a/services/api-server/Dockerfile +++ b/services/api-server/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # # USAGE: diff --git a/services/autoscaling/Dockerfile b/services/autoscaling/Dockerfile index 8955508dcd3..acafba4517e 100644 --- a/services/autoscaling/Dockerfile +++ b/services/autoscaling/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # diff --git a/services/catalog/Dockerfile b/services/catalog/Dockerfile index 8b2ea325bd7..4954424d005 100644 --- a/services/catalog/Dockerfile +++ b/services/catalog/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # # diff --git a/services/dask-sidecar/Dockerfile b/services/dask-sidecar/Dockerfile index e00a9edc64c..6b20bab1926 100644 --- a/services/dask-sidecar/Dockerfile +++ b/services/dask-sidecar/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM --platform=${TARGETPLATFORM} python:${PYTHON_VERSION}-slim-buster as base ARG TARGETPLATFORM ARG BUILDPLATFORM diff --git a/services/dask-sidecar/setup.py b/services/dask-sidecar/setup.py index 2d2173c58ab..88c55f103a6 100644 --- a/services/dask-sidecar/setup.py +++ b/services/dask-sidecar/setup.py @@ -33,7 +33,7 @@ def read_reqs(reqs_path: Path) -> Set[str]: "Development Status :: 1 - Planning", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + ], long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", diff --git a/services/datcore-adapter/Dockerfile b/services/datcore-adapter/Dockerfile index 59e196c301d..b37258129ec 100644 --- a/services/datcore-adapter/Dockerfile +++ b/services/datcore-adapter/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # diff --git a/services/director-v2/Dockerfile b/services/director-v2/Dockerfile index 14f1bc683a6..99effc697ce 100644 --- a/services/director-v2/Dockerfile +++ b/services/director-v2/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # diff --git a/services/dynamic-sidecar/Dockerfile b/services/dynamic-sidecar/Dockerfile index fa40ad377d0..a800b44b8ea 100644 --- a/services/dynamic-sidecar/Dockerfile +++ b/services/dynamic-sidecar/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # # USAGE: diff --git a/services/invitations/Dockerfile b/services/invitations/Dockerfile index 4351c4c6ec1..c3b8fb228bf 100644 --- a/services/invitations/Dockerfile +++ b/services/invitations/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # diff --git a/services/migration/Dockerfile b/services/migration/Dockerfile index 542b19a4833..827bdaf2442 100644 --- a/services/migration/Dockerfile +++ b/services/migration/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base LABEL maintainer=sanderegg diff --git a/services/osparc-gateway-server/Dockerfile b/services/osparc-gateway-server/Dockerfile index 990eda6989e..16b04f806c7 100644 --- a/services/osparc-gateway-server/Dockerfile +++ b/services/osparc-gateway-server/Dockerfile @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1 -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-bullseye as base ARG TARGETPLATFORM ARG BUILDPLATFORM diff --git a/services/osparc-gateway-server/setup.py b/services/osparc-gateway-server/setup.py index 1b13658f661..10c07fc83e8 100755 --- a/services/osparc-gateway-server/setup.py +++ b/services/osparc-gateway-server/setup.py @@ -33,7 +33,7 @@ def read_reqs(reqs_path: Path) -> set[str]: "Development Status :: 1 - Planning", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Programming Language :: Python :: 3.9", + ], long_description=(CURRENT_DIR / "README.md").read_text(), license="MIT license", diff --git a/services/storage/Dockerfile b/services/storage/Dockerfile index 3aeb3275aa2..d95751b42ab 100644 --- a/services/storage/Dockerfile +++ b/services/storage/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # # USAGE: diff --git a/services/web/Dockerfile b/services/web/Dockerfile index c94989c0ea1..4eb91ded53f 100644 --- a/services/web/Dockerfile +++ b/services/web/Dockerfile @@ -1,4 +1,4 @@ -ARG PYTHON_VERSION="3.9.12" +ARG PYTHON_VERSION="3.10.12" FROM python:${PYTHON_VERSION}-slim-buster as base # # USAGE: From 7fc2db839ba3161a56b147b65dd694648cf19217 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:26:18 +0000 Subject: [PATCH 08/10] Checkpoint AFTER step 14 - Rule 15 Timestamp: 2025-06-02 19:26:18.489 Step ID: 14 Title: Rule 15 --- PARSER_MIGRATION_REFERENCE.md | 151 ++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 PARSER_MIGRATION_REFERENCE.md diff --git a/PARSER_MIGRATION_REFERENCE.md b/PARSER_MIGRATION_REFERENCE.md new file mode 100644 index 00000000000..1293c071c36 --- /dev/null +++ b/PARSER_MIGRATION_REFERENCE.md @@ -0,0 +1,151 @@ +# Python C Extension Parser Function Migration Guide + +## Overview +This document provides guidance for updating C extension code that uses removed parser functions like `PyParser_SimpleParseStringFlags` to use modern compilation functions. + +## Deprecated Functions and Modern Replacements + +### 1. PyParser_SimpleParseStringFlags → Py_CompileString + +**Old (deprecated):** +```c +#include "Python.h" +#include "node.h" +#include "grammar.h" +#include "parsetok.h" + +// Deprecated approach +node *n = PyParser_SimpleParseStringFlags( + code_string, + Py_file_input, + PyCompilerFlags *flags +); +``` + +**New (modern):** +```c +#include "Python.h" + +// Modern approach using Py_CompileString +PyObject *code_obj = Py_CompileString( + code_string, // Python source code as string + filename, // filename for error reporting + Py_file_input // compilation mode +); + +if (code_obj == NULL) { + // Handle compilation error + return NULL; +} +``` + +### 2. PyParser_SimpleParseString → ast.parse + compile + +**Old (deprecated):** +```c +node *n = PyParser_SimpleParseString(code_string, Py_file_input); +``` + +**New (modern):** +```c +// Option 1: Use Py_CompileString directly +PyObject *code_obj = Py_CompileString(code_string, filename, Py_file_input); + +// Option 2: Use Python's ast module via C API +PyObject *ast_module = PyImport_ImportModule("ast"); +PyObject *parse_func = PyObject_GetAttrString(ast_module, "parse"); +PyObject *source_arg = PyUnicode_FromString(code_string); +PyObject *ast_obj = PyObject_CallFunctionObjArgs(parse_func, source_arg, NULL); + +// Then compile the AST +PyObject *code_obj = PyAST_CompileObject(ast_obj, filename, NULL, -1, arena); +``` + +### 3. Complete Migration Example + +```c +#include "Python.h" + +// Function to compile Python source code using modern API +PyObject* compile_python_source(const char* source_code, const char* filename) { + PyObject *code_obj = NULL; + PyCompilerFlags flags = {0}; + + // Set compiler flags if needed + flags.cf_flags = 0; + + // Compile the source code + code_obj = Py_CompileStringExFlags( + source_code, + filename, + Py_file_input, + &flags, + -1 // optimize level (-1 = default) + ); + + if (code_obj == NULL) { + // Print the exception if compilation failed + PyErr_Print(); + return NULL; + } + + return code_obj; +} + +// Function to execute compiled code +PyObject* execute_compiled_code(PyObject* code_obj, PyObject* globals, PyObject* locals) { + return PyEval_EvalCode(code_obj, globals, locals); +} + +// Complete example function +PyObject* compile_and_execute(const char* source_code, const char* filename) { + PyObject *code_obj = NULL; + PyObject *result = NULL; + PyObject *globals = NULL; + PyObject *locals = NULL; + + // Compile the code + code_obj = compile_python_source(source_code, filename); + if (code_obj == NULL) { + goto cleanup; + } + + // Prepare execution environment + globals = PyDict_New(); + locals = PyDict_New(); + + // Add builtins to globals + PyDict_SetItemString(globals, "__builtins__", PyEval_GetBuiltins()); + + // Execute the compiled code + result = execute_compiled_code(code_obj, globals, locals); + +cleanup: + Py_XDECREF(code_obj); + Py_XDECREF(globals); + Py_XDECREF(locals); + + return result; +} +``` + +## Key Migration Points + +1. **Replace parser functions**: Use `Py_CompileString()` or `Py_CompileStringExFlags()` instead of `PyParser_*` functions +2. **Handle compilation flags**: Use `PyCompilerFlags` structure for compiler options +3. **Error handling**: Check for NULL returns and use `PyErr_Print()` or `PyErr_Occurred()` +4. **Memory management**: Properly manage reference counts with `Py_DECREF`/`Py_XDECREF` +5. **Execution context**: Set up proper globals/locals dictionaries for code execution + +## Available Compilation Functions + +- `Py_CompileString()` - Basic compilation +- `Py_CompileStringFlags()` - With compiler flags +- `Py_CompileStringExFlags()` - Extended with optimization level +- `PyAST_CompileObject()` - Compile from AST object + +## Compilation Modes + +- `Py_file_input` - Complete Python program +- `Py_single_input` - Single interactive statement +- `Py_eval_input` - Single expression for evaluation \ No newline at end of file From 60caeea3736d13a0a1475a803889dfc4211be999 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:31:02 +0000 Subject: [PATCH 09/10] Checkpoint AFTER step 18 - Rule 19 Timestamp: 2025-06-02 19:31:02.051 Step ID: 18 Title: Rule 19 --- tox.ini | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tox.ini diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000000..38c6b2c74e7 --- /dev/null +++ b/tox.ini @@ -0,0 +1,71 @@ +[tox] +envlist = py310, py311, py312, lint, mypy, docs +isolated_build = true +minversion = 4.0 + +[gh-actions] +python = + 3.10: py310 + 3.11: py311 + 3.12: py312 + +[testenv] +deps = + pytest>=7.0 + pytest-asyncio + pytest-cov + pytest-mock +extras = test +commands = + pytest {posargs:tests} -v --cov --cov-report=term-missing + +[testenv:py310] +basepython = python3.10 +deps = {[testenv]deps} +extras = {[testenv]extras} +commands = {[testenv]commands} + +[testenv:py311] +basepython = python3.11 +deps = {[testenv]deps} +extras = {[testenv]extras} +commands = {[testenv]commands} + +[testenv:py312] +basepython = python3.12 +deps = {[testenv]deps} +extras = {[testenv]extras} +commands = {[testenv]commands} + +[testenv:lint] +basepython = python3.10 +deps = + ruff + black + isort +commands = + ruff check . + black --check . + isort --check-only . + +[testenv:mypy] +basepython = python3.10 +deps = + mypy + types-requests + types-PyYAML +commands = + mypy --ignore-missing-imports . + +[testenv:docs] +basepython = python3.10 +deps = + sphinx + sphinx-rtd-theme +commands = + sphinx-build -b html docs docs/_build/html + +[testenv:clean] +deps = coverage +skip_install = true +commands = coverage erase \ No newline at end of file From a2fe83a3dba4d98728822282ec06fee84914ef32 Mon Sep 17 00:00:00 2001 From: Gitar Date: Mon, 2 Jun 2025 19:37:33 +0000 Subject: [PATCH 10/10] Checkpoint AFTER step 19 - Rule 20 Timestamp: 2025-06-02 19:37:33.351 Step ID: 19 Title: Rule 20 --- .pre-commit-config.yaml | 4 ++-- .vscode/settings.template.json | 1 + Makefile | 10 +++++----- packages/models-library/Makefile | 10 +++++----- services/api-server/Makefile | 4 ++-- services/director/docker/boot.sh | 2 +- services/director/docker/entrypoint.sh | 2 +- services/storage/docker/boot.sh | 2 +- 8 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 87b6dad37bd..4e488513cc5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ exclude: "^.venv$|^.cache$|^.pytest_cache$" fail_fast: true default_language_version: - python: python3.9 + python: python3.10 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.2.0 @@ -26,7 +26,7 @@ repos: hooks: - id: pyupgrade args: - - "--py39-plus" + - "--py310-plus" name: upgrade code - repo: https://github.com/hadialqattan/pycln rev: v1.2.5 diff --git a/.vscode/settings.template.json b/.vscode/settings.template.json index 7fc4ef0392b..476b762e5ce 100644 --- a/.vscode/settings.template.json +++ b/.vscode/settings.template.json @@ -27,6 +27,7 @@ "**/.git/subtree-cache/**": true, "**/node_modules/*/**": true }, + "python.defaultInterpreterPath": "python3.10", "python.formatting.autopep8Args": [ "--max-line-length 140" ], diff --git a/Makefile b/Makefile index a62c059bb7e..e0645ccd970 100644 --- a/Makefile +++ b/Makefile @@ -261,7 +261,7 @@ CPU_COUNT = $(shell cat /proc/cpuinfo | grep processor | wc -l ) $(eval TMP_PATH_TO_FILESTASH_CONFIG=$(shell set -o allexport && \ source $(CURDIR)/.env && \ set +o allexport && \ - python3 scripts/filestash/create_config.py)) + python3.10 scripts/filestash/create_config.py)) # Creating config for ops stack to $@ # -> filestash config at $(TMP_PATH_TO_FILESTASH_CONFIG) @$(shell \ @@ -425,9 +425,9 @@ push-version: tag-version .PHONY: devenv devenv-all node-env .venv: - @python3 --version - python3 -m venv $@ - ## upgrading tools to latest version in $(shell python3 --version) + @python3.10 --version + python3.10 -m venv $@ + ## upgrading tools to latest version in $(shell python3.10 --version) $@/bin/pip3 --quiet install --upgrade \ pip~=23.0 \ wheel \ @@ -633,7 +633,7 @@ info: ## displays setup information @echo ' make : $(shell make --version 2>&1 | head -n 1)' @echo ' jq : $(shell jq --version)' @echo ' awk : $(shell awk -W version 2>&1 | head -n 1)' - @echo ' python : $(shell python3 --version)' + @echo ' python : $(shell python3.10 --version)' @echo ' node : $(shell node --version 2> /dev/null || echo ERROR nodejs missing)' @echo ' docker : $(shell docker --version)' @echo ' docker buildx : $(shell docker buildx version)' diff --git a/packages/models-library/Makefile b/packages/models-library/Makefile index 0279fbedfa8..a1fe136f35d 100644 --- a/packages/models-library/Makefile +++ b/packages/models-library/Makefile @@ -50,11 +50,11 @@ tests-ci: ## runs unit tests [ci-mode] .PHONY: project-jsonschema.ignore.json project-jsonschema.ignore.json: ## creates project-v0.0.1.json for DEV purposes - python3 -c "from models_library.projects import Project; print(Project.schema_json(indent=2))" > $@ + python3.10 -c "from models_library.projects import Project; print(Project.schema_json(indent=2))" > $@ .PHONY: service-jsonschema.ignore.json node-meta-jsonschema.ignore.json: ## creates node-meta-v0.0.1.json for DEV purposes - python3 -c "from models_library.services import ServiceDockerData as cls; print(cls.schema_json(indent=2))" > $@ + python3.10 -c "from models_library.services import ServiceDockerData as cls; print(cls.schema_json(indent=2))" > $@ DOCKER_API_VERSION ?= 1.41 .PHONY: docker_rest_api.py @@ -84,7 +84,7 @@ docker_rest_api.py: ## auto-generates pydantic models for Docker REST API models .PHONY: _erdantic _erdantic: _check_venv_active # ensures erdantic installed - @python3 -c "import erdantic" 2>/dev/null || pip install erdantic + @python3.10 -c "import erdantic" 2>/dev/null || pip install erdantic erd-Project.svg: _erdantic erdantic models_library.projects.Project \ @@ -112,7 +112,7 @@ DOWNLOADED_TEST_DATA_DIR = "$(CURDIR)/tests/data/.downloaded-ignore" .PHONY: _httpx _httpx: _check_venv_active # ensures requirements installed - @python3 -c "import httpx" 2>/dev/null || pip install httpx + @python3.10 -c "import httpx" 2>/dev/null || pip install httpx PHONY: pull_test_data pull_test_data: $(DOT_ENV_FILE) _httpx ## downloads tests data from registry (this can take some time!) @@ -120,4 +120,4 @@ pull_test_data: $(DOT_ENV_FILE) _httpx ## downloads tests data from registry (th @set -o allexport; \ source $<; \ set +o allexport; \ - python3 "$(PACKAGES_DIR)/pytest-simcore/src/pytest_simcore/helpers/utils_docker_registry.py" $(DOWNLOADED_TEST_DATA_DIR) + python3.10 "$(PACKAGES_DIR)/pytest-simcore/src/pytest_simcore/helpers/utils_docker_registry.py" $(DOWNLOADED_TEST_DATA_DIR) diff --git a/services/api-server/Makefile b/services/api-server/Makefile index 20ccba061a5..f9926dca8f6 100644 --- a/services/api-server/Makefile +++ b/services/api-server/Makefile @@ -23,7 +23,7 @@ $(DOCKER_COMPOSE_EXTRA_FILE): db-tables: .env ## upgrades and create tables [for development] # Upgrading and creating tables export $(shell grep -v '^#' $< | xargs -d '\n'); \ - python3 tests/utils/init-pg.py + python3.10 tests/utils/init-pg.py @@ -92,7 +92,7 @@ openapi.json: .env source .env; \ set +o allexport; \ export API_SERVER_DEV_FEATURES_ENABLED=0; \ - python3 -c "import json; from $(APP_PACKAGE_NAME).main import *; print( json.dumps(the_app.openapi(), indent=2) )" > $@ + python3.10 -c "import json; from $(APP_PACKAGE_NAME).main import *; print( json.dumps(the_app.openapi(), indent=2) )" > $@ # validates OAS file: $@ @cd $(CURDIR); \ diff --git a/services/director/docker/boot.sh b/services/director/docker/boot.sh index f771974b095..c120b3548a8 100755 --- a/services/director/docker/boot.sh +++ b/services/director/docker/boot.sh @@ -30,7 +30,7 @@ fi # RUNNING application ---------------------------------------- if [ "${SC_BOOT_MODE}" = "debug-ptvsd" ]; then watchmedo auto-restart --recursive --pattern="*.py;*/src/*" --ignore-patterns="*test*;pytest_simcore/*;setup.py;*ignore*" --ignore-directories -- \ - python3 -m ptvsd --host 0.0.0.0 --port 3000 -m \ + python3.10 -m ptvsd --host 0.0.0.0 --port 3000 -m \ simcore_service_director --loglevel="${LOGLEVEL}" else exec simcore-service-director --loglevel="${LOGLEVEL}" diff --git a/services/director/docker/entrypoint.sh b/services/director/docker/entrypoint.sh index 232da22ba7e..e89f2c9c94c 100755 --- a/services/director/docker/entrypoint.sh +++ b/services/director/docker/entrypoint.sh @@ -71,7 +71,7 @@ fi if [ "${SC_BOOT_MODE}" = "debug-ptvsd" ] then # NOTE: production does NOT pre-installs ptvsd - python3 -m pip install ptvsd + python3.10 -m pip install ptvsd fi # Appends docker group if socket is mounted diff --git a/services/storage/docker/boot.sh b/services/storage/docker/boot.sh index ce886a24b9a..a9aeef695d7 100755 --- a/services/storage/docker/boot.sh +++ b/services/storage/docker/boot.sh @@ -41,7 +41,7 @@ echo "$INFO" "Log-level app/server: $APP_LOG_LEVEL/$SERVER_LOG_LEVEL" if [ "${SC_BOOT_MODE}" = "debug-ptvsd" ]; then # NOTE: needs ptvsd installed echo "$INFO" "PTVSD Debugger initializing in port 3000 with ${SC_BUILD_TARGET}" - eval "$entrypoint" python3 -m ptvsd --host 0.0.0.0 --port 3000 -m \ + eval "$entrypoint" python3.10 -m ptvsd --host 0.0.0.0 --port 3000 -m \ simcore_service_storage run else exec simcore-service-storage run