diff --git a/packages/models-library/src/models_library/clusters.py b/packages/models-library/src/models_library/clusters.py index 8b38913c2466..c857073deadf 100644 --- a/packages/models-library/src/models_library/clusters.py +++ b/packages/models-library/src/models_library/clusters.py @@ -1,8 +1,7 @@ from enum import auto from pathlib import Path -from typing import Final, Literal, TypeAlias +from typing import Final, Literal, Self, TypeAlias -from models_library.utils._original_fastapi_encoders import jsonable_encoder from pydantic import ( AnyUrl, BaseModel, @@ -222,29 +221,23 @@ class Cluster(BaseCluster): }, ) - @model_validator(mode="before") - @classmethod - def check_owner_has_access_rights(cls, values): - values = jsonable_encoder(values) - - is_default_cluster = bool(values["id"] == DEFAULT_CLUSTER_ID) - owner_gid = values["owner"] + @model_validator(mode="after") + def check_owner_has_access_rights(self: Self) -> Self: + is_default_cluster = bool(self.id == DEFAULT_CLUSTER_ID) + owner_gid = self.owner # check owner is in the access rights, if not add it - access_rights = values.get("access_rights", values.get("accessRights", {})) + access_rights = self.access_rights.copy() if owner_gid not in access_rights: access_rights[owner_gid] = ( - CLUSTER_USER_RIGHTS.model_dump() - if is_default_cluster - else CLUSTER_ADMIN_RIGHTS.model_dump() + CLUSTER_USER_RIGHTS if is_default_cluster else CLUSTER_ADMIN_RIGHTS ) # check owner has the expected access if access_rights[owner_gid] != ( - CLUSTER_USER_RIGHTS.model_dump() - if is_default_cluster - else CLUSTER_ADMIN_RIGHTS.model_dump() + CLUSTER_USER_RIGHTS if is_default_cluster else CLUSTER_ADMIN_RIGHTS ): msg = f"the cluster owner access rights are incorrectly set: {access_rights[owner_gid]}" raise ValueError(msg) - values["access_rights"] = access_rights - return values + # NOTE: overcomes frozen configuration (far fetched in ClusterGet model of webserver) + object.__setattr__(self, "access_rights", access_rights) + return self diff --git a/services/director-v2/src/simcore_service_director_v2/models/comp_runs.py b/services/director-v2/src/simcore_service_director_v2/models/comp_runs.py index 2c671d2c146c..aba02269415e 100644 --- a/services/director-v2/src/simcore_service_director_v2/models/comp_runs.py +++ b/services/director-v2/src/simcore_service_director_v2/models/comp_runs.py @@ -95,8 +95,10 @@ def convert_null_to_empty_metadata(cls, v): "cluster_id": 0, "iteration": 42, "result": "UNKNOWN", - "created": "2021-03-01 13:07:34.19161", - "modified": "2021-03-01 13:07:34.19161", + "started": None, + "ended": None, + "created": "2021-03-01T13:07:34.191610", + "modified": "2021-03-01T13:07:34.191610", "cancelled": None, "use_on_demand_clusters": False, }, @@ -107,8 +109,10 @@ def convert_null_to_empty_metadata(cls, v): "cluster_id": None, # this default to DEFAULT_CLUSTER_ID "iteration": 42, "result": "NOT_STARTED", - "created": "2021-03-01 13:07:34.19161", - "modified": "2021-03-01 13:07:34.19161", + "started": None, + "ended": None, + "created": "2021-03-01T13:07:34.191610", + "modified": "2021-03-01T13:07:34.191610", "cancelled": None, "use_on_demand_clusters": False, }, @@ -119,10 +123,10 @@ def convert_null_to_empty_metadata(cls, v): "cluster_id": 123, "iteration": 12, "result": "SUCCESS", - "created": "2021-03-01 13:07:34.19161", - "modified": "2021-03-01 13:07:34.19161", - "started": "2021-03-01 08:07:34.19161", - "ended": "2021-03-01 13:07:34.10", + "created": "2021-03-01T13:07:34.191610", + "modified": "2021-03-01T13:07:34.191610", + "started": "2021-03-01T08:07:34.191610", + "ended": "2021-03-01T13:07:34.10", "cancelled": None, "metadata": { "node_id_names_map": {}, @@ -140,10 +144,10 @@ def convert_null_to_empty_metadata(cls, v): "cluster_id": 123, "iteration": 12, "result": "SUCCESS", - "created": "2021-03-01 13:07:34.19161", - "modified": "2021-03-01 13:07:34.19161", - "started": "2021-03-01 8:07:34.19161", - "ended": "2021-03-01 13:07:34.10", + "created": "2021-03-01T13:07:34.191610", + "modified": "2021-03-01T13:07:34.191610", + "started": "2021-03-01T08:07:34.191610", + "ended": "2021-03-01T13:07:34.10", "cancelled": None, "metadata": None, "use_on_demand_clusters": False,