Skip to content

Commit d0d9f9b

Browse files
committed
Introducing Registered functions/function jobs/collections
1 parent 98fa066 commit d0d9f9b

File tree

12 files changed

+444
-271
lines changed

12 files changed

+444
-271
lines changed

packages/models-library/src/models_library/api_schemas_webserver/functions_wb_schema.py

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -77,40 +77,26 @@ class FunctionClass(str, Enum):
7777

7878
class FunctionBase(BaseModel):
7979
function_class: FunctionClass
80-
uid: FunctionID | None
8180
title: str = ""
8281
description: str = ""
8382
input_schema: FunctionInputSchema
8483
output_schema: FunctionOutputSchema
8584
default_inputs: FunctionInputs
8685

8786

88-
class FunctionDB(BaseModel):
89-
function_class: FunctionClass
90-
uuid: FunctionJobID | None
91-
title: str = ""
92-
description: str = ""
93-
input_schema: FunctionInputSchema
94-
output_schema: FunctionOutputSchema
95-
default_inputs: FunctionInputs
96-
class_specific_data: FunctionClassSpecificData
97-
98-
99-
class FunctionJobDB(BaseModel):
100-
uuid: FunctionJobID | None
101-
function_uuid: FunctionID
102-
title: str = ""
103-
inputs: FunctionInputs
104-
outputs: FunctionOutputs
105-
class_specific_data: FunctionJobClassSpecificData
106-
function_class: FunctionClass
87+
class RegisteredFunctionBase(FunctionBase):
88+
uid: FunctionID
10789

10890

10991
class ProjectFunction(FunctionBase):
11092
function_class: Literal[FunctionClass.project] = FunctionClass.project
11193
project_id: ProjectID
11294

11395

96+
class RegisteredProjectFunction(ProjectFunction, RegisteredFunctionBase):
97+
pass
98+
99+
114100
SolverJobID: TypeAlias = UUID
115101

116102

@@ -120,21 +106,32 @@ class SolverFunction(FunctionBase):
120106
solver_version: ServiceVersion
121107

122108

109+
class RegisteredSolverFunction(SolverFunction, RegisteredFunctionBase):
110+
pass
111+
112+
123113
class PythonCodeFunction(FunctionBase):
124114
function_class: Literal[FunctionClass.python_code] = FunctionClass.python_code
125115
code_url: str
126116

127117

118+
class RegisteredPythonCodeFunction(PythonCodeFunction, RegisteredFunctionBase):
119+
pass
120+
121+
128122
Function: TypeAlias = Annotated[
129123
ProjectFunction | PythonCodeFunction | SolverFunction,
130124
Field(discriminator="function_class"),
131125
]
126+
RegisteredFunction: TypeAlias = Annotated[
127+
RegisteredProjectFunction | RegisteredPythonCodeFunction | RegisteredSolverFunction,
128+
Field(discriminator="function_class"),
129+
]
132130

133131
FunctionJobCollectionID: TypeAlias = projects.ProjectID
134132

135133

136134
class FunctionJobBase(BaseModel):
137-
uid: FunctionJobID | None
138135
title: str = ""
139136
description: str = ""
140137
function_uid: FunctionID
@@ -143,25 +140,48 @@ class FunctionJobBase(BaseModel):
143140
function_class: FunctionClass
144141

145142

143+
class RegisteredFunctionJobBase(FunctionJobBase):
144+
uid: FunctionJobID
145+
146+
146147
class ProjectFunctionJob(FunctionJobBase):
147148
function_class: Literal[FunctionClass.project] = FunctionClass.project
148149
project_job_id: ProjectID
149150

150151

152+
class RegisteredProjectFunctionJob(ProjectFunctionJob, RegisteredFunctionJobBase):
153+
pass
154+
155+
151156
class SolverFunctionJob(FunctionJobBase):
152157
function_class: Literal[FunctionClass.solver] = FunctionClass.solver
153158
solver_job_id: ProjectID
154159

