Skip to content

Commit b89287a

Browse files
committed
Merge branch 'master' into 7795-add-osparc-trace-id-to-response-headers
2 parents 2bb6979 + 5cc2bdd commit b89287a

File tree

116 files changed

+1815
-1281
lines changed

Some content is hidden

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

116 files changed

+1815
-1281
lines changed

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ This document provides guidelines and best practices for using GitHub Copilot in
5252
- [Python Coding Conventions](../docs/coding-conventions.md)
5353
- [Environment Variables Guide](../docs/env-vars.md)
5454
- [Steps to Upgrade Python](../docs/steps-to-upgrade-python.md)
55-
- [Node.js Installation Script](../scripts/install_nodejs_14.bash)
55+
- [Pydantic Annotated fields](../docs/llm-prompts/pydantic-annotated-fields.md)

.vscode/settings.template.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// This is a template. Clone and replace extension ".template.json" by ".json"
22
{
33
"autoDocstring.docstringFormat": "pep257",
4-
54
"editor.tabSize": 2,
65
"editor.insertSpaces": true,
76
"editor.detectIndentation": false,
@@ -34,6 +33,8 @@
3433
"python.analysis.typeCheckingMode": "basic",
3534
"python.analysis.extraPaths": [
3635
"./packages/aws-library/src",
36+
"./packages/common-library/src",
37+
"./packages/dask-task-models-library/src",
3738
"./packages/models-library/src",
3839
"./packages/postgres-database/src",
3940
"./packages/postgres-database/tests",

api/tests/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
aiohappyeyeballs==2.6.1
22
# via aiohttp
3-
aiohttp==3.12.7
3+
aiohttp==3.11.18
44
# via
55
# -c ../../requirements/constraints.txt
66
# -r requirements.in

ci/helpers/requirements/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
aiohappyeyeballs==2.6.1
22
# via aiohttp
3-
aiohttp==3.12.7
3+
aiohttp==3.11.18
44
# via
55
# -c requirements/../../../requirements/constraints.txt
66
# -r requirements/requirements.in

packages/aws-library/requirements/_base.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ aiofiles==24.1.0
1818
# aioboto3
1919
aiohappyeyeballs==2.6.1
2020
# via aiohttp
21-
aiohttp==3.12.7
21+
aiohttp==3.11.18
2222
# via
2323
# -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt
2424
# -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,23 @@ class ProductUIGet(OutputSchema):
135135
ExtraCreditsUsdRangeInt: TypeAlias = Annotated[int, Field(ge=0, lt=500)]
136136

137137

138+
TrialAccountAnnotated: TypeAlias = Annotated[
139+
PositiveInt | None,
140+
Field(
141+
description="Expiration time in days for trial accounts; `null` means not a trial account"
142+
),
143+
]
144+
145+
WelcomeCreditsAnnotated: TypeAlias = Annotated[
146+
ExtraCreditsUsdRangeInt | None,
147+
Field(description="Welcome credits in USD; `null` means no welcome credits"),
148+
]
149+
150+
138151
class InvitationGenerate(InputSchema):
139152
guest: LowerCaseEmailStr
140-
trial_account_days: PositiveInt | None = None
141-
extra_credits_in_usd: ExtraCreditsUsdRangeInt | None = None
153+
trial_account_days: TrialAccountAnnotated = None
154+
extra_credits_in_usd: WelcomeCreditsAnnotated = None
142155

143156

144157
class InvitationGenerated(OutputSchema):

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
OutputSchemaWithoutCamelCase,
4242
)
4343
from .groups import MyGroupsGet
44-
from .products import InvitationGenerate
44+
from .products import TrialAccountAnnotated, WelcomeCreditsAnnotated
4545
from .users_preferences import AggregatedPreferences
4646

4747
#
@@ -255,9 +255,14 @@ class UsersForAdminListFilter(Filters):
255255
class UsersAccountListQueryParams(UsersForAdminListFilter, PageQueryParameters): ...
256256

257257

258+
class _InvitationDetails(InputSchema):
259+
trial_account_days: TrialAccountAnnotated = None
260+
extra_credits_in_usd: WelcomeCreditsAnnotated = None
261+
262+
258263
class UserAccountApprove(InputSchema):
259264
email: EmailStr
260-
invitation: InvitationGenerate | None = None
265+
invitation: _InvitationDetails | None = None
261266

262267

263268
class UserAccountReject(InputSchema):

packages/models-library/src/models_library/functions.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
from collections.abc import Mapping
23
from enum import Enum
34
from typing import Annotated, Any, Literal, TypeAlias
@@ -96,6 +97,7 @@ class FunctionBase(BaseModel):
9697

9798
class RegisteredFunctionBase(FunctionBase):
9899
uid: FunctionID
100+
created_at: datetime.datetime
99101

100102

101103
class ProjectFunction(FunctionBase):
@@ -152,6 +154,7 @@ class FunctionJobBase(BaseModel):
152154

153155
class RegisteredFunctionJobBase(FunctionJobBase):
154156
uid: FunctionJobID
157+
created_at: datetime.datetime
155158

156159

157160
class ProjectFunctionJob(FunctionJobBase):
@@ -207,6 +210,7 @@ class FunctionJobCollection(BaseModel):
207210

208211
class RegisteredFunctionJobCollection(FunctionJobCollection):
209212
uid: FunctionJobCollectionID
213+
created_at: datetime.datetime
210214

211215

212216
class FunctionJobCollectionStatus(BaseModel):
@@ -225,6 +229,7 @@ class FunctionJobDB(BaseModel):
225229

226230
class RegisteredFunctionJobDB(FunctionJobDB):
227231
uuid: FunctionJobID
232+
created: datetime.datetime
228233

229234

230235
class FunctionDB(BaseModel):
@@ -239,6 +244,7 @@ class FunctionDB(BaseModel):
239244

240245
class RegisteredFunctionDB(FunctionDB):
241246
uuid: FunctionID
247+
created: datetime.datetime
242248

243249

244250
class FunctionJobCollectionDB(BaseModel):
@@ -248,6 +254,7 @@ class FunctionJobCollectionDB(BaseModel):
248254

249255
class RegisteredFunctionJobCollectionDB(FunctionJobCollectionDB):
250256
uuid: FunctionJobCollectionID
257+
created: datetime.datetime
251258

252259

253260
class FunctionIDString(ConstrainedStr):

packages/models-library/src/models_library/functions_errors.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,84 +2,100 @@
22

33

44
class FunctionBaseError(OsparcErrorMixin, Exception):
5-
pass
5+
status_code: int
66

77

88
class FunctionJobReadAccessDeniedError(FunctionBaseError):
99
msg_template: str = (
1010
"Function job {function_job_id} read access denied for user {user_id}"
1111
)
12+
status_code: int = 403 # Forbidden
1213

1314

1415
class FunctionIDNotFoundError(FunctionBaseError):
1516
msg_template: str = "Function {function_id} not found"
17+
status_code: int = 404 # Not Found
1618

1719

1820
class FunctionJobIDNotFoundError(FunctionBaseError):
1921
msg_template: str = "Function job {function_job_id} not found"
22+
status_code: int = 404 # Not Found
2023

2124

2225
class FunctionInputsValidationError(FunctionBaseError):
2326
msg_template: str = "Function inputs validation failed: {error}"
27+
status_code: int = 422 # Unprocessable Entity
2428

2529

2630
class FunctionReadAccessDeniedError(FunctionBaseError):
2731
msg_template: str = "Function {function_id} read access denied for user {user_id}"
32+
status_code: int = 403 # Forbidden
2833

2934

3035
class FunctionJobCollectionIDNotFoundError(FunctionBaseError):
3136
msg_template: str = "Function job collection {function_job_collection_id} not found"
37+
status_code: int = 404 # Not Found
3238

3339

3440
class UnsupportedFunctionClassError(FunctionBaseError):
3541
msg_template: str = "Function class {function_class} is not supported"
42+
status_code: int = 400 # Bad Request
3643

3744

3845
class UnsupportedFunctionJobClassError(FunctionBaseError):
3946
msg_template: str = "Function job class {function_job_class} is not supported"
47+
status_code: int = 400 # Bad Request
4048

4149

4250
class UnsupportedFunctionFunctionJobClassCombinationError(FunctionBaseError):
4351
msg_template: str = (
4452
"Function class {function_class} and function job class {function_job_class} combination is not supported"
4553
)
54+
status_code: int = 400 # Bad Request
4655

4756

4857
class FunctionJobCollectionReadAccessDeniedError(FunctionBaseError):
4958
msg_template: str = (
5059
"Function job collection {function_job_collection_id} read access denied for user {user_id}"
5160
)
61+
status_code: int = 403 # Forbidden
5262

5363

5464
class FunctionWriteAccessDeniedError(FunctionBaseError):
5565
msg_template: str = "Function {function_id} write access denied for user {user_id}"
66+
status_code: int = 403 # Forbidden
5667

5768

5869
class FunctionJobWriteAccessDeniedError(FunctionBaseError):
5970
msg_template: str = (
6071
"Function job {function_job_id} write access denied for user {user_id}"
6172
)
73+
status_code: int = 403 # Forbidden
6274

6375

6476
class FunctionJobCollectionWriteAccessDeniedError(FunctionBaseError):
6577
msg_template: str = (
6678
"Function job collection {function_job_collection_id} write access denied for user {user_id}"
6779
)
80+
status_code: int = 403 # Forbidden
6881

6982

7083
class FunctionExecuteAccessDeniedError(FunctionBaseError):
7184
msg_template: str = (
7285
"Function {function_id} execute access denied for user {user_id}"
7386
)
87+
status_code: int = 403 # Forbidden
7488

7589

7690
class FunctionJobExecuteAccessDeniedError(FunctionBaseError):
7791
msg_template: str = (
7892
"Function job {function_job_id} execute access denied for user {user_id}"
7993
)
94+
status_code: int = 403 # Forbidden
8095

8196

8297
class FunctionJobCollectionExecuteAccessDeniedError(FunctionBaseError):
8398
msg_template: str = (
8499
"Function job collection {function_job_collection_id} execute access denied for user {user_id}"
85100
)
101+
status_code: int = 403 # Forbidden

packages/notifications-library/requirements/_test.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ aiodocker==0.24.0
22
# via -r requirements/_test.in
33
aiohappyeyeballs==2.6.1
44
# via aiohttp
5-
aiohttp==3.12.7
5+
aiohttp==3.11.18
66
# via
77
# -c requirements/../../../requirements/constraints.txt
88
# aiodocker

0 commit comments

Comments
 (0)