fractal-server 2.0.0a4__py3-none-any.whl → 2.0.0a6__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/v2/dataset.py +0 -1
- fractal_server/app/models/v2/project.py +0 -1
- fractal_server/app/routes/api/v1/task_collection.py +10 -0
- fractal_server/app/routes/api/v2/__init__.py +5 -1
- fractal_server/app/routes/api/v2/submit.py +0 -9
- fractal_server/app/routes/api/v2/task_collection.py +11 -1
- fractal_server/app/routes/api/v2/task_legacy.py +59 -0
- fractal_server/app/runner/v1/_common.py +1 -1
- fractal_server/app/runner/v2/deduplicate_list.py +2 -1
- fractal_server/app/runner/v2/runner.py +19 -0
- fractal_server/app/runner/v2/task_interface.py +4 -2
- fractal_server/app/schemas/v1/task.py +0 -1
- fractal_server/app/schemas/v2/__init__.py +1 -0
- fractal_server/app/schemas/v2/dataset.py +2 -5
- fractal_server/app/schemas/v2/dumps.py +0 -2
- fractal_server/app/schemas/v2/project.py +0 -3
- fractal_server/app/schemas/v2/task.py +5 -0
- fractal_server/app/schemas/v2/workflow.py +2 -2
- fractal_server/images/__init__.py +1 -0
- fractal_server/images/models.py +35 -1
- fractal_server/migrations/versions/{d71e732236cd_v2.py → 80e12e1bc4fd_v2.py} +4 -6
- {fractal_server-2.0.0a4.dist-info → fractal_server-2.0.0a6.dist-info}/METADATA +1 -1
- {fractal_server-2.0.0a4.dist-info → fractal_server-2.0.0a6.dist-info}/RECORD +27 -26
- {fractal_server-2.0.0a4.dist-info → fractal_server-2.0.0a6.dist-info}/LICENSE +0 -0
- {fractal_server-2.0.0a4.dist-info → fractal_server-2.0.0a6.dist-info}/WHEEL +0 -0
- {fractal_server-2.0.0a4.dist-info → fractal_server-2.0.0a6.dist-info}/entry_points.txt +0 -0
fractal_server/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__VERSION__ = "2.0.
|
1
|
+
__VERSION__ = "2.0.0a6"
|
@@ -16,7 +16,6 @@ class ProjectV2(SQLModel, table=True):
|
|
16
16
|
|
17
17
|
id: Optional[int] = Field(default=None, primary_key=True)
|
18
18
|
name: str
|
19
|
-
read_only: bool = False
|
20
19
|
timestamp_created: datetime = Field(
|
21
20
|
default_factory=get_timestamp,
|
22
21
|
sa_column=Column(DateTime(timezone=True), nullable=False),
|
@@ -140,6 +140,16 @@ async def collect_tasks_pip(
|
|
140
140
|
f"Original error: {e}"
|
141
141
|
),
|
142
142
|
)
|
143
|
+
except ValidationError as e:
|
144
|
+
await db.close()
|
145
|
+
raise HTTPException(
|
146
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
147
|
+
detail=(
|
148
|
+
"Cannot collect package. Possible reason: an old version "
|
149
|
+
"of the same package has already been collected. "
|
150
|
+
f"Original error: {e}"
|
151
|
+
),
|
152
|
+
)
|
143
153
|
task_collect_status.info = "Already installed"
|
144
154
|
state = State(data=task_collect_status.sanitised_dict())
|
145
155
|
response.status_code == status.HTTP_200_OK
|
@@ -10,6 +10,7 @@ from .project import router as project_router_v2
|
|
10
10
|
from .submit import router as submit_job_router_v2
|
11
11
|
from .task import router as task_router_v2
|
12
12
|
from .task_collection import router as task_collection_router_v2
|
13
|
+
from .task_legacy import router as task_legacy_router_v2
|
13
14
|
from .workflow import router as workflow_router_v2
|
14
15
|
from .workflowtask import router as workflowtask_router_v2
|
15
16
|
|
@@ -20,9 +21,12 @@ router_api_v2.include_router(job_router_v2, tags=["V2 Job"])
|
|
20
21
|
router_api_v2.include_router(images_routes_v2, tags=["V2 Images"])
|
21
22
|
router_api_v2.include_router(project_router_v2, tags=["V2 Project"])
|
22
23
|
router_api_v2.include_router(submit_job_router_v2, tags=["V2 Job"])
|
23
|
-
router_api_v2.include_router(task_router_v2, prefix="/task", tags=["V2 Task"])
|
24
24
|
router_api_v2.include_router(
|
25
25
|
task_collection_router_v2, prefix="/task", tags=["V2 Task Collection"]
|
26
26
|
)
|
27
|
+
router_api_v2.include_router(task_router_v2, prefix="/task", tags=["V2 Task"])
|
28
|
+
router_api_v2.include_router(
|
29
|
+
task_legacy_router_v2, prefix="/task-legacy", tags=["V2 Task Legacy"]
|
30
|
+
)
|
27
31
|
router_api_v2.include_router(workflow_router_v2, tags=["V2 Workflow"])
|
28
32
|
router_api_v2.include_router(workflowtask_router_v2, tags=["V2 WorkflowTask"])
|
@@ -59,15 +59,6 @@ async def apply_workflow(
|
|
59
59
|
project = output["project"]
|
60
60
|
dataset = output["dataset"]
|
61
61
|
|
62
|
-
if dataset.read_only:
|
63
|
-
raise HTTPException(
|
64
|
-
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
65
|
-
detail=(
|
66
|
-
"Cannot apply workflow because dataset "
|
67
|
-
f"({dataset_id=}) is read_only."
|
68
|
-
),
|
69
|
-
)
|
70
|
-
|
71
62
|
workflow = await _get_workflow_check_owner(
|
72
63
|
project_id=project_id, workflow_id=workflow_id, user_id=user.id, db=db
|
73
64
|
)
|
@@ -137,7 +137,17 @@ async def collect_tasks_pip(
|
|
137
137
|
detail=(
|
138
138
|
"Cannot collect package. Possible reason: another "
|
139
139
|
"collection of the same package is in progress. "
|
140
|
-
f"Original
|
140
|
+
f"Original FileNotFoundError: {e}"
|
141
|
+
),
|
142
|
+
)
|
143
|
+
except ValidationError as e:
|
144
|
+
await db.close()
|
145
|
+
raise HTTPException(
|
146
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
147
|
+
detail=(
|
148
|
+
"Cannot collect package. Possible reason: an old version "
|
149
|
+
"of the same package has already been collected. "
|
150
|
+
f"Original ValidationError: {e}"
|
141
151
|
),
|
142
152
|
)
|
143
153
|
task_collect_status.info = "Already installed"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
from fastapi import APIRouter
|
2
|
+
from fastapi import Depends
|
3
|
+
from fastapi import HTTPException
|
4
|
+
from fastapi import status
|
5
|
+
from sqlmodel import select
|
6
|
+
|
7
|
+
from .....logger import set_logger
|
8
|
+
from ....db import AsyncSession
|
9
|
+
from ....db import get_async_db
|
10
|
+
from ....models.v1 import Task as TaskV1
|
11
|
+
from ....schemas.v2 import TaskLegacyReadV2
|
12
|
+
from ....security import current_active_user
|
13
|
+
from ....security import User
|
14
|
+
|
15
|
+
router = APIRouter()
|
16
|
+
|
17
|
+
logger = set_logger(__name__)
|
18
|
+
|
19
|
+
|
20
|
+
@router.get("/", response_model=list[TaskLegacyReadV2])
|
21
|
+
async def get_list_task_legacy(
|
22
|
+
args_schema: bool = True,
|
23
|
+
only_v2_compatible: bool = False,
|
24
|
+
user: User = Depends(current_active_user),
|
25
|
+
db: AsyncSession = Depends(get_async_db),
|
26
|
+
) -> list[TaskLegacyReadV2]:
|
27
|
+
"""
|
28
|
+
Get list of available legacy tasks
|
29
|
+
"""
|
30
|
+
stm = select(TaskV1)
|
31
|
+
if only_v2_compatible:
|
32
|
+
stm = stm.where(TaskV1.is_v2_compatible)
|
33
|
+
res = await db.execute(stm)
|
34
|
+
task_list = res.scalars().all()
|
35
|
+
await db.close()
|
36
|
+
if args_schema is False:
|
37
|
+
for task in task_list:
|
38
|
+
setattr(task, "args_schema", None)
|
39
|
+
|
40
|
+
return task_list
|
41
|
+
|
42
|
+
|
43
|
+
@router.get("/{task_id}/", response_model=TaskLegacyReadV2)
|
44
|
+
async def get_task_legacy(
|
45
|
+
task_id: int,
|
46
|
+
user: User = Depends(current_active_user),
|
47
|
+
db: AsyncSession = Depends(get_async_db),
|
48
|
+
) -> TaskLegacyReadV2:
|
49
|
+
"""
|
50
|
+
Get info on a specific legacy task
|
51
|
+
"""
|
52
|
+
task = await db.get(TaskV1, task_id)
|
53
|
+
await db.close()
|
54
|
+
if not task:
|
55
|
+
raise HTTPException(
|
56
|
+
status_code=status.HTTP_404_NOT_FOUND,
|
57
|
+
detail=f"TaskV1[{task_id}] not found",
|
58
|
+
)
|
59
|
+
return task
|
@@ -207,7 +207,7 @@ def call_single_task(
|
|
207
207
|
with task_files.metadiff.open("r") as f_metadiff:
|
208
208
|
diff_metadata = json.load(f_metadiff)
|
209
209
|
except FileNotFoundError as e:
|
210
|
-
logger.
|
210
|
+
logger.warning(
|
211
211
|
f"Skip collection of updated metadata. Original error: {str(e)}"
|
212
212
|
)
|
213
213
|
diff_metadata = {}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
from typing import TypeVar
|
2
2
|
|
3
3
|
from ....images import SingleImage
|
4
|
+
from ....images import SingleImageTaskOutput
|
4
5
|
from .task_interface import InitArgsModel
|
5
6
|
|
6
|
-
T = TypeVar("T", SingleImage, InitArgsModel)
|
7
|
+
T = TypeVar("T", SingleImage, SingleImageTaskOutput, InitArgsModel)
|
7
8
|
|
8
9
|
|
9
10
|
def deduplicate_list(
|
@@ -157,6 +157,20 @@ def execute_tasks_v2(
|
|
157
157
|
updated_types.update(image["types"])
|
158
158
|
updated_types.update(task.output_types)
|
159
159
|
|
160
|
+
# Unset attributes with None value
|
161
|
+
updated_attributes = {
|
162
|
+
key: value
|
163
|
+
for key, value in updated_attributes.items()
|
164
|
+
if value is not None
|
165
|
+
}
|
166
|
+
|
167
|
+
# Validate new image
|
168
|
+
SingleImage(
|
169
|
+
zarr_url=image["zarr_url"],
|
170
|
+
types=updated_types,
|
171
|
+
attributes=updated_attributes,
|
172
|
+
)
|
173
|
+
|
160
174
|
# Update image in the dataset image list
|
161
175
|
tmp_images[original_index]["attributes"] = updated_attributes
|
162
176
|
tmp_images[original_index]["types"] = updated_types
|
@@ -182,6 +196,11 @@ def execute_tasks_v2(
|
|
182
196
|
updated_types = copy(original_img["types"])
|
183
197
|
# Update image attributes/types with task output and manifest
|
184
198
|
updated_attributes.update(image["attributes"])
|
199
|
+
updated_attributes = {
|
200
|
+
key: value
|
201
|
+
for key, value in updated_attributes.items()
|
202
|
+
if value is not None
|
203
|
+
}
|
185
204
|
updated_types.update(image["types"])
|
186
205
|
updated_types.update(task.output_types)
|
187
206
|
new_image = dict(
|
@@ -3,7 +3,7 @@ from typing import Any
|
|
3
3
|
from pydantic import BaseModel
|
4
4
|
from pydantic import Field
|
5
5
|
|
6
|
-
from ....images import
|
6
|
+
from ....images import SingleImageTaskOutput
|
7
7
|
from fractal_server.images import Filters
|
8
8
|
|
9
9
|
|
@@ -11,7 +11,9 @@ class TaskOutput(BaseModel):
|
|
11
11
|
class Config:
|
12
12
|
extra = "forbid"
|
13
13
|
|
14
|
-
image_list_updates: list[
|
14
|
+
image_list_updates: list[SingleImageTaskOutput] = Field(
|
15
|
+
default_factory=list
|
16
|
+
)
|
15
17
|
image_list_removals: list[str] = Field(default_factory=list)
|
16
18
|
filters: Filters = Field(default_factory=Filters)
|
17
19
|
|
@@ -17,6 +17,7 @@ from .project import ProjectUpdateV2 # noqa F401
|
|
17
17
|
from .task import TaskCreateV2 # noqa F401
|
18
18
|
from .task import TaskExportV2 # noqa F401
|
19
19
|
from .task import TaskImportV2 # noqa F401
|
20
|
+
from .task import TaskLegacyReadV2 # noqa F401
|
20
21
|
from .task import TaskReadV2 # noqa F401
|
21
22
|
from .task import TaskUpdateV2 # noqa F401
|
22
23
|
from .task_collection import TaskCollectPipV2 # noqa F401
|
@@ -8,8 +8,8 @@ from pydantic import validator
|
|
8
8
|
|
9
9
|
from .._validators import valstr
|
10
10
|
from .._validators import valutc
|
11
|
-
from ..v1.project import ProjectReadV1
|
12
11
|
from .dumps import WorkflowTaskDumpV2
|
12
|
+
from .project import ProjectReadV2
|
13
13
|
from .workflowtask import WorkflowTaskStatusTypeV2
|
14
14
|
from fractal_server.images import Filters
|
15
15
|
|
@@ -45,7 +45,6 @@ class DatasetCreateV2(BaseModel, extra=Extra.forbid):
|
|
45
45
|
|
46
46
|
name: str
|
47
47
|
|
48
|
-
read_only: bool = False
|
49
48
|
zarr_dir: str
|
50
49
|
|
51
50
|
filters: Filters = Field(default_factory=Filters)
|
@@ -60,10 +59,9 @@ class DatasetReadV2(BaseModel):
|
|
60
59
|
name: str
|
61
60
|
|
62
61
|
project_id: int
|
63
|
-
project:
|
62
|
+
project: ProjectReadV2
|
64
63
|
|
65
64
|
history: list[_DatasetHistoryItemV2]
|
66
|
-
read_only: bool
|
67
65
|
|
68
66
|
timestamp_created: datetime
|
69
67
|
|
@@ -81,7 +79,6 @@ class DatasetUpdateV2(BaseModel):
|
|
81
79
|
extra = "forbid"
|
82
80
|
|
83
81
|
name: Optional[str]
|
84
|
-
read_only: Optional[bool]
|
85
82
|
zarr_dir: Optional[str]
|
86
83
|
filters: Optional[Filters]
|
87
84
|
|
@@ -22,7 +22,6 @@ class ProjectDumpV2(BaseModel, extra=Extra.forbid):
|
|
22
22
|
|
23
23
|
id: int
|
24
24
|
name: str
|
25
|
-
read_only: bool
|
26
25
|
timestamp_created: str
|
27
26
|
|
28
27
|
|
@@ -80,7 +79,6 @@ class DatasetDumpV2(BaseModel):
|
|
80
79
|
id: int
|
81
80
|
name: str
|
82
81
|
project_id: int
|
83
|
-
read_only: bool
|
84
82
|
timestamp_created: str
|
85
83
|
|
86
84
|
zarr_dir: str
|
@@ -12,7 +12,6 @@ from .._validators import valutc
|
|
12
12
|
class ProjectCreateV2(BaseModel, extra=Extra.forbid):
|
13
13
|
|
14
14
|
name: str
|
15
|
-
read_only: bool = False
|
16
15
|
# Validators
|
17
16
|
_name = validator("name", allow_reuse=True)(valstr("name"))
|
18
17
|
|
@@ -21,7 +20,6 @@ class ProjectReadV2(BaseModel):
|
|
21
20
|
|
22
21
|
id: int
|
23
22
|
name: str
|
24
|
-
read_only: bool
|
25
23
|
timestamp_created: datetime
|
26
24
|
# Validators
|
27
25
|
_timestamp_created = validator("timestamp_created", allow_reuse=True)(
|
@@ -32,6 +30,5 @@ class ProjectReadV2(BaseModel):
|
|
32
30
|
class ProjectUpdateV2(BaseModel):
|
33
31
|
|
34
32
|
name: Optional[str]
|
35
|
-
read_only: Optional[bool]
|
36
33
|
# Validators
|
37
34
|
_name = validator("name", allow_reuse=True)(valstr("name"))
|
@@ -11,6 +11,7 @@ from pydantic import validator
|
|
11
11
|
|
12
12
|
from .._validators import valdictkeys
|
13
13
|
from .._validators import valstr
|
14
|
+
from ..v1.task import TaskReadV1
|
14
15
|
|
15
16
|
|
16
17
|
class TaskCreateV2(BaseModel, extra=Extra.forbid):
|
@@ -100,6 +101,10 @@ class TaskReadV2(BaseModel):
|
|
100
101
|
output_types: dict[str, bool]
|
101
102
|
|
102
103
|
|
104
|
+
class TaskLegacyReadV2(TaskReadV1):
|
105
|
+
is_v2_compatible: bool
|
106
|
+
|
107
|
+
|
103
108
|
class TaskUpdateV2(BaseModel):
|
104
109
|
|
105
110
|
name: Optional[str]
|
@@ -7,7 +7,7 @@ from pydantic import validator
|
|
7
7
|
|
8
8
|
from .._validators import valstr
|
9
9
|
from .._validators import valutc
|
10
|
-
from
|
10
|
+
from .project import ProjectReadV2
|
11
11
|
from .workflowtask import WorkflowTaskExportV2
|
12
12
|
from .workflowtask import WorkflowTaskImportV2
|
13
13
|
from .workflowtask import WorkflowTaskReadV2
|
@@ -27,7 +27,7 @@ class WorkflowReadV2(BaseModel):
|
|
27
27
|
name: str
|
28
28
|
project_id: int
|
29
29
|
task_list: list[WorkflowTaskReadV2]
|
30
|
-
project:
|
30
|
+
project: ProjectReadV2
|
31
31
|
timestamp_created: datetime
|
32
32
|
|
33
33
|
_timestamp_created = validator("timestamp_created", allow_reuse=True)(
|
fractal_server/images/models.py
CHANGED
@@ -9,7 +9,16 @@ from pydantic import validator
|
|
9
9
|
from fractal_server.app.schemas._validators import valdictkeys
|
10
10
|
|
11
11
|
|
12
|
-
class
|
12
|
+
class SingleImageBase(BaseModel):
|
13
|
+
"""
|
14
|
+
Base for SingleImage and SingleImageTaskOutput.
|
15
|
+
|
16
|
+
Attributes:
|
17
|
+
zarr_url:
|
18
|
+
origin:
|
19
|
+
attributes:
|
20
|
+
types:
|
21
|
+
"""
|
13
22
|
|
14
23
|
zarr_url: str
|
15
24
|
origin: Optional[str] = None
|
@@ -23,6 +32,31 @@ class SingleImage(BaseModel):
|
|
23
32
|
)
|
24
33
|
_types = validator("types", allow_reuse=True)(valdictkeys("types"))
|
25
34
|
|
35
|
+
|
36
|
+
class SingleImageTaskOutput(SingleImageBase):
|
37
|
+
"""
|
38
|
+
`SingleImageBase`, with scalar `attributes` values (`None` included).
|
39
|
+
"""
|
40
|
+
|
41
|
+
@validator("attributes")
|
42
|
+
def validate_attributes(
|
43
|
+
cls, v: dict[str, Any]
|
44
|
+
) -> dict[str, Union[int, float, str, bool, None]]:
|
45
|
+
for key, value in v.items():
|
46
|
+
if not isinstance(value, (int, float, str, bool, type(None))):
|
47
|
+
raise ValueError(
|
48
|
+
f"SingleImageTaskOutput.attributes[{key}] must be a "
|
49
|
+
"scalar (int, float, str or bool). "
|
50
|
+
f"Given {value} ({type(value)})"
|
51
|
+
)
|
52
|
+
return v
|
53
|
+
|
54
|
+
|
55
|
+
class SingleImage(SingleImageBase):
|
56
|
+
"""
|
57
|
+
`SingleImageBase`, with scalar `attributes` values (`None` excluded).
|
58
|
+
"""
|
59
|
+
|
26
60
|
@validator("attributes")
|
27
61
|
def validate_attributes(
|
28
62
|
cls, v: dict[str, Any]
|
@@ -1,8 +1,8 @@
|
|
1
|
-
"""
|
1
|
+
"""V2
|
2
2
|
|
3
|
-
Revision ID:
|
3
|
+
Revision ID: 80e12e1bc4fd
|
4
4
|
Revises: 9fd26a2b0de4
|
5
|
-
Create Date: 2024-04-
|
5
|
+
Create Date: 2024-04-12 10:13:58.085788
|
6
6
|
|
7
7
|
"""
|
8
8
|
import sqlalchemy as sa
|
@@ -11,7 +11,7 @@ from alembic import op
|
|
11
11
|
|
12
12
|
|
13
13
|
# revision identifiers, used by Alembic.
|
14
|
-
revision = "
|
14
|
+
revision = "80e12e1bc4fd"
|
15
15
|
down_revision = "9fd26a2b0de4"
|
16
16
|
branch_labels = None
|
17
17
|
depends_on = None
|
@@ -23,7 +23,6 @@ def upgrade() -> None:
|
|
23
23
|
"projectv2",
|
24
24
|
sa.Column("id", sa.Integer(), nullable=False),
|
25
25
|
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
26
|
-
sa.Column("read_only", sa.Boolean(), nullable=False),
|
27
26
|
sa.Column(
|
28
27
|
"timestamp_created", sa.DateTime(timezone=True), nullable=False
|
29
28
|
),
|
@@ -81,7 +80,6 @@ def upgrade() -> None:
|
|
81
80
|
sa.Column("name", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
|
82
81
|
sa.Column("project_id", sa.Integer(), nullable=False),
|
83
82
|
sa.Column("history", sa.JSON(), server_default="[]", nullable=False),
|
84
|
-
sa.Column("read_only", sa.Boolean(), nullable=False),
|
85
83
|
sa.Column(
|
86
84
|
"timestamp_created", sa.DateTime(timezone=True), nullable=False
|
87
85
|
),
|
@@ -1,4 +1,4 @@
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
1
|
+
fractal_server/__init__.py,sha256=5qWDQ_nyhHlAAd6zm7X6HCZpyfGaVJKhBA0qSF2KZfA,24
|
2
2
|
fractal_server/__main__.py,sha256=CocbzZooX1UtGqPi55GcHGNxnrJXFg5tUU5b3wyFCyo,4958
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -14,9 +14,9 @@ fractal_server/app/models/v1/project.py,sha256=sDmAFLOBK5o4dLrwsIN681JcT5J1rzoUN
|
|
14
14
|
fractal_server/app/models/v1/task.py,sha256=3xZqNeFYUqslh8ddMSXF2nO4nIiOD8T5Ij37wY20kss,2782
|
15
15
|
fractal_server/app/models/v1/workflow.py,sha256=dnY5eMaOe3oZv8arn00RNX9qVkBtTLG-vYdWXcQuyo4,3950
|
16
16
|
fractal_server/app/models/v2/__init__.py,sha256=2T_ZXpP9n5IktoX3bkQUKUKzGAN5tJiR1LKWOtOCclM,400
|
17
|
-
fractal_server/app/models/v2/dataset.py,sha256
|
17
|
+
fractal_server/app/models/v2/dataset.py,sha256=-7sxHEw4IIAvF_uSan7tA3o8hvoakBkQ0SRvqS2iOQU,1455
|
18
18
|
fractal_server/app/models/v2/job.py,sha256=PCJf0_NYIc5boXL6e6P72BvYJGydCZOGKnW2DT4Sw9g,1535
|
19
|
-
fractal_server/app/models/v2/project.py,sha256=
|
19
|
+
fractal_server/app/models/v2/project.py,sha256=CqDEKzdVxmFDMee6DnVOyX7WGmdn-dQSLSekzw_OLUc,817
|
20
20
|
fractal_server/app/models/v2/task.py,sha256=9ZPhug3VWyeqgT8wQ9_8ZXQ2crSiiicRipxrxTslOso,3257
|
21
21
|
fractal_server/app/models/v2/workflow.py,sha256=4pSTeZC78OQbgHHC5S0ge6pK1AP6ak7Qew_0ZNM9xuw,1256
|
22
22
|
fractal_server/app/models/v2/workflowtask.py,sha256=f2a85MSAyBAdC7oG6SR8mViMNqlomQWaIB08n3ZhT-0,2727
|
@@ -31,18 +31,19 @@ fractal_server/app/routes/api/v1/dataset.py,sha256=7z57FGBTCyz_G6Ivr1PeGIXGyd15f
|
|
31
31
|
fractal_server/app/routes/api/v1/job.py,sha256=NwXyhvvzdPDor0ts8Im__9-I0P1H943s4NXIRgaz7PM,5436
|
32
32
|
fractal_server/app/routes/api/v1/project.py,sha256=keqA0gYM48lyFP8zJgZ6cv34V6Js8DD-gbzE316H46k,15765
|
33
33
|
fractal_server/app/routes/api/v1/task.py,sha256=4zUXMtq5M95XjaZs1t9oibYHiDIwxpM-3sTAxN95aRk,6123
|
34
|
-
fractal_server/app/routes/api/v1/task_collection.py,sha256=
|
34
|
+
fractal_server/app/routes/api/v1/task_collection.py,sha256=_cY3pPRGchdWPuJ1XudMZMVJ0IC0_XVH0XwLTiAbRGg,8873
|
35
35
|
fractal_server/app/routes/api/v1/workflow.py,sha256=ZObifWTPi100oRQ1wEER8Sgsr3Neo8QVdCCFQnWMNZ0,10930
|
36
36
|
fractal_server/app/routes/api/v1/workflowtask.py,sha256=ox-DIIqYV4K35hCu86eGa2SHnR5IQml-I00UHEwnmHQ,5579
|
37
|
-
fractal_server/app/routes/api/v2/__init__.py,sha256=
|
37
|
+
fractal_server/app/routes/api/v2/__init__.py,sha256=x56HcY1uBNCgq4BRVj-0j6bAj6OsTN97RNDqY8NefJ8,1373
|
38
38
|
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=TCHf3aM-KQxaNJen10CGX1Da5IIra00xRF39FUTU698,14301
|
39
39
|
fractal_server/app/routes/api/v2/dataset.py,sha256=qQi9jfT9YLu6DrRCPh280J3MoFWs9yMiejkCNaauCyQ,9680
|
40
40
|
fractal_server/app/routes/api/v2/images.py,sha256=b1NM9Y0ocuRYRec-3UcVAizB0vFkmzPEHfObaoCnIMY,5956
|
41
41
|
fractal_server/app/routes/api/v2/job.py,sha256=9mXaKCX_N3FXM0GIxdE49nWl_hJZ8CBLBIaMMhaCKOM,5334
|
42
42
|
fractal_server/app/routes/api/v2/project.py,sha256=i9a19HAqE36N92G60ZYgObIP9nv-hR7Jt5nd9Dkhz1g,6024
|
43
|
-
fractal_server/app/routes/api/v2/submit.py,sha256=
|
43
|
+
fractal_server/app/routes/api/v2/submit.py,sha256=iszII5CvWDEjGPTphBgH9FVS1pNb5m11Xc8xozGgjgI,6901
|
44
44
|
fractal_server/app/routes/api/v2/task.py,sha256=gJ0LruSk-Q1iMw8ZOX8C0wrZ4S4DGlQTr_5SdJJud0Q,7130
|
45
|
-
fractal_server/app/routes/api/v2/task_collection.py,sha256=
|
45
|
+
fractal_server/app/routes/api/v2/task_collection.py,sha256=iw74UF8qdQa9pJf0DvSjihng6ri2k2HtW2UhMS_a8Zc,8904
|
46
|
+
fractal_server/app/routes/api/v2/task_legacy.py,sha256=P_VJv9v0yzFUBuS-DQHhMVSOe20ecGJJcFBqiiFciOM,1628
|
46
47
|
fractal_server/app/routes/api/v2/workflow.py,sha256=sw-1phO_rrmDAcWX9Zqb9M8SfrWF78-02AuLB1-D1PU,11845
|
47
48
|
fractal_server/app/routes/api/v2/workflowtask.py,sha256=L4hYpb-ihKNfPxM5AnZqPhCdiojI9Eq5TR0wf-0vP_s,8414
|
48
49
|
fractal_server/app/routes/auth.py,sha256=Xv80iqdyfY3lyicYs2Y8B6zEDEnyUu_H6_6psYtv3R4,4885
|
@@ -67,7 +68,7 @@ fractal_server/app/runner/filenames.py,sha256=9lwu3yB4C67yiijYw8XIKaLFn3mJUt6_TC
|
|
67
68
|
fractal_server/app/runner/set_start_and_last_task_index.py,sha256=-q4zVybAj8ek2XlbENKlfOAJ39hT_zoJoZkqzDqiAMY,1254
|
68
69
|
fractal_server/app/runner/task_files.py,sha256=c5mggMy7BIK_yBUvbimFgvKFZPKKDu6RRfWepwinBVk,3219
|
69
70
|
fractal_server/app/runner/v1/__init__.py,sha256=meqMG2UejFa_1hm5xlsmkDxsM7Y_hqftsexuteQXOrE,13608
|
70
|
-
fractal_server/app/runner/v1/_common.py,sha256=
|
71
|
+
fractal_server/app/runner/v1/_common.py,sha256=fIt8BVW7u6ReZbHgQ5kV2kDtWoHMQNjPoeuWP5YfWQk,21240
|
71
72
|
fractal_server/app/runner/v1/_local/__init__.py,sha256=8PjeyPLvj6KHdZ3HyzWZCdlrubgedA1hZLXGAsLNOKI,6926
|
72
73
|
fractal_server/app/runner/v1/_local/_local_config.py,sha256=hM7SPxR07luXPcXdrWXRpEB2uOyjSSRUdqW3QBKJn9c,3147
|
73
74
|
fractal_server/app/runner/v1/_local/_submit_setup.py,sha256=kvNPT7ey2mEamORzPMMVThbFHtzZcSr-0A9tYw9uVDA,1493
|
@@ -85,13 +86,13 @@ fractal_server/app/runner/v2/_local/executor.py,sha256=QrJlD77G6q4WohoJQO7XXbvi2
|
|
85
86
|
fractal_server/app/runner/v2/_slurm/__init__.py,sha256=srxn5-KdQxqD8cWJmOJlSoctbXYlyCMM249xWGY9bhI,4409
|
86
87
|
fractal_server/app/runner/v2/_slurm/_submit_setup.py,sha256=tsZHQdVy3VxENMdsBzHltrVWzugBppq0cFrHtaVzoUA,2793
|
87
88
|
fractal_server/app/runner/v2/_slurm/get_slurm_config.py,sha256=sqP-hs58TPt849rx10VRFKWX_DgLDPQcKZJcE0zKBXs,6621
|
88
|
-
fractal_server/app/runner/v2/deduplicate_list.py,sha256
|
89
|
+
fractal_server/app/runner/v2/deduplicate_list.py,sha256=-imwO7OB7ATADEnqVbTElUwoY0YIJCTf_SbWJNN9OZg,639
|
89
90
|
fractal_server/app/runner/v2/handle_failed_job.py,sha256=fipRJT5Y8UY0US4bXUX-4ORTAQ1AetZcCAOVCjDO3_c,5202
|
90
91
|
fractal_server/app/runner/v2/merge_outputs.py,sha256=IHuHqbKmk97K35BFvTrKVBs60z3e_--OzXTnsvmA02c,1281
|
91
|
-
fractal_server/app/runner/v2/runner.py,sha256=
|
92
|
+
fractal_server/app/runner/v2/runner.py,sha256=rBRehRDduGU0TUOkgQN6WbIGhDWZ6GOat4bv7IVB8cA,11784
|
92
93
|
fractal_server/app/runner/v2/runner_functions.py,sha256=LfO1-FJF70_Qh78NQTCHJWyzyr011wvvtnzB6nTj5ZM,10087
|
93
94
|
fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=Pp3hsj1i1t4ExDMcUBkQ27yEi7kjlvymY6q6eDiC8DM,3845
|
94
|
-
fractal_server/app/runner/v2/task_interface.py,sha256=
|
95
|
+
fractal_server/app/runner/v2/task_interface.py,sha256=NJZUMHtEs5C3bFdXX42Kv1GMzQ7xPW2v5ZRxGNANOec,1410
|
95
96
|
fractal_server/app/runner/v2/v1_compat.py,sha256=6UijuRYbB2ry2mM073u1fW4CSTeelB11lmoj_TOGtm4,511
|
96
97
|
fractal_server/app/schemas/__init__.py,sha256=VL55f3CTFngXHYkOsFaLBEEkEEewEWI5ODlcGTI7cqA,157
|
97
98
|
fractal_server/app/schemas/_validators.py,sha256=Pdff5plJJmoUTf_nZpMA24tZlFJb84EdRSnLwRZDxfE,3264
|
@@ -103,24 +104,24 @@ fractal_server/app/schemas/v1/dataset.py,sha256=n71lNUO3JLy2K3IM9BZM2Fk1EnKQOTU7
|
|
103
104
|
fractal_server/app/schemas/v1/dumps.py,sha256=67VXnyLh_0Ufo7rPM2jZ9P9rk0CnYcVAkilx_cLX6sg,1274
|
104
105
|
fractal_server/app/schemas/v1/manifest.py,sha256=Yht7guhs0Pcl2U0RMOCbI_UHBZ9YO_YU0H8hxACx3TY,3829
|
105
106
|
fractal_server/app/schemas/v1/project.py,sha256=TO2TjI4m9FO-A9IB9lUCld7E4Ld0k4MacLcyA9j6Qi4,1218
|
106
|
-
fractal_server/app/schemas/v1/task.py,sha256=
|
107
|
+
fractal_server/app/schemas/v1/task.py,sha256=7BxOZ_qoRQ8n3YbQpDvB7VMcxB5fSYQmR5RLIWhuJ5U,3704
|
107
108
|
fractal_server/app/schemas/v1/task_collection.py,sha256=uvq9bcMaGD_qHsh7YtcpoSAkVAbw12eY4DocIO3MKOg,3057
|
108
109
|
fractal_server/app/schemas/v1/workflow.py,sha256=tuOs5E5Q_ozA8if7YPZ07cQjzqB_QMkBS4u92qo4Ro0,4618
|
109
|
-
fractal_server/app/schemas/v2/__init__.py,sha256=
|
110
|
-
fractal_server/app/schemas/v2/dataset.py,sha256=
|
111
|
-
fractal_server/app/schemas/v2/dumps.py,sha256=
|
110
|
+
fractal_server/app/schemas/v2/__init__.py,sha256=zlCYrplCWwnCL9-BYsExRMfVzhBy21IMBfdHPMgJZYk,1752
|
111
|
+
fractal_server/app/schemas/v2/dataset.py,sha256=VSAB8np2TdZf_a2NJKkpBVJFDSs0IYpLan5RDzu6g3E,1757
|
112
|
+
fractal_server/app/schemas/v2/dumps.py,sha256=Xen0OPf1Ax9i_7ItrAPvCk1OCNcUsnhlLRiyny89aLM,1997
|
112
113
|
fractal_server/app/schemas/v2/job.py,sha256=zfF9K3v4jWUJ7M482ta2CkqUJ4tVT4XfVt60p9IRhP0,3250
|
113
114
|
fractal_server/app/schemas/v2/manifest.py,sha256=N37IWohcfO3_y2l8rVM0h_1nZq7m4Izxk9iL1vtwBJw,6243
|
114
|
-
fractal_server/app/schemas/v2/project.py,sha256=
|
115
|
-
fractal_server/app/schemas/v2/task.py,sha256=
|
115
|
+
fractal_server/app/schemas/v2/project.py,sha256=u7S4B-bote1oGjzAGiZ-DuQIyeRAGqJsI71Tc1EtYE0,736
|
116
|
+
fractal_server/app/schemas/v2/task.py,sha256=7IfxiZkaVqlARy7WYE_H8m7j_IEcuQaZORUrs6b5YuY,4672
|
116
117
|
fractal_server/app/schemas/v2/task_collection.py,sha256=sY29NQfJrbjiidmVkVjSIH-20wIsmh7G1QOdr05KoDQ,3171
|
117
|
-
fractal_server/app/schemas/v2/workflow.py,sha256=
|
118
|
+
fractal_server/app/schemas/v2/workflow.py,sha256=Zzx3e-qgkH8le0FUmAx9UrV5PWd7bj14PPXUh_zgZXM,1827
|
118
119
|
fractal_server/app/schemas/v2/workflowtask.py,sha256=vRyPca8smu6fzwd9gO1eOd3qdPLJ-Zq2AAAbSLCou3I,5051
|
119
120
|
fractal_server/app/security/__init__.py,sha256=wxosoHc3mJYPCdPMyWnRD8w_2OgnKYp2aDkdmwrZh5k,11203
|
120
121
|
fractal_server/config.py,sha256=CA8ASObADaME5chDiBXawAJZ3MvjTRpCKP0jvdYtSh8,15080
|
121
122
|
fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
|
122
|
-
fractal_server/images/__init__.py,sha256=
|
123
|
-
fractal_server/images/models.py,sha256=
|
123
|
+
fractal_server/images/__init__.py,sha256=KWLVMlWqTY85qq1VUpzaJi5Sl2VOYWEn0vIEiD-QZ5k,144
|
124
|
+
fractal_server/images/models.py,sha256=hgDQf1-SsMJw504GFUufVETedPPEweCQxUhA2uDfdao,2904
|
124
125
|
fractal_server/images/tools.py,sha256=Q7jM60r_jq5bttrt1b4bU29n717RSUMMPbAbAkzWjgw,2234
|
125
126
|
fractal_server/logger.py,sha256=95duXY8eSxf1HWg0CVn8SUGNzgJw9ZR0FlapDDF6WAY,3924
|
126
127
|
fractal_server/main.py,sha256=7CpwPfCsHxBAo5fWuXPCsYOFCpbBI0F7Z0jsgCQdou8,3001
|
@@ -132,6 +133,7 @@ fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nu
|
|
132
133
|
fractal_server/migrations/versions/50a13d6138fd_initial_schema.py,sha256=zwXegXs9J40eyCWi3w0c_iIBVJjXNn4VdVnQaT3KxDg,8770
|
133
134
|
fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
|
134
135
|
fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=mbWuCkTpRAdGbRhW7lhXs_e5S6O37UAcCN6JfoY5H8A,1353
|
136
|
+
fractal_server/migrations/versions/80e12e1bc4fd_v2.py,sha256=WsgwzUVN2WNkaDaLawpYGwvGfoYmD0Vl3EZFdrIqXhg,8116
|
135
137
|
fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=NSCuhANChsg76vBkShBl-9tQ4VEHubOjtAv1etHhlvY,2684
|
136
138
|
fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=6pgODDtyAxevZvAJBj9IJ41inhV1RpwbpZr_qfPPu1A,1115
|
137
139
|
fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py,sha256=eKTZm3EgUgapXBxO0RuHkEfTKic-TZG3ADaMpGLuc0k,1057
|
@@ -139,7 +141,6 @@ fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py,sha256=0i
|
|
139
141
|
fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py,sha256=4l1AHGUsa0ONoJVZlr3fTXw_xbbQ8O7wlD92Az2aRfM,1849
|
140
142
|
fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py,sha256=ekDUML7ILpmdoqEclKbEUdyLi4uw9HSG_sTjG2hp_JE,867
|
141
143
|
fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py,sha256=6cHEZFuTXiQg9yu32Y3RH1XAl71av141WQ6UMbiITIg,949
|
142
|
-
fractal_server/migrations/versions/d71e732236cd_v2.py,sha256=ayEPVYvQwq7fZF9I_8oik8Hp-6Ay_0lFRk1xCoyS6-8,8240
|
143
144
|
fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py,sha256=lOggSvzGWqQvnxxFuSM6W50Ui49R918A-uBuiZJ0pNM,963
|
144
145
|
fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py,sha256=jilQW3QIqYQ4Q6hCnUiG7UtNMpA41ujqrB3tPFiPM1Q,1221
|
145
146
|
fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py,sha256=9BwqUS9Gf7UW_KjrzHbtViC880qhD452KAytkHWWZyk,746
|
@@ -157,8 +158,8 @@ fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
157
158
|
fractal_server/tasks/v2/background_operations.py,sha256=zr6j3uoWmCeW2EA9auxWNZ0sG3SHgSxUVTC1OpQXE3Y,12803
|
158
159
|
fractal_server/tasks/v2/get_collection_data.py,sha256=Qhf2T_aaqAfqu9_KpUSlXsS7EJoZQbEPEreHHa2jco8,502
|
159
160
|
fractal_server/utils.py,sha256=b7WwFdcFZ8unyT65mloFToYuEDXpQoHRcmRNqrhd_dQ,2115
|
160
|
-
fractal_server-2.0.
|
161
|
-
fractal_server-2.0.
|
162
|
-
fractal_server-2.0.
|
163
|
-
fractal_server-2.0.
|
164
|
-
fractal_server-2.0.
|
161
|
+
fractal_server-2.0.0a6.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
162
|
+
fractal_server-2.0.0a6.dist-info/METADATA,sha256=VzuxOIkkB0Uv-MzjnyEf9Xu3xhQzJQUNCYROj_tVrwM,4204
|
163
|
+
fractal_server-2.0.0a6.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
164
|
+
fractal_server-2.0.0a6.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
165
|
+
fractal_server-2.0.0a6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|