155160

161+
class RegisteredSolverFunctionJob(SolverFunctionJob, RegisteredFunctionJobBase):
162+
pass
163+
164+
156165
class PythonCodeFunctionJob(FunctionJobBase):
157166
function_class: Literal[FunctionClass.python_code] = FunctionClass.python_code
158167

159168

169+
class RegisteredPythonCodeFunctionJob(PythonCodeFunctionJob, RegisteredFunctionJobBase):
170+
pass
171+
172+
160173
FunctionJob: TypeAlias = Annotated[
161174
ProjectFunctionJob | PythonCodeFunctionJob | SolverFunctionJob,
162175
Field(discriminator="function_class"),
163176
]
164177

178+
RegisteredFunctionJob: TypeAlias = Annotated[
179+
RegisteredProjectFunctionJob
180+
| RegisteredPythonCodeFunctionJob
181+
| RegisteredSolverFunctionJob,
182+
Field(discriminator="function_class"),
183+
]
184+
165185

166186
class FunctionJobStatus(BaseModel):
167187
status: str
@@ -170,18 +190,13 @@ class FunctionJobStatus(BaseModel):
170190
class FunctionJobCollection(BaseModel):
171191
"""Model for a collection of function jobs"""
172192

173-
uid: FunctionJobCollectionID | None
174193
title: str = ""
175194
description: str = ""
176-
job_ids: list[FunctionJobID]
195+
job_ids: list[FunctionJobID] = []
177196

178197

179-
class FunctionJobCollectionDB(BaseModel):
180-
"""Model for a collection of function jobs"""
181-
182-
uuid: FunctionJobCollectionID
183-
title: str = ""
184-
description: str = ""
198+
class RegisteredFunctionJobCollection(FunctionJobCollection):
199+
uid: FunctionJobCollectionID
185200

186201

187202
class FunctionJobCollectionStatus(BaseModel):

packages/postgres-database/src/simcore_postgres_database/models/funcapi_function_job_collections_table.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,27 @@
66
import uuid
77

88
import sqlalchemy as sa
9+
from models_library.api_schemas_webserver.functions_wb_schema import (
10+
FunctionJobCollectionID,
11+
)
12+
from pydantic import BaseModel
913
from sqlalchemy.dialects.postgresql import UUID
14+
from sqlalchemy.sql import func
1015

1116
from .base import metadata
1217

18+
19+
class FunctionJobCollectionDB(BaseModel):
20+
"""Model for a collection of function jobs"""
21+
22+
title: str = ""
23+
description: str = ""
24+
25+
26+
class RegisteredFunctionJobCollectionDB(FunctionJobCollectionDB):
27+
uuid: FunctionJobCollectionID
28+
29+
1330
function_job_collections_table = sa.Table(
1431
"funcapi_function_job_collections",
1532
metadata,
@@ -31,5 +48,20 @@
3148
sa.String,
3249
doc="Description of the function job collection",
3350
),
51+
sa.Column(
52+
"created",
53+
sa.DateTime(),
54+
nullable=False,
55+
server_default=func.now(),
56+
doc="Timestamp auto-generated upon creation",
57+
),
58+
sa.Column(
59+
"modified",
60+
sa.DateTime(),
61+
nullable=False,
62+
server_default=func.now(),
63+
onupdate=func.now(),
64+
doc="Automaticaly updates on modification of the row",
65+
),
3466
sa.PrimaryKeyConstraint("uuid", name="funcapi_function_job_collections_pk"),
3567
)

