Skip to content

Commit 50a4875

Browse files
🎨 add project template type 🚨 (πŸ—ƒοΈ) (#7677)
1 parent 81958f3 commit 50a4875

File tree

42 files changed

+2435
-2209
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2435
-2209
lines changed

β€Žpackages/models-library/src/models_library/api_schemas_webserver/projects.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,14 @@
2626
from ..emails import LowerCaseEmailStr
2727
from ..folders import FolderID
2828
from ..groups import GroupID
29-
from ..projects import ClassifierID, DateTimeStr, NodesDict, ProjectID
29+
from ..projects import (
30+
ClassifierID,
31+
DateTimeStr,
32+
NodesDict,
33+
ProjectID,
34+
ProjectTemplateType,
35+
ProjectType,
36+
)
3037
from ..projects_access import AccessRights, GroupIDStr
3138
from ..projects_state import ProjectState
3239
from ..utils._original_fastapi_encoders import jsonable_encoder
@@ -106,6 +113,9 @@ class ProjectGet(OutputSchema):
106113
description: str
107114
thumbnail: HttpUrl | Literal[""]
108115

116+
type: ProjectType
117+
template_type: ProjectTemplateType | None
118+
109119
workbench: NodesDict
110120

111121
prj_owner: LowerCaseEmailStr
@@ -153,6 +163,8 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
153163
"name": "My Project",
154164
"description": "This is a sample project",
155165
"thumbnail": "https://example.com/thumbnail.png",
166+
"type": "STANDARD",
167+
"template_type": None,
156168
"workbench": {},
157169
"prj_owner": "[email protected]",
158170
"access_rights": {},

β€Žpackages/models-library/src/models_library/projects.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"""
44

55
from datetime import datetime
6-
from enum import Enum
6+
from enum import Enum, auto
77
from typing import Annotated, Any, Final, TypeAlias
88
from uuid import UUID
99

@@ -25,6 +25,7 @@
2525
empty_str_to_none_pre_validator,
2626
none_to_empty_str_pre_validator,
2727
)
28+
from .utils.enums import StrAutoEnum
2829

2930
ProjectID: TypeAlias = UUID
3031
CommitID: TypeAlias = int
@@ -52,6 +53,12 @@ class ProjectType(str, Enum):
5253
STANDARD = "STANDARD"
5354

5455

56+
class ProjectTemplateType(StrAutoEnum):
57+
TEMPLATE = auto()
58+
TUTORIAL = auto()
59+
HYPERTOOL = auto()
60+
61+
5562
class BaseProjectModel(BaseModel):
5663
# Description of the project
5764
uuid: Annotated[
@@ -108,6 +115,12 @@ class ProjectAtDB(BaseProjectModel):
108115
project_type: Annotated[
109116
ProjectType, Field(alias="type", description="The project type")
110117
]
118+
template_type: Annotated[
119+
ProjectTemplateType | None,
120+
Field(
121+
examples=["TEMPLATE", "TUTORIAL", "HYPERTOOL", None],
122+
),
123+
]
111124

112125
prj_owner: Annotated[int | None, Field(description="The project owner id")]
113126

@@ -165,6 +178,22 @@ class Project(BaseProjectModel):
165178
# Project state (SEE projects_state.py)
166179
state: ProjectState | None = None
167180

181+
# Type of project
182+
type: Annotated[
183+
ProjectType,
184+
Field(
185+
description="The project type",
186+
examples=["TEMPLATE", "STANDARD"],
187+
),
188+
]
189+
template_type: Annotated[
190+
ProjectTemplateType | None,
191+
Field(
192+
alias="templateType",
193+
examples=["TEMPLATE", "TUTORIAL", "HYPERTOOL", None],
194+
),
195+
]
196+
168197
# UI front-end fields (SEE projects_ui.py)
169198
ui: dict[str, Any] | None = None
170199
dev: dict[str, Any] | None = None

β€Žpackages/models-library/tests/test_projects.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ def minimal_project(faker: Faker) -> dict[str, Any]:
2424
"creationDate": "2019-05-24T10:36:57.813Z",
2525
"lastChangeDate": "2019-05-24T10:36:57.813Z",
2626
"workbench": {},
27+
"type": "STANDARD",
28+
"templateType": None,
2729
}
2830

2931

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
"""add templateType to projects
2+
3+
Revision ID: b39f2dc87ccd
4+
Revises: fc1701bb7e93
5+
Create Date: 2025-05-14 11:59:27.033449+00:00
6+
7+
"""
8+
9+
import sqlalchemy as sa
10+
from alembic import op
11+
12+
# revision identifiers, used by Alembic.
13+
revision = "b39f2dc87ccd"
14+
down_revision = "fc1701bb7e93"
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
# ### commands auto generated by Alembic - please adjust! ###
21+
# Create enum type first
22+
project_template_type = sa.Enum(
23+
"TEMPLATE", "TUTORIAL", "HYPERTOOL", name="projecttemplatetype"
24+
)
25+
project_template_type.create(op.get_bind())
26+
27+
op.add_column(
28+
"projects",
29+
sa.Column(
30+
"template_type",
31+
project_template_type,
32+
nullable=True,
33+
default=None,
34+
),
35+
)
36+
# ### end Alembic commands ###
37+
op.execute("UPDATE projects SET template_type='TEMPLATE' WHERE type='TEMPLATE'")
38+
39+
40+
def downgrade():
41+
# ### commands auto generated by Alembic - please adjust! ###
42+
op.drop_column("projects", "template_type")
43+
# ### end Alembic commands ###
44+
sa.Enum(name="projecttemplatetype").drop(op.get_bind())

β€Žpackages/postgres-database/src/simcore_postgres_database/models/projects.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ class ProjectType(enum.Enum):
1616
STANDARD = "STANDARD"
1717

1818

19+
class ProjectTemplateType(str, enum.Enum):
20+
TEMPLATE = "TEMPLATE"
21+
TUTORIAL = "TUTORIAL"
22+
HYPERTOOL = "HYPERTOOL"
23+
24+
1925
projects = sa.Table(
2026
"projects",
2127
metadata,
@@ -29,6 +35,13 @@ class ProjectType(enum.Enum):
2935
default=ProjectType.STANDARD,
3036
doc="Either standard or template types",
3137
),
38+
sa.Column(
39+
"template_type",
40+
sa.Enum(ProjectTemplateType),
41+
nullable=True,
42+
default=None,
43+
doc="None if type is STANDARD, otherwise it is one of the ProjectTemplateType",
44+
),
3245
sa.Column(
3346
"uuid",
3447
sa.String,

β€Žpackages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ def request_desc(self) -> str:
7575
},
7676
"dev": None,
7777
"workspace_id": None,
78+
"type": "STANDARD",
79+
"templateType": None,
7880
"folder_id": None,
7981
"trashedAt": None,
8082
"trashedBy": None,
@@ -102,6 +104,8 @@ def request_desc(self) -> str:
102104
"lastChangeDate": "2021-12-06T10:13:03.100Z",
103105
"workbench": {},
104106
"workspaceId": 123,
107+
"type": "STANDARD",
108+
"templateType": None,
105109
"folderId": 2,
106110
"accessRights": {"2": {"read": True, "write": True, "delete": True}},
107111
"dev": {},
@@ -157,6 +161,8 @@ def request_desc(self) -> str:
157161
"state": {"value": "NOT_STARTED"},
158162
},
159163
"workspace_id": None,
164+
"type": "STANDARD",
165+
"templateType": None,
160166
"folder_id": None,
161167
"trashedAt": None,
162168
"trashedBy": None,
@@ -232,6 +238,8 @@ def request_desc(self) -> str:
232238
"creationDate": "2021-12-06T10:13:03.100Z",
233239
"lastChangeDate": "2021-12-06T10:13:07.347Z",
234240
"workbench": {},
241+
"type": "STANDARD",
242+
"templateType": None,
235243
"accessRights": {"2": {"read": True, "write": True, "delete": True}},
236244
"dev": {},
237245
"classifiers": [],
@@ -482,6 +490,8 @@ def request_desc(self) -> str:
482490
"accessRights": {"2": {"read": True, "write": True, "delete": True}},
483491
"dev": {},
484492
"workspace_id": None,
493+
"type": "STANDARD",
494+
"templateType": None,
485495
"folder_id": None,
486496
"trashedAt": None,
487497
"trashedBy": None,
@@ -684,6 +694,8 @@ def request_desc(self) -> str:
684694
"classifiers": [],
685695
"dev": {},
686696
"workspace_id": None,
697+
"type": "STANDARD",
698+
"templateType": None,
687699
"folder_id": None,
688700
"trashedAt": None,
689701
"trashed_by": None,
@@ -935,6 +947,8 @@ def request_desc(self) -> str:
935947
"classifiers": [],
936948
"dev": {},
937949
"workspace_id": None,
950+
"type": "STANDARD",
951+
"templateType": None,
938952
"folder_id": None,
939953
"trashedAt": None,
940954
"trashedBy": None,

0 commit comments

Comments
Β (0)