fractal-server 2.17.2__py3-none-any.whl → 2.18.0a0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fractal_server/__init__.py +1 -1
- fractal_server/app/models/linkuserproject.py +40 -0
- fractal_server/app/routes/admin/v2/__init__.py +2 -0
- fractal_server/app/routes/admin/v2/job.py +17 -6
- fractal_server/app/routes/admin/v2/sharing.py +103 -0
- fractal_server/app/routes/admin/v2/task.py +1 -0
- fractal_server/app/routes/api/v2/__init__.py +2 -0
- fractal_server/app/routes/api/v2/_aux_functions.py +43 -17
- fractal_server/app/routes/api/v2/_aux_functions_history.py +8 -3
- fractal_server/app/routes/api/v2/_aux_functions_sharing.py +97 -0
- fractal_server/app/routes/api/v2/dataset.py +23 -17
- fractal_server/app/routes/api/v2/history.py +21 -11
- fractal_server/app/routes/api/v2/images.py +22 -8
- fractal_server/app/routes/api/v2/job.py +28 -12
- fractal_server/app/routes/api/v2/pre_submission_checks.py +13 -6
- fractal_server/app/routes/api/v2/project.py +37 -14
- fractal_server/app/routes/api/v2/sharing.py +312 -0
- fractal_server/app/routes/api/v2/status_legacy.py +7 -4
- fractal_server/app/routes/api/v2/submit.py +11 -5
- fractal_server/app/routes/api/v2/task_version_update.py +7 -4
- fractal_server/app/routes/api/v2/workflow.py +23 -11
- fractal_server/app/routes/api/v2/workflow_import.py +14 -12
- fractal_server/app/routes/api/v2/workflowtask.py +41 -7
- fractal_server/app/schemas/v2/__init__.py +7 -0
- fractal_server/app/schemas/v2/sharing.py +99 -0
- fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +72 -0
- fractal_server/runner/executors/slurm_common/_batching.py +4 -10
- fractal_server/runner/executors/slurm_ssh/runner.py +1 -1
- fractal_server/runner/executors/slurm_sudo/runner.py +1 -1
- {fractal_server-2.17.2.dist-info → fractal_server-2.18.0a0.dist-info}/METADATA +3 -2
- {fractal_server-2.17.2.dist-info → fractal_server-2.18.0a0.dist-info}/RECORD +34 -29
- {fractal_server-2.17.2.dist-info → fractal_server-2.18.0a0.dist-info}/WHEEL +0 -0
- {fractal_server-2.17.2.dist-info → fractal_server-2.18.0a0.dist-info}/entry_points.txt +0 -0
- {fractal_server-2.17.2.dist-info → fractal_server-2.18.0a0.dist-info}/licenses/LICENSE +0 -0
|
@@ -5,18 +5,21 @@ from fastapi import Depends
|
|
|
5
5
|
from fastapi import HTTPException
|
|
6
6
|
from fastapi import Response
|
|
7
7
|
from fastapi import status
|
|
8
|
+
from sqlmodel import select
|
|
8
9
|
|
|
9
10
|
from fractal_server.app.db import AsyncSession
|
|
10
11
|
from fractal_server.app.db import get_async_db
|
|
11
12
|
from fractal_server.app.models import UserOAuth
|
|
13
|
+
from fractal_server.app.models.linkuserproject import LinkUserProjectV2
|
|
12
14
|
from fractal_server.app.routes.auth import current_user_act_ver_prof
|
|
13
15
|
from fractal_server.app.schemas.v2 import TaskType
|
|
14
16
|
from fractal_server.app.schemas.v2 import WorkflowTaskCreateV2
|
|
15
17
|
from fractal_server.app.schemas.v2 import WorkflowTaskReadV2
|
|
16
18
|
from fractal_server.app.schemas.v2 import WorkflowTaskUpdateV2
|
|
19
|
+
from fractal_server.app.schemas.v2.sharing import ProjectPermissions
|
|
17
20
|
|
|
18
|
-
from ._aux_functions import
|
|
19
|
-
from ._aux_functions import
|
|
21
|
+
from ._aux_functions import _get_workflow_check_access
|
|
22
|
+
from ._aux_functions import _get_workflow_task_check_access
|
|
20
23
|
from ._aux_functions import _workflow_has_submitted_job
|
|
21
24
|
from ._aux_functions import _workflow_insert_task
|
|
22
25
|
from ._aux_functions_tasks import _check_type_filters_compatibility
|
|
@@ -42,10 +45,38 @@ async def create_workflowtask(
|
|
|
42
45
|
Add a WorkflowTask to a Workflow
|
|
43
46
|
"""
|
|
44
47
|
|
|
45
|
-
workflow = await
|
|
46
|
-
project_id=project_id,
|
|
48
|
+
workflow = await _get_workflow_check_access(
|
|
49
|
+
project_id=project_id,
|
|
50
|
+
workflow_id=workflow_id,
|
|
51
|
+
user_id=user.id,
|
|
52
|
+
required_permissions=ProjectPermissions.WRITE,
|
|
53
|
+
db=db,
|
|
47
54
|
)
|
|
48
55
|
|
|
56
|
+
res = await db.execute(
|
|
57
|
+
select(UserOAuth.id)
|
|
58
|
+
.join(LinkUserProjectV2, LinkUserProjectV2.user_id == UserOAuth.id)
|
|
59
|
+
.where(LinkUserProjectV2.project_id == project_id)
|
|
60
|
+
.where(LinkUserProjectV2.is_owner.is_(True))
|
|
61
|
+
)
|
|
62
|
+
project_owner_id = res.scalar_one()
|
|
63
|
+
if project_owner_id != user.id:
|
|
64
|
+
try:
|
|
65
|
+
await _get_task_read_access(
|
|
66
|
+
task_id=task_id,
|
|
67
|
+
user_id=project_owner_id,
|
|
68
|
+
db=db,
|
|
69
|
+
require_active=True,
|
|
70
|
+
)
|
|
71
|
+
except HTTPException as e:
|
|
72
|
+
if e.status_code == 403:
|
|
73
|
+
raise HTTPException(
|
|
74
|
+
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
75
|
+
detail="The task must be accessible to the project owner.",
|
|
76
|
+
)
|
|
77
|
+
else:
|
|
78
|
+
raise e
|
|
79
|
+
|
|
49
80
|
task = await _get_task_read_access(
|
|
50
81
|
task_id=task_id, user_id=user.id, db=db, require_active=True
|
|
51
82
|
)
|
|
@@ -104,11 +135,12 @@ async def read_workflowtask(
|
|
|
104
135
|
user: UserOAuth = Depends(current_user_act_ver_prof),
|
|
105
136
|
db: AsyncSession = Depends(get_async_db),
|
|
106
137
|
):
|
|
107
|
-
workflow_task, _ = await
|
|
138
|
+
workflow_task, _ = await _get_workflow_task_check_access(
|
|
108
139
|
project_id=project_id,
|
|
109
140
|
workflow_task_id=workflow_task_id,
|
|
110
141
|
workflow_id=workflow_id,
|
|
111
142
|
user_id=user.id,
|
|
143
|
+
required_permissions=ProjectPermissions.READ,
|
|
112
144
|
db=db,
|
|
113
145
|
)
|
|
114
146
|
return workflow_task
|
|
@@ -130,11 +162,12 @@ async def update_workflowtask(
|
|
|
130
162
|
Edit a WorkflowTask of a Workflow
|
|
131
163
|
"""
|
|
132
164
|
|
|
133
|
-
db_wf_task, db_workflow = await
|
|
165
|
+
db_wf_task, db_workflow = await _get_workflow_task_check_access(
|
|
134
166
|
project_id=project_id,
|
|
135
167
|
workflow_task_id=workflow_task_id,
|
|
136
168
|
workflow_id=workflow_id,
|
|
137
169
|
user_id=user.id,
|
|
170
|
+
required_permissions=ProjectPermissions.WRITE,
|
|
138
171
|
db=db,
|
|
139
172
|
)
|
|
140
173
|
if workflow_task_update.type_filters is not None:
|
|
@@ -215,11 +248,12 @@ async def delete_workflowtask(
|
|
|
215
248
|
Delete a WorkflowTask of a Workflow
|
|
216
249
|
"""
|
|
217
250
|
|
|
218
|
-
db_workflow_task, db_workflow = await
|
|
251
|
+
db_workflow_task, db_workflow = await _get_workflow_task_check_access(
|
|
219
252
|
project_id=project_id,
|
|
220
253
|
workflow_task_id=workflow_task_id,
|
|
221
254
|
workflow_id=workflow_id,
|
|
222
255
|
user_id=user.id,
|
|
256
|
+
required_permissions=ProjectPermissions.WRITE,
|
|
223
257
|
db=db,
|
|
224
258
|
)
|
|
225
259
|
|
|
@@ -30,6 +30,13 @@ from .profile import ValidProfileSlurmSudo # noqa F401
|
|
|
30
30
|
from .project import ProjectCreateV2 # noqa F401
|
|
31
31
|
from .project import ProjectReadV2 # noqa F401
|
|
32
32
|
from .project import ProjectUpdateV2 # noqa F401
|
|
33
|
+
from .sharing import ProjectPermissions # noqa F401
|
|
34
|
+
from .sharing import ProjectGuestCreate # noqa F401
|
|
35
|
+
from .sharing import ProjectAccessRead # noqa F401
|
|
36
|
+
from .sharing import ProjectInvitationRead # noqa F401
|
|
37
|
+
from .sharing import ProjectGuestRead # noqa F401
|
|
38
|
+
from .sharing import ProjectGuestUpdate # noqa F401
|
|
39
|
+
from .sharing import LinkUserProjectRead # noqa F401
|
|
33
40
|
from .resource import ResourceCreate # noqa F401
|
|
34
41
|
from .resource import ResourceRead # noqa F401
|
|
35
42
|
from .resource import ResourceType # noqa F401
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
from enum import StrEnum
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ProjectPermissions(StrEnum):
|
|
7
|
+
"""
|
|
8
|
+
Available permissions for accessing Project
|
|
9
|
+
Attributes:
|
|
10
|
+
READ:
|
|
11
|
+
WRITE:
|
|
12
|
+
EXECUTE:
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
READ = "r"
|
|
16
|
+
WRITE = "rw"
|
|
17
|
+
EXECUTE = "rwx"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ProjectGuestCreate(BaseModel):
|
|
21
|
+
"""
|
|
22
|
+
Request body for project-sharing invitation.
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
permissions:
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
permissions: ProjectPermissions
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ProjectGuestRead(BaseModel):
|
|
32
|
+
"""
|
|
33
|
+
Information about a guest.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
email: Guest email.
|
|
37
|
+
is_verified: Project/guest verification status.
|
|
38
|
+
permissions: Guest permissions for project.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
email: str
|
|
42
|
+
is_verified: bool
|
|
43
|
+
permissions: str
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class ProjectGuestUpdate(BaseModel):
|
|
47
|
+
"""
|
|
48
|
+
Request body for updating permissions of an existing guest.
|
|
49
|
+
|
|
50
|
+
Attributes:
|
|
51
|
+
permissions: New permissions for guest.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
permissions: ProjectPermissions
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class ProjectAccessRead(BaseModel):
|
|
58
|
+
"""
|
|
59
|
+
Project-access information for current user.
|
|
60
|
+
|
|
61
|
+
Attributes:
|
|
62
|
+
is_owner: Whether current user is owner.
|
|
63
|
+
permissions: Current user permissions.
|
|
64
|
+
owner_email: Email of project owner
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
is_owner: bool
|
|
68
|
+
permissions: str
|
|
69
|
+
owner_email: str
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class ProjectInvitationRead(BaseModel):
|
|
73
|
+
"""
|
|
74
|
+
Info about a pending invitation.
|
|
75
|
+
|
|
76
|
+
Attributes:
|
|
77
|
+
project_id:
|
|
78
|
+
project_name:
|
|
79
|
+
owner_email:
|
|
80
|
+
guest_permissions:
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
project_id: int
|
|
84
|
+
project_name: str
|
|
85
|
+
owner_email: str
|
|
86
|
+
guest_permissions: str
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class LinkUserProjectRead(BaseModel):
|
|
90
|
+
# User info
|
|
91
|
+
user_id: int
|
|
92
|
+
user_email: str
|
|
93
|
+
# Project info
|
|
94
|
+
project_id: int
|
|
95
|
+
project_name: str
|
|
96
|
+
# Permissions
|
|
97
|
+
is_verified: bool
|
|
98
|
+
is_owner: bool
|
|
99
|
+
permissions: str
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Project sharing
|
|
2
|
+
|
|
3
|
+
Revision ID: bc0e8b3327a7
|
|
4
|
+
Revises: e0e717ae2f26
|
|
5
|
+
Create Date: 2025-11-20 11:40:03.796112
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "bc0e8b3327a7"
|
|
14
|
+
down_revision = "e0e717ae2f26"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade() -> None:
|
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
+
with op.batch_alter_table("linkuserprojectv2", schema=None) as batch_op:
|
|
22
|
+
batch_op.add_column(
|
|
23
|
+
sa.Column(
|
|
24
|
+
"is_owner", sa.BOOLEAN(), server_default="true", nullable=False
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
batch_op.add_column(
|
|
28
|
+
sa.Column(
|
|
29
|
+
"is_verified",
|
|
30
|
+
sa.BOOLEAN(),
|
|
31
|
+
server_default="true",
|
|
32
|
+
nullable=False,
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
batch_op.add_column(
|
|
36
|
+
sa.Column(
|
|
37
|
+
"permissions", sa.String(), server_default="rwx", nullable=False
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
batch_op.create_index(
|
|
41
|
+
"ix_linkuserprojectv2_one_owner_per_project",
|
|
42
|
+
["project_id"],
|
|
43
|
+
unique=True,
|
|
44
|
+
postgresql_where=sa.text("is_owner IS true"),
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# ### end Alembic commands ###
|
|
48
|
+
|
|
49
|
+
# Manually add check constraints
|
|
50
|
+
batch_op.create_check_constraint(
|
|
51
|
+
"owner_is_verified", "NOT (is_owner AND NOT is_verified)"
|
|
52
|
+
)
|
|
53
|
+
batch_op.create_check_constraint(
|
|
54
|
+
"owner_full_permissions", "NOT (is_owner AND permissions <> 'rwx')"
|
|
55
|
+
)
|
|
56
|
+
batch_op.create_check_constraint(
|
|
57
|
+
"valid_permissions", "permissions IN ('r', 'rw', 'rwx')"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def downgrade() -> None:
|
|
62
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
63
|
+
with op.batch_alter_table("linkuserprojectv2", schema=None) as batch_op:
|
|
64
|
+
batch_op.drop_index(
|
|
65
|
+
"ix_linkuserprojectv2_one_owner_per_project",
|
|
66
|
+
postgresql_where=sa.text("is_owner IS true"),
|
|
67
|
+
)
|
|
68
|
+
batch_op.drop_column("permissions")
|
|
69
|
+
batch_op.drop_column("is_verified")
|
|
70
|
+
batch_op.drop_column("is_owner")
|
|
71
|
+
|
|
72
|
+
# ### end Alembic commands ###
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
# Copyright 2022 (C) Friedrich Miescher Institute for Biomedical Research and
|
|
2
|
-
# University of Zurich
|
|
3
|
-
#
|
|
4
|
-
# Original authors:
|
|
5
|
-
# Tommaso Comparin <tommaso.comparin@exact-lab.it>
|
|
6
|
-
#
|
|
7
|
-
# This file is part of Fractal and was originally developed by eXact lab S.r.l.
|
|
8
|
-
# <exact-lab.it> under contract with Liberali Lab from the Friedrich Miescher
|
|
9
|
-
# Institute for Biomedical Research and Pelkmans Lab from the University of
|
|
10
|
-
# Zurich.
|
|
11
1
|
"""
|
|
12
2
|
Submodule to determine the number of total/parallel tasks per SLURM job.
|
|
13
3
|
"""
|
|
@@ -20,6 +10,10 @@ logger = set_logger(__name__)
|
|
|
20
10
|
|
|
21
11
|
|
|
22
12
|
class SlurmHeuristicsError(ValueError):
|
|
13
|
+
"""
|
|
14
|
+
Error in SLURM-batching heuristics.
|
|
15
|
+
"""
|
|
16
|
+
|
|
23
17
|
pass
|
|
24
18
|
|
|
25
19
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fractal-server
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.18.0a0
|
|
4
4
|
Summary: Backend component of the Fractal analytics platform
|
|
5
5
|
License-Expression: BSD-3-Clause
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Author: Tommaso Comparin
|
|
8
8
|
Author-email: tommaso.comparin@exact-lab.it
|
|
9
|
-
Requires-Python: >=3.11,<3.
|
|
9
|
+
Requires-Python: >=3.11,<3.15
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
15
|
Requires-Dist: alembic (>=1.13.1,<2.0.0)
|
|
15
16
|
Requires-Dist: fabric (>=3.2.2,<3.3.0)
|
|
16
17
|
Requires-Dist: fastapi (>=0.120.0,<0.121.0)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
|
1
|
+
fractal_server/__init__.py,sha256=zUjuvRpoe51pROLg8ctvKgpIyEZgCSJzeDX3TTVg9Ms,25
|
|
2
2
|
fractal_server/__main__.py,sha256=o63YYNPm6wv0YG5PTtxPselXY6g3ii5VoBP8blPGgK8,11423
|
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
fractal_server/app/db/__init__.py,sha256=Otswoi_PlwX1zRhLTFQUKbW9Ho7piRn8dezjq8k-XaU,2834
|
|
6
6
|
fractal_server/app/models/__init__.py,sha256=oglUT1A1lLhXy2GFz3XsQ7wqkyfs3NXRtuNov-gOHXM,368
|
|
7
7
|
fractal_server/app/models/linkusergroup.py,sha256=3KkkE4QIUAlTrBAZs_tVy0pGvAxUAq6yOEjflct_z2M,678
|
|
8
|
-
fractal_server/app/models/linkuserproject.py,sha256=
|
|
8
|
+
fractal_server/app/models/linkuserproject.py,sha256=LW09JFTY2lFLqp3KdxUNjldeJRaao3WnTko_gS21EU4,1572
|
|
9
9
|
fractal_server/app/models/security.py,sha256=p9h1wqWzkJ2_P1kVmsHgeA81Bt5DU24v7THCr2-J238,4671
|
|
10
10
|
fractal_server/app/models/v2/__init__.py,sha256=xL05Mvdx0dqUFhJf694oPfuqkUQxZbxOkoUgRuNIXl4,949
|
|
11
11
|
fractal_server/app/models/v2/accounting.py,sha256=VNweFARrvY3mj5LI0834Ku061S2aGC61kuVHzi_tZhc,1187
|
|
@@ -21,42 +21,45 @@ fractal_server/app/models/v2/workflow.py,sha256=AsL7p8UMGbow--21IG2lYZnOjQ--m85d
|
|
|
21
21
|
fractal_server/app/models/v2/workflowtask.py,sha256=qkTc-hcFLpJUVsEUbnDq2BJL0qg9jagy2doZeusF1ek,1266
|
|
22
22
|
fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
fractal_server/app/routes/admin/v2/__init__.py,sha256=
|
|
24
|
+
fractal_server/app/routes/admin/v2/__init__.py,sha256=l3BVqu5f_KXW-8KCpmnI9QS_sZJTXygIz7Z_WawCGDA,1170
|
|
25
25
|
fractal_server/app/routes/admin/v2/_aux_functions.py,sha256=fqA5sUCFuD2iVANQt2WUUfVOEVz5egQA7inzUKYGCw0,1684
|
|
26
26
|
fractal_server/app/routes/admin/v2/accounting.py,sha256=HJ98G_Pde31cwEOqtloAJBXxsoRgNaoSG46OW7x1OBM,3584
|
|
27
27
|
fractal_server/app/routes/admin/v2/impersonate.py,sha256=ictDjuvBr3iLv3YtwkVRMNQRq5qtPAeAXbbC7STSsEg,1125
|
|
28
|
-
fractal_server/app/routes/admin/v2/job.py,sha256=
|
|
28
|
+
fractal_server/app/routes/admin/v2/job.py,sha256=aozHUx7nrDGr-JagePWjwdFGfW7nsAMH4RNvi4iLrsk,10515
|
|
29
29
|
fractal_server/app/routes/admin/v2/profile.py,sha256=DwLlA9K3hkl9BqzyifIDiaWeHOM_N_17kqB5CSJOhSI,3165
|
|
30
30
|
fractal_server/app/routes/admin/v2/resource.py,sha256=c2z6b_D_W6_dqVnxNF8F8OdlI5Z4asex8Zgfwzjbi2Q,6330
|
|
31
|
-
fractal_server/app/routes/admin/v2/
|
|
31
|
+
fractal_server/app/routes/admin/v2/sharing.py,sha256=x7RtbDPapyENEU_s4-glPoEeEOxxj2VBgduVQ1V7wkE,3796
|
|
32
|
+
fractal_server/app/routes/admin/v2/task.py,sha256=t_ldc_71ZNbYuymmhn2WT8RqZlxMUceQfLU3LLInR4I,6127
|
|
32
33
|
fractal_server/app/routes/admin/v2/task_group.py,sha256=zotpvn5ccQ9Kn-mgIorxJ8RU0BelxP_EEIi-2THH4kA,6248
|
|
33
34
|
fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=3LtyLDLFDEWSx9e4huXV_uBUdoDuIWib7IzMjlD1OMI,9975
|
|
34
35
|
fractal_server/app/routes/api/__init__.py,sha256=kq_c4t4a0rrJ6zMO0WGOTjCHf46SAlmWhh7Sa-3LkNg,1659
|
|
35
|
-
fractal_server/app/routes/api/v2/__init__.py,sha256=
|
|
36
|
-
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=
|
|
37
|
-
fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=
|
|
36
|
+
fractal_server/app/routes/api/v2/__init__.py,sha256=lOSRxe408B3dUfd1FtpfynEWBwKDVFlUt3I4NpIQTRo,2938
|
|
37
|
+
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=df6-Eep_402StSOiGeDHfKWZb7E1yJkFyHdi_EThRgE,15921
|
|
38
|
+
fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=RhKheO2mdSpA0PYGPuDfr8XTaE4e8LkuKeVJlilNtko,5683
|
|
39
|
+
fractal_server/app/routes/api/v2/_aux_functions_sharing.py,sha256=IvDII3Sl00eypdD3QRELQ4SLyC3gq6-HsXhuCx5Bp5I,2995
|
|
38
40
|
fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=u7KO6VXBJhPhlUZlIt-mqmWzhfR-btrQdb5HNvPR5OY,8537
|
|
39
41
|
fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py,sha256=PKjV7r8YsPRXoNiVSnOK4KBYVV3l_Yb_ZPrqAkMkXrQ,1182
|
|
40
42
|
fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=jg1QUQhDmeTw6c36-gBOVqOiBgI9kqBiuU77hHaJ_ag,13627
|
|
41
43
|
fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=vdvMTa3San1HMTzctN5Vk7zxpqe4ccByrFBQyHfgWW8,4889
|
|
42
|
-
fractal_server/app/routes/api/v2/dataset.py,sha256
|
|
43
|
-
fractal_server/app/routes/api/v2/history.py,sha256=
|
|
44
|
-
fractal_server/app/routes/api/v2/images.py,sha256=
|
|
45
|
-
fractal_server/app/routes/api/v2/job.py,sha256=
|
|
46
|
-
fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=
|
|
47
|
-
fractal_server/app/routes/api/v2/project.py,sha256=
|
|
48
|
-
fractal_server/app/routes/api/v2/
|
|
49
|
-
fractal_server/app/routes/api/v2/
|
|
44
|
+
fractal_server/app/routes/api/v2/dataset.py,sha256=FE5m8t8KyBQG-df_uBJIpaPHBjbHOGkFbSDhMN6fsuw,8579
|
|
45
|
+
fractal_server/app/routes/api/v2/history.py,sha256=BYsfBlvcBGbJCL47KlMpZDktXAHB8ft2nIaOQMMjqPA,18183
|
|
46
|
+
fractal_server/app/routes/api/v2/images.py,sha256=k9wd44iwjCtEWSH9j6X6zToBwuOOo6J4FxSW7AGbPHA,8266
|
|
47
|
+
fractal_server/app/routes/api/v2/job.py,sha256=vRN3Ovwami_4CpZw8zJN1azltMCh2ed42dlOfVHHG6Q,7274
|
|
48
|
+
fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=Cs_ODoRWmkbSJJhlIE7pQh9JuJGXZTAr-EVF6wqKNGA,5215
|
|
49
|
+
fractal_server/app/routes/api/v2/project.py,sha256=TlcixNdrss6-0jSiFGnlLP-qCsuX8_nhUyagG5tip3c,5833
|
|
50
|
+
fractal_server/app/routes/api/v2/sharing.py,sha256=mwq8p6rQ4wE4ymli_azV-BYDbVk45RzYqMBei0wuzzk,9446
|
|
51
|
+
fractal_server/app/routes/api/v2/status_legacy.py,sha256=zP5YheZBoeffanUpVZvKYL4kYIiGIkGtR9W9GX0pXVE,6599
|
|
52
|
+
fractal_server/app/routes/api/v2/submit.py,sha256=HScEY2IC4xVLXBoe1Pwiy9bjNR1FnEuAJWjQTidEGFU,9562
|
|
50
53
|
fractal_server/app/routes/api/v2/task.py,sha256=gekExcUmk-A8psT0_D356U-j8k38aw_wrCO8kWgG2Tw,7536
|
|
51
54
|
fractal_server/app/routes/api/v2/task_collection.py,sha256=x6TMI3JeeIJQJS7bIbn3fnRZaxIxQlp-SQHr2ZVDLBw,12384
|
|
52
55
|
fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=9Ycm8-C_bgsEgjqyRLqa64e0HwMVYZWPYr--r-oomB4,6948
|
|
53
56
|
fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=oAKO4dr0wMjOn3hC73YczLFrl-DznffGPgiZUmnyFAY,7190
|
|
54
57
|
fractal_server/app/routes/api/v2/task_group.py,sha256=a9YzcXMwkoa_2x6mCz3U_qctE_BvyPIzaGFalF5Otus,8350
|
|
55
58
|
fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=g20Egnwlw8Qvm1PzKK_64Fv9UKELmPy1Vt-sItNvQRk,10575
|
|
56
|
-
fractal_server/app/routes/api/v2/task_version_update.py,sha256=
|
|
57
|
-
fractal_server/app/routes/api/v2/workflow.py,sha256=
|
|
58
|
-
fractal_server/app/routes/api/v2/workflow_import.py,sha256=
|
|
59
|
-
fractal_server/app/routes/api/v2/workflowtask.py,sha256=
|
|
59
|
+
fractal_server/app/routes/api/v2/task_version_update.py,sha256=p0Bk8B7EZi9T0IWeDPqH7U7JNcjMGj1x72-ngZGgTOU,8497
|
|
60
|
+
fractal_server/app/routes/api/v2/workflow.py,sha256=EW6u-_O6ox3DVBYgrllMfCMHC-DNetUNT6OZudbThko,10830
|
|
61
|
+
fractal_server/app/routes/api/v2/workflow_import.py,sha256=zSCWKFzwIX2fWpxZJKXHbFk11nuUrgJL50-P0E_vYTc,9668
|
|
62
|
+
fractal_server/app/routes/api/v2/workflowtask.py,sha256=phHiQU8y4kTDaCJ6BQwTp4SPdE_L4MH3QTnWnkx1hcA,9225
|
|
60
63
|
fractal_server/app/routes/auth/__init__.py,sha256=RghfjGuu0RTW8RxBCvaePx9KErO4rTkI96XgbtbeSJU,2337
|
|
61
64
|
fractal_server/app/routes/auth/_aux_auth.py,sha256=s_boxuhPC60j74NmE8FopYPv_Fc4hiADvL0beWPcuE0,5474
|
|
62
65
|
fractal_server/app/routes/auth/current_user.py,sha256=Y_2Es3HFtTMuVUmWVHFFvk3vsRgmlqS_x5BwkeavlvI,5552
|
|
@@ -74,7 +77,7 @@ fractal_server/app/routes/pagination.py,sha256=C4XW6cnyDfyu1XMHXRN4wgk72lsS0UtlI
|
|
|
74
77
|
fractal_server/app/schemas/__init__.py,sha256=VIWJCaqokte3OljDLX00o-EC2d12rFoPb5HOLKQI94Y,86
|
|
75
78
|
fractal_server/app/schemas/user.py,sha256=ed1kXyVoCboNiHTQSA9EVGCZNIFByFknPluehHbYKmE,2900
|
|
76
79
|
fractal_server/app/schemas/user_group.py,sha256=uTTOVGoy89SxVDpJumjqOEWxqXWR41MNOTBDCyNxEDA,1478
|
|
77
|
-
fractal_server/app/schemas/v2/__init__.py,sha256=
|
|
80
|
+
fractal_server/app/schemas/v2/__init__.py,sha256=mMhdt4Jo-lyG8bITGAbpuyhDJx4MNgk-VSTKqcE6Ymo,4101
|
|
78
81
|
fractal_server/app/schemas/v2/accounting.py,sha256=6EVUdPTkFY6Wb9-Vc0cIEZYVXwGEvJ3tP4YOXYE1hao,546
|
|
79
82
|
fractal_server/app/schemas/v2/dataset.py,sha256=cBsEkny-EgNqFETMGRbJu5ChfYOnsKhkivqXK5dEOxQ,1938
|
|
80
83
|
fractal_server/app/schemas/v2/dumps.py,sha256=NrQYrfu3ze317DC7wDwjJYv6gYfkWWze25HmQmYJNhQ,2294
|
|
@@ -84,6 +87,7 @@ fractal_server/app/schemas/v2/manifest.py,sha256=I8KyVZvW6r6_DrcKX5aZ9zJwa-Kk_u3
|
|
|
84
87
|
fractal_server/app/schemas/v2/profile.py,sha256=CB44vkjRzcxAhw_6J67dYcVKKbYKJS6MdmZAXKF1ous,3299
|
|
85
88
|
fractal_server/app/schemas/v2/project.py,sha256=7UC0aZLgtmkaAiPykeUj-9OZXhMkoyi3V-475UW_EQs,654
|
|
86
89
|
fractal_server/app/schemas/v2/resource.py,sha256=MSwMKEmX9qdmYg-_2VGELlmCobJ3Ih2ldG6-R16WDBg,6230
|
|
90
|
+
fractal_server/app/schemas/v2/sharing.py,sha256=wHBiEmqhU53NokQ2rmm6xkH3lumBR6TdWw4nvDz6uww,1818
|
|
87
91
|
fractal_server/app/schemas/v2/status_legacy.py,sha256=eQT1zGxbkzSwd0EqclsOdZ60n1x6J3DB1CZ3m4LYyxc,955
|
|
88
92
|
fractal_server/app/schemas/v2/task.py,sha256=WkjliM8zujapC9CHTFme5ByjPCiln6qYKWJ_9gbcGOk,4363
|
|
89
93
|
fractal_server/app/schemas/v2/task_collection.py,sha256=QUiMAwckHSzjXlC_cyNSR1QX0fpxG1wKPcd95SE2qKo,4598
|
|
@@ -149,6 +153,7 @@ fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py,sha256=
|
|
|
149
153
|
fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py,sha256=iEqkCJvqpDxRCKD1twh92W_u665OKEGRJqsWflPx8BM,1552
|
|
150
154
|
fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py,sha256=ElHX3KHpEGJoWc-yPS5ZlGNqJ9khONWEe5_Loh78egA,1293
|
|
151
155
|
fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py,sha256=fwaqVzGKRwZ4Nz3n_Y29WO6NzLYpa3JWCM8GjiNY9WQ,10036
|
|
156
|
+
fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py,sha256=5h8ogjfQPbKbVwN0-pfh5ixPQSCCYsiVnQoOveUKKUA,2145
|
|
152
157
|
fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py,sha256=CPQNKHqsx22wSY4ylqM8UMhDOWkQeC9eLAHlQQJYSfQ,1102
|
|
153
158
|
fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py,sha256=7MpunfOBk0LM6u-xrwca8GUHIjinAJZrS9AUT3l62qU,1320
|
|
154
159
|
fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py,sha256=bFMJUFJAnOaHYyYYKISHpbQWKBoQopiEKRT0PSidqhk,3796
|
|
@@ -177,7 +182,7 @@ fractal_server/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
177
182
|
fractal_server/runner/executors/local/get_local_config.py,sha256=oI32JawlG3ixYdjxJDRfT0sreEnoHekhiAHzlejl2aM,1694
|
|
178
183
|
fractal_server/runner/executors/local/runner.py,sha256=0s0u5ONasXdsvS2WD5zxksQgved_XGXtaxCEiBJoAlM,12297
|
|
179
184
|
fractal_server/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
180
|
-
fractal_server/runner/executors/slurm_common/_batching.py,sha256=
|
|
185
|
+
fractal_server/runner/executors/slurm_common/_batching.py,sha256=YQjWRTDI1e6NeLe1R-1QWlt49i42M9ILeExEjdjgy48,8348
|
|
181
186
|
fractal_server/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
|
|
182
187
|
fractal_server/runner/executors/slurm_common/base_slurm_runner.py,sha256=pU2Szcg3tv7vinLJXbzSgYlfEPLY_b0R0YDR-FSYLc8,41873
|
|
183
188
|
fractal_server/runner/executors/slurm_common/get_slurm_config.py,sha256=B6EKjob8Y-DiJ8YbXf2CeoY7B8cwvkpKvlW8Ce6bbx0,7115
|
|
@@ -186,11 +191,11 @@ fractal_server/runner/executors/slurm_common/slurm_config.py,sha256=VSow-JfxBkdm
|
|
|
186
191
|
fractal_server/runner/executors/slurm_common/slurm_job_task_models.py,sha256=VeX40CvU5fckUpSyXlzb3EDE9xxPXkT2sZKLXq_6Ooc,3493
|
|
187
192
|
fractal_server/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
188
193
|
fractal_server/runner/executors/slurm_ssh/run_subprocess.py,sha256=SyW6t4egvbiARph2YkFjc88Hj94fCamZVi50L7ph8VM,996
|
|
189
|
-
fractal_server/runner/executors/slurm_ssh/runner.py,sha256=
|
|
194
|
+
fractal_server/runner/executors/slurm_ssh/runner.py,sha256=A6HavBk5H_fztoMV6A4pXlRPU-805gDznbJUjv0OQTU,10323
|
|
190
195
|
fractal_server/runner/executors/slurm_ssh/tar_commands.py,sha256=83etlsQ_dYvGVrKqlgyOYXnRFWSwf4VRISANsYMVxkQ,1763
|
|
191
196
|
fractal_server/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
192
197
|
fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=OaC_aOupXnU873FvBt8xfBrz41yVyTxh3fU9_vxq0dY,2567
|
|
193
|
-
fractal_server/runner/executors/slurm_sudo/runner.py,sha256=
|
|
198
|
+
fractal_server/runner/executors/slurm_sudo/runner.py,sha256=OWhzPbwhtaRO5sJ-Q1fewegYoMqIQ-lEALuMaK_PHiI,6037
|
|
194
199
|
fractal_server/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
|
|
195
200
|
fractal_server/runner/set_start_and_last_task_index.py,sha256=NsioSzfEpGyo9ZKrV5KsbxeI7d5V3tE678Y3IAo5rHM,1218
|
|
196
201
|
fractal_server/runner/task_files.py,sha256=n54A1x0MQRGSgqhzOTE-TPzEGJymUhQIUV9ApcVCV9M,4318
|
|
@@ -258,8 +263,8 @@ fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=zt
|
|
|
258
263
|
fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
|
|
259
264
|
fractal_server/utils.py,sha256=-rjg8QTXQcKweXjn0NcmETFs1_uM9PGnbl0Q7c4ERPM,2181
|
|
260
265
|
fractal_server/zip_tools.py,sha256=Uhn-ax4_9g1PJ32BdyaX30hFpAeVOv2tZYTUK-zVn1E,5719
|
|
261
|
-
fractal_server-2.
|
|
262
|
-
fractal_server-2.
|
|
263
|
-
fractal_server-2.
|
|
264
|
-
fractal_server-2.
|
|
265
|
-
fractal_server-2.
|
|
266
|
+
fractal_server-2.18.0a0.dist-info/METADATA,sha256=Z6QtIkxxrETcp7P-PYKpvhf1xAhqzoEuwwZtkfGz3gs,4277
|
|
267
|
+
fractal_server-2.18.0a0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
268
|
+
fractal_server-2.18.0a0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
|
269
|
+
fractal_server-2.18.0a0.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
|
270
|
+
fractal_server-2.18.0a0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|