packages/postgres-database/src/simcore_postgres_database/models/funcapi_function_job_collections_to_function_jobs_table.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"""
55

66
import sqlalchemy as sa
7+
from sqlalchemy.sql import func
78

89
from ._common import RefActions
910
from .base import metadata
@@ -33,4 +34,19 @@
3334
),
3435
doc="Unique identifier of the function job",
3536
),
37+
sa.Column(
38+
"created",
39+
sa.DateTime(),
40+
nullable=False,
41+
server_default=func.now(),
42+
doc="Timestamp auto-generated upon creation",
43+
),
44+
sa.Column(
45+
"modified",
46+
sa.DateTime(),
47+
nullable=False,
48+
server_default=func.now(),
49+
onupdate=func.now(),
50+
doc="Automaticaly updates on modification of the row",
51+
),
3652
)

packages/postgres-database/src/simcore_postgres_database/models/funcapi_function_jobs_table.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,37 @@
66
import uuid
77

88
import sqlalchemy as sa
9+
from models_library.api_schemas_webserver.functions_wb_schema import (
10+
FunctionClass,
11+
FunctionID,
12+
FunctionInputs,
13+
FunctionJobClassSpecificData,
14+
FunctionJobID,
15+
FunctionOutputs,
16+
)
17+
from pydantic import BaseModel
918
from sqlalchemy.dialects.postgresql import UUID
19+
from sqlalchemy.sql import func
1020

1121
from ._common import RefActions
1222
from .base import metadata
1323
from .funcapi_functions_table import functions_table
1424

25+
26+
class FunctionJobDB(BaseModel):
27+
function_uuid: FunctionID
28+
title: str = ""
29+
description: str = ""
30+
inputs: FunctionInputs
31+
outputs: FunctionOutputs
32+
class_specific_data: FunctionJobClassSpecificData
33+
function_class: FunctionClass
34+
35+
36+
class RegisteredFunctionJobDB(FunctionJobDB):
37+
uuid: FunctionJobID
38+
39+
1540
function_jobs_table = sa.Table(
1641
"funcapi_function_jobs",
1742
metadata,
@@ -28,6 +53,11 @@
2853
sa.String,
2954
doc="Name of the function job",
3055
),
56+
sa.Column(
57+
"description",
58+
sa.String,
59+
doc="Description of the function job",
60+
),
3161
sa.Column(
3262
"function_uuid",
3363
sa.ForeignKey(
@@ -66,5 +96,20 @@
6696
nullable=True,
6797
doc="Fields specific for a function class",
6898
),
99+
sa.Column(
100+
"created",
101+
sa.DateTime(),
102+
nullable=False,
103+
server_default=func.now(),
104+
doc="Timestamp auto-generated upon creation",
105+
),
106+
sa.Column(
107+
"modified",
108+
sa.DateTime(),
109+
nullable=False,
110+
server_default=func.now(),
111+
onupdate=func.now(),
112+
doc="Automaticaly updates on modification of the row",
113+
),
69114
sa.PrimaryKeyConstraint("uuid", name="funcapi_function_jobs_pk"),
70115
)

packages/postgres-database/src/simcore_postgres_database/models/funcapi_functions_table.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,34 @@
66
import uuid
77

88
import sqlalchemy as sa
9+
from models_library.api_schemas_webserver.functions_wb_schema import (
10+
FunctionClass,
11+
FunctionClassSpecificData,
12+
FunctionID,
13+
FunctionInputs,
14+
FunctionInputSchema,
15+
FunctionOutputSchema,
16+
)
17+
from pydantic import BaseModel
918
from sqlalchemy.dialects.postgresql import UUID
1019

1120
from .base import metadata
1221

22+
23+
class FunctionDB(BaseModel):
24+
function_class: FunctionClass
25+
title: str = ""
26+
description: str = ""
27+
input_schema: FunctionInputSchema
28+
output_schema: FunctionOutputSchema
29+
default_inputs: FunctionInputs
30+
class_specific_data: FunctionClassSpecificData
31+
32+
33+
class RegisteredFunctionDB(FunctionDB):
34+
uuid: FunctionID
35+
36+
1337
functions_table = sa.Table(
1438
"funcapi_functions",
1539
metadata,

0 commit comments

Comments
 (0)