fractal-server 2.7.0a3__py3-none-any.whl → 2.7.0a5__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.
Files changed (53) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +3 -9
  3. fractal_server/app/models/v2/collection_state.py +1 -0
  4. fractal_server/app/models/v2/task.py +27 -3
  5. fractal_server/app/routes/admin/v2/task.py +4 -17
  6. fractal_server/app/routes/admin/v2/task_group.py +21 -0
  7. fractal_server/app/routes/api/v1/task_collection.py +4 -4
  8. fractal_server/app/routes/api/v2/_aux_functions.py +1 -7
  9. fractal_server/app/routes/api/v2/_aux_functions_tasks.py +75 -2
  10. fractal_server/app/routes/api/v2/task.py +16 -42
  11. fractal_server/app/routes/api/v2/task_collection.py +175 -204
  12. fractal_server/app/routes/api/v2/task_collection_custom.py +31 -58
  13. fractal_server/app/routes/api/v2/task_group.py +29 -1
  14. fractal_server/app/routes/api/v2/workflow.py +11 -46
  15. fractal_server/app/routes/api/v2/workflowtask.py +0 -1
  16. fractal_server/app/routes/auth/_aux_auth.py +15 -12
  17. fractal_server/app/routes/auth/group.py +46 -23
  18. fractal_server/app/runner/v2/task_interface.py +4 -9
  19. fractal_server/app/schemas/v2/dataset.py +2 -7
  20. fractal_server/app/schemas/v2/dumps.py +1 -2
  21. fractal_server/app/schemas/v2/job.py +1 -1
  22. fractal_server/app/schemas/v2/project.py +1 -1
  23. fractal_server/app/schemas/v2/task.py +5 -10
  24. fractal_server/app/schemas/v2/task_collection.py +8 -6
  25. fractal_server/app/schemas/v2/task_group.py +31 -3
  26. fractal_server/app/schemas/v2/workflow.py +2 -2
  27. fractal_server/app/schemas/v2/workflowtask.py +2 -5
  28. fractal_server/data_migrations/2_7_0.py +1 -11
  29. fractal_server/images/models.py +2 -4
  30. fractal_server/main.py +1 -1
  31. fractal_server/migrations/versions/034a469ec2eb_task_groups.py +184 -0
  32. fractal_server/string_tools.py +6 -2
  33. fractal_server/tasks/utils.py +19 -5
  34. fractal_server/tasks/v1/_TaskCollectPip.py +1 -1
  35. fractal_server/tasks/v1/background_operations.py +5 -5
  36. fractal_server/tasks/v1/get_collection_data.py +2 -2
  37. fractal_server/tasks/v2/_venv_pip.py +62 -70
  38. fractal_server/tasks/v2/background_operations.py +170 -51
  39. fractal_server/tasks/v2/background_operations_ssh.py +35 -77
  40. fractal_server/tasks/v2/database_operations.py +7 -17
  41. fractal_server/tasks/v2/endpoint_operations.py +91 -145
  42. fractal_server/tasks/v2/templates/_1_create_venv.sh +9 -5
  43. fractal_server/tasks/v2/utils.py +5 -0
  44. fractal_server/utils.py +3 -2
  45. {fractal_server-2.7.0a3.dist-info → fractal_server-2.7.0a5.dist-info}/METADATA +1 -1
  46. {fractal_server-2.7.0a3.dist-info → fractal_server-2.7.0a5.dist-info}/RECORD +49 -52
  47. fractal_server/migrations/versions/742b74e1cc6e_revamp_taskv2_and_taskgroupv2.py +0 -101
  48. fractal_server/migrations/versions/7cf1baae8fb4_task_group_v2.py +0 -66
  49. fractal_server/migrations/versions/df7cc3501bf7_linkusergroup_timestamp_created.py +0 -42
  50. fractal_server/tasks/v2/_TaskCollectPip.py +0 -132
  51. {fractal_server-2.7.0a3.dist-info → fractal_server-2.7.0a5.dist-info}/LICENSE +0 -0
  52. {fractal_server-2.7.0a3.dist-info → fractal_server-2.7.0a5.dist-info}/WHEEL +0 -0
  53. {fractal_server-2.7.0a3.dist-info → fractal_server-2.7.0a5.dist-info}/entry_points.txt +0 -0
@@ -1,178 +1,124 @@
1
- import json
2
- from pathlib import Path
3
- from typing import Literal
4
1
  from typing import Optional
5
- from typing import Union
6
- from zipfile import ZipFile
7
2
 
8
3
  from fastapi import HTTPException
9
4
  from fastapi import status
10
5
  from httpx import AsyncClient
11
6
  from httpx import TimeoutException
12
7
 
13
- from ._TaskCollectPip import _TaskCollectPip
14
- from .utils import _parse_wheel_filename
15
- from .utils import get_python_interpreter_v2
16
- from fractal_server.app.schemas.v2 import ManifestV2
17
- from fractal_server.config import get_settings
18
- from fractal_server.logger import get_logger
19
8
  from fractal_server.logger import set_logger
20
- from fractal_server.syringe import Inject
21
- from fractal_server.utils import execute_command
22
9
 
23
10
 
24
- FRACTAL_PUBLIC_TASK_SUBDIR = ".fractal"
25
11
  logger = set_logger(__name__)
26
12
 
27
13
 
28
- async def download_package(
29
- *,
30
- task_pkg: _TaskCollectPip,
31
- dest: Union[str, Path],
32
- ) -> Path:
14
+ async def get_package_version_from_pypi(
15
+ name: str,
16
+ version: Optional[str] = None,
17
+ ) -> str:
33
18
  """
34
- Download package to destination and return wheel-file path.
35
- """
36
- interpreter = get_python_interpreter_v2(
37
- python_version=task_pkg.python_version
38
- )
39
- pip = f"{interpreter} -m pip"
40
- if task_pkg.package_version is None:
41
- package_and_version = f"{task_pkg.package_name}"
42
- else:
43
- package_and_version = (
44
- f"{task_pkg.package_name}=={task_pkg.package_version}"
45
- )
46
- cmd = f"{pip} download --no-deps {package_and_version} -d {dest}"
47
- stdout = await execute_command(command=cmd, cwd=Path("."))
48
- pkg_file = next(
49
- line.split()[-1] for line in stdout.split("\n") if "Saved" in line
50
- )
51
- return Path(pkg_file)
52
-
53
-
54
- def _load_manifest_from_wheel(
55
- path: Path, wheel: ZipFile, logger_name: Optional[str] = None
56
- ) -> ManifestV2:
57
- logger = get_logger(logger_name)
58
- namelist = wheel.namelist()
59
- try:
60
- manifest = next(
61
- name for name in namelist if "__FRACTAL_MANIFEST__.json" in name
62
- )
63
- except StopIteration:
64
- msg = f"{path.as_posix()} does not include __FRACTAL_MANIFEST__.json"
65
- logger.error(msg)
66
- raise ValueError(msg)
67
- with wheel.open(manifest) as manifest_fd:
68
- manifest_dict = json.load(manifest_fd)
69
- manifest_version = str(manifest_dict["manifest_version"])
70
- if manifest_version == "2":
71
- pkg_manifest = ManifestV2(**manifest_dict)
72
- return pkg_manifest
73
- else:
74
- msg = f"Manifest version {manifest_version=} not supported"
75
- logger.error(msg)
76
- raise ValueError(msg)
77
-
78
-
79
- def inspect_package(
80
- path: Path, logger_name: Optional[str] = None
81
- ) -> dict[Literal["pkg_version", "pkg_manifest"], str]:
82
- """
83
- Inspect task package to extract version and manifest
84
-
85
- Note that this only works with wheel files, which have a well-defined
86
- dist-info section. If we need to generalize to to tar.gz archives, we would
87
- need to go and look for `PKG-INFO`.
88
-
89
- Args:
90
- path: Path of the package wheel file.
91
- logger_name:
19
+ Make a GET call to PyPI JSON API and get latest *compatible* version.
92
20
 
93
- Returns:
94
- A dictionary with keys `pkg_version` and `pkg_manifest`.
95
- """
96
-
97
- logger = get_logger(logger_name)
98
-
99
- if not path.as_posix().endswith(".whl"):
100
- raise ValueError(
101
- "Only wheel packages are supported in Fractal "
102
- f"(given {path.name})."
103
- )
21
+ There are three cases:
104
22
 
105
- # Extract package name and version from wheel filename
106
- _info = _parse_wheel_filename(wheel_filename=path.name)
107
- pkg_version = _info["version"]
108
-
109
- # Read and validate task manifest
110
- logger.debug(f"Now reading manifest for {path.as_posix()}")
111
- with ZipFile(path) as wheel:
112
- pkg_manifest = _load_manifest_from_wheel(
113
- path, wheel, logger_name=logger_name
114
- )
115
- logger.debug("Manifest read correctly.")
116
-
117
- info = dict(
118
- pkg_version=pkg_version,
119
- pkg_manifest=pkg_manifest,
120
- )
121
- return info
122
-
123
-
124
- def create_package_dir_pip(
125
- *,
126
- task_pkg: _TaskCollectPip,
127
- create: bool = True,
128
- ) -> Path:
129
- """
130
- Create venv folder for a task package and return corresponding Path object
131
- """
132
- settings = Inject(get_settings)
133
- user = FRACTAL_PUBLIC_TASK_SUBDIR
134
- if task_pkg.package_version is None:
135
- raise ValueError(
136
- f"Cannot create venv folder for package `{task_pkg.package}` "
137
- "with `version=None`."
138
- )
139
- package_dir = f"{task_pkg.package_name}{task_pkg.package_version}"
140
- venv_path = settings.FRACTAL_TASKS_DIR / user / package_dir
141
- if create:
142
- venv_path.mkdir(exist_ok=False, parents=True)
143
- return venv_path
144
-
145
-
146
- async def get_package_version_from_pypi(name: str) -> str:
147
- """
148
- Make a GET call to PyPI JSON API and get latest package version.
23
+ 1. `version` is set and it is found on PyPI as-is.
24
+ 2. `version` is set but it is not found on PyPI as-is.
25
+ 3. `version` is unset, and we query `PyPI` for latest.
149
26
 
150
27
  Ref https://warehouse.pypa.io/api-reference/json.html.
151
28
 
152
29
  Arguments:
153
30
  name: Package name.
31
+ version:
32
+ Could be a correct version (`1.3.0`), an incomplete one
33
+ (`1.3`) or `None`.
154
34
  """
155
35
 
156
36
  url = f"https://pypi.org/pypi/{name}/json"
157
37
  hint = f"Hint: specify the required version for '{name}'."
38
+
39
+ # Make request to PyPI
158
40
  try:
159
41
  async with AsyncClient(timeout=5.0) as client:
160
42
  res = await client.get(url)
161
- if res.status_code != 200:
43
+ except TimeoutException as e:
44
+ error_msg = (
45
+ f"A TimeoutException occurred while getting {url}.\n"
46
+ f"Original error: {str(e)}."
47
+ )
48
+ logger.error(error_msg)
49
+ raise HTTPException(
50
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
51
+ detail=error_msg,
52
+ )
53
+ except BaseException as e:
54
+ error_msg = (
55
+ f"An unknown error occurred while getting {url}. "
56
+ f"Original error: {str(e)}."
57
+ )
58
+ logger.error(error_msg)
59
+ raise HTTPException(
60
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
61
+ detail=error_msg,
62
+ )
63
+
64
+ # Parse response
65
+ if res.status_code != 200:
66
+ raise HTTPException(
67
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
68
+ detail=(
69
+ f"Could not get {url} (status_code {res.status_code})."
70
+ f"\n{hint}"
71
+ ),
72
+ )
73
+ try:
74
+ response_data = res.json()
75
+ latest_version = response_data["info"]["version"]
76
+ available_releases = response_data["releases"].keys()
77
+ except KeyError as e:
78
+ logger.error(
79
+ f"A KeyError occurred while getting {url}. "
80
+ f"Original error: {str(e)}."
81
+ )
82
+ raise HTTPException(
83
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
84
+ detail=f"A KeyError error occurred while getting {url}.\n{hint}",
85
+ )
86
+
87
+ logger.info(
88
+ f"Obtained data from {url}: "
89
+ f"{len(available_releases)} releases, "
90
+ f"latest={latest_version}."
91
+ )
92
+
93
+ if version is not None:
94
+ if version in available_releases:
95
+ logger.info(f"Requested {version=} available on PyPI.")
96
+ # Case 1: `version` is set and it is found on PyPI as-is
97
+ return version
98
+ else:
99
+ # Case 2: `version` is set but it is not found on PyPI as-is
100
+ # Filter using `version` as prefix, and sort
101
+ matching_versions = [
102
+ v for v in available_releases if v.startswith(version)
103
+ ]
104
+ logger.info(
105
+ f"Requested {version=} not available on PyPI, "
106
+ f"found {len(matching_versions)} versions matching "
107
+ f"`{version}*`."
108
+ )
109
+ if len(matching_versions) == 0:
110
+ logger.info(f"No version starting with {version} found.")
162
111
  raise HTTPException(
163
112
  status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
164
113
  detail=(
165
- f"Could not get {url} (status_code {res.status_code})."
166
- f"\n{hint}"
114
+ f"No version starting with {version} found.\n"
115
+ f"{hint}"
167
116
  ),
168
117
  )
169
- version = res.json()["info"]["version"]
170
- return version
171
- except (KeyError, TimeoutException) as e:
172
- logger.warning(
173
- f"An error occurred while getting {url}. Original error: {str(e)}."
174
- )
175
- raise HTTPException(
176
- status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
177
- detail=(f"An error occurred while getting {url}.\n{hint}"),
178
- )
118
+ else:
119
+ latest_matching_version = sorted(matching_versions)[-1]
120
+ return latest_matching_version
121
+ else:
122
+ # Case 3: `version` is unset and we use latest
123
+ logger.info(f"No version requested, returning {latest_version=}.")
124
+ return latest_version
@@ -7,16 +7,20 @@ write_log(){
7
7
 
8
8
 
9
9
  # Variables to be filled within fractal-server
10
+ TASK_GROUP_DIR=__TASK_GROUP_DIR__
10
11
  PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
11
12
  PYTHON=__PYTHON__
12
13
 
13
14
  TIME_START=$(date +%s)
14
15
 
15
- # Check that package folder does not exist
16
- if [ -d "$PACKAGE_ENV_DIR" ]; then
17
- write_log "ERROR: Folder $PACKAGE_ENV_DIR already exists. Exit."
18
- exit 1
19
- fi
16
+ # Check that task-group and venv folders do not exist
17
+ for DIR_TO_BE_CHECKED in "$TASK_GROUP_DIR" "$PACKAGE_ENV_DIR";
18
+ do
19
+ if [ -d "$DIR_TO_BE_CHECKED" ]; then
20
+ write_log "ERROR: Folder $DIR_TO_BE_CHECKED already exists. Exit."
21
+ exit 1
22
+ fi
23
+ done
20
24
 
21
25
  write_log "START mkdir -p $PACKAGE_ENV_DIR"
22
26
  mkdir -p $PACKAGE_ENV_DIR
@@ -45,6 +45,11 @@ def _parse_wheel_filename(wheel_filename: str) -> dict[str, str]:
45
45
  Note that we transform exceptions in `ValueError`s, since this function is
46
46
  also used within Pydantic validators.
47
47
  """
48
+ if "/" in wheel_filename:
49
+ raise ValueError(
50
+ "[_parse_wheel_filename] Input must be a filename, not a full "
51
+ f"path (given: {wheel_filename})."
52
+ )
48
53
  try:
49
54
  parts = wheel_filename.split("-")
50
55
  return dict(distribution=parts[0], version=parts[1])
fractal_server/utils.py CHANGED
@@ -32,8 +32,8 @@ def get_timestamp() -> datetime:
32
32
 
33
33
  async def execute_command(
34
34
  *,
35
- cwd: Path,
36
35
  command: str,
36
+ cwd: Optional[Path] = None,
37
37
  logger_name: Optional[str] = None,
38
38
  ) -> str:
39
39
  """
@@ -60,12 +60,13 @@ async def execute_command(
60
60
  cmd, *args = command_split
61
61
 
62
62
  logger = get_logger(logger_name)
63
+ cwd_kwarg = dict() if cwd is None else dict(cwd=cwd)
63
64
  proc = await asyncio.create_subprocess_exec(
64
65
  cmd,
65
66
  *args,
66
67
  stdout=asyncio.subprocess.PIPE,
67
68
  stderr=asyncio.subprocess.PIPE,
68
- cwd=cwd,
69
+ **cwd_kwarg,
69
70
  )
70
71
  stdout, stderr = await proc.communicate()
71
72
  logger.debug(f"Subprocess call to: {command}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.7.0a3
3
+ Version: 2.7.0a5
4
4
  Summary: Server component of the Fractal analytics platform
5
5
  Home-page: https://github.com/fractal-analytics-platform/fractal-server
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
- fractal_server/__init__.py,sha256=8F5In7R-H4qg5Yf7sXXB43RixMlW4SOmaCR83lziaso,24
2
- fractal_server/__main__.py,sha256=KqGiemsvIhrBeUlFDzIQsMEjOJW2BsH4qo_a_ldRQok,6362
1
+ fractal_server/__init__.py,sha256=LopKUzFTVHSgqDIY04paIgEGCB_DHbQtFlfZxiuBeDw,24
2
+ fractal_server/__main__.py,sha256=dEkCfzLLQrIlxsGC-HBfoR-RBMWnJDgNrxYTyzmE9c0,6146
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=81rK9w1__Z6PJ5cEcChPVc-wI9YOK4fN--_5Opry0MQ,4119
@@ -16,11 +16,11 @@ fractal_server/app/models/v1/state.py,sha256=m9gMZqqnm3oDpJNJp-Lht4kM7oO7pcEI7sL
16
16
  fractal_server/app/models/v1/task.py,sha256=uFXam7eu3Ye1Yt7_g7llCzY8BetmDRilsq5hR2C1Zbg,2640
17
17
  fractal_server/app/models/v1/workflow.py,sha256=dnY5eMaOe3oZv8arn00RNX9qVkBtTLG-vYdWXcQuyo4,3950
18
18
  fractal_server/app/models/v2/__init__.py,sha256=yvIE6kuqYEoF_kuCjl1AIjpMRi0VuTDWRJaaEzs9RQ8,522
19
- fractal_server/app/models/v2/collection_state.py,sha256=nxb042i8tt8rCpmgbFJoBCYWU-34m0HdUfO9YurTp8k,588
19
+ fractal_server/app/models/v2/collection_state.py,sha256=Yx18ZbywjraOdlHFyRVlb3VP101jBkOKkuOBIVD16fY,660
20
20
  fractal_server/app/models/v2/dataset.py,sha256=-7sxHEw4IIAvF_uSan7tA3o8hvoakBkQ0SRvqS2iOQU,1455
21
21
  fractal_server/app/models/v2/job.py,sha256=ypJmN-qspkKBGhBG7Mt-HypSQqcQ2EmB4Bzzb2-y550,1535
22
22
  fractal_server/app/models/v2/project.py,sha256=rAHoh5KfYwIaW7rTX0_O0jvWmxEvfo1BafvmcXuSSRk,786
23
- fractal_server/app/models/v2/task.py,sha256=SbTVkIUj7igL6-zhu8GigJK9oq4ddN4mXGvtlbjNbC0,2495
23
+ fractal_server/app/models/v2/task.py,sha256=8cT_YBA5dyjBjunqCg23I-t3XZ62xJgiR-6brXISuLA,3337
24
24
  fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
25
25
  fractal_server/app/models/v2/workflowtask.py,sha256=iDuJYk8kp4PNqGmbKRtGI7y-QsbjkNd_gDsbMzL4i-g,1274
26
26
  fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -29,8 +29,8 @@ fractal_server/app/routes/admin/v1.py,sha256=GIpZlwAwwwLGDWkBqywhtmp9TGsKLhGmZAd
29
29
  fractal_server/app/routes/admin/v2/__init__.py,sha256=zkdrk3mSQWfgTJugS8Sc_Q_xCAwfmHUfdRe0DTaYT80,521
30
30
  fractal_server/app/routes/admin/v2/job.py,sha256=JmNmF5MeHtcDQzGadCJWwFNDQvB5G8SwVABaL11S1Vc,8268
31
31
  fractal_server/app/routes/admin/v2/project.py,sha256=luy-yiGX1JYTdPm1hpIdDUUqPm8xHuipLy9k2X6zu74,1223
32
- fractal_server/app/routes/admin/v2/task.py,sha256=T0DNtc8d4jZYS0gGKBcz6pwoeh30WSgkMuIUEw_yBjo,4406
33
- fractal_server/app/routes/admin/v2/task_group.py,sha256=aJhizy-EhM0Iupxq19w0lam7Prs_xTnGxyLFaL8I_AE,4545
32
+ fractal_server/app/routes/admin/v2/task.py,sha256=Y0eujBgGhVapNXfW9azDxw4EBzLmEmCdh70y1RNQcb0,3895
33
+ fractal_server/app/routes/admin/v2/task_group.py,sha256=loxjJe9C2BBsG8gWkhHgrn6ReeE4mnipQ21PMP3MrKI,5398
34
34
  fractal_server/app/routes/api/__init__.py,sha256=2IDheFi0OFdsUg7nbUiyahqybvpgXqeHUXIL2QtWrQQ,641
35
35
  fractal_server/app/routes/api/v1/__init__.py,sha256=Y2HQdG197J0a7DyQEE2jn53IfxD0EHGhzK1I2JZuEck,958
36
36
  fractal_server/app/routes/api/v1/_aux_functions.py,sha256=P9Q48thGH95w0h5cacYoibxqgiiLW4oqZ8rNJ2LIISY,13219
@@ -38,28 +38,28 @@ fractal_server/app/routes/api/v1/dataset.py,sha256=KVfKdp-bT8eB14kCjTSmpji4a2IPI
38
38
  fractal_server/app/routes/api/v1/job.py,sha256=0jGxvu0xNQnWuov2qnoo9yE7Oat37XbcVn4Ute-UsiE,5370
39
39
  fractal_server/app/routes/api/v1/project.py,sha256=V-oeLiLs3vhD6STKiI2_mOyeB7FDUAcEXevHZbCWQ10,15956
40
40
  fractal_server/app/routes/api/v1/task.py,sha256=eW89nMCjpD4G6tHXDo2qGBKqWaPirjH6M3hpdJQhfa0,6528
41
- fractal_server/app/routes/api/v1/task_collection.py,sha256=VYxhtd_idBppgJM7-FCHikI2OKMAIz05fhV_TsJpWI8,9060
41
+ fractal_server/app/routes/api/v1/task_collection.py,sha256=5EMh3yhS1Z4x25kp5Iaxalrf7RgJh-XD1nBjrFvgwsg,9072
42
42
  fractal_server/app/routes/api/v1/workflow.py,sha256=2T93DuEnSshaDCue-JPmjuvGCtbk6lt9pFMuPt783t8,11217
43
43
  fractal_server/app/routes/api/v1/workflowtask.py,sha256=OYYConwJbmNULDw5I3T-UbSJKrbbBiAHbbBeVcpoFKQ,5785
44
44
  fractal_server/app/routes/api/v2/__init__.py,sha256=_2Yce3aFT-t2FF_Yk_KbNgmG4FJKXlY3QTqib64yhIs,1807
45
- fractal_server/app/routes/api/v2/_aux_functions.py,sha256=ayRA66dnsaVGGhCsFJ4sbaseQSXo5bGbnwjOs4oCdKI,11893
46
- fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=1s_zuQUd4lPL2jqb7nPRP3ZcII6A4EmvX1Gi8xxxWHo,5713
45
+ fractal_server/app/routes/api/v2/_aux_functions.py,sha256=mb4R_qqFxeW0LAis2QJIIfVx8Sydv1jTYaRIMsMxnIk,11720
46
+ fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=rgBi9KrbewTVwsd2aUAFZ4VZpAZml2q6-ekmIkK_vY0,7969
47
47
  fractal_server/app/routes/api/v2/dataset.py,sha256=Eilf_BAGjicIhqUiVwI86jlW45ineA5sVzxXW4b2GoQ,8329
48
48
  fractal_server/app/routes/api/v2/images.py,sha256=JR1rR6qEs81nacjriOXAOBQjAbCXF4Ew7M7mkWdxBU0,7920
49
49
  fractal_server/app/routes/api/v2/job.py,sha256=Bga2Kz1OjvDIdxZObWaaXVhNIhC_5JKhKRjEH2_ayEE,5157
50
50
  fractal_server/app/routes/api/v2/project.py,sha256=eWYFJ7F2ZYQcpi-_n-rhPF-Q4gJhzYBsVGYFhHZZXAE,6653
51
51
  fractal_server/app/routes/api/v2/status.py,sha256=6N9DSZ4iFqbZImorWfEAPoyoFUgEruo4Hweqo0x0xXU,6435
52
52
  fractal_server/app/routes/api/v2/submit.py,sha256=h7mjmea_VNCriGiA4HRuyxLHlvd9aGfTAFXK3bSsvzc,9422
53
- fractal_server/app/routes/api/v2/task.py,sha256=FRYHJTvr_tl62HvwKgHSayLrT0gCNeGwU9k9bsiSqws,8302
54
- fractal_server/app/routes/api/v2/task_collection.py,sha256=9trKrJDuaKKgdn-mG06VuFpyObhbcCD8AstaxN4lAOM,13507
55
- fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=CIJ4ZYPRtKvC6JVkagQPVFm6A53mOeDIPD8-y1lPJLc,7433
56
- fractal_server/app/routes/api/v2/task_group.py,sha256=yRUCMZtXH9KdfD2pfdCKPBGf_eVn-S5CXFHCUyXAoJk,4078
57
- fractal_server/app/routes/api/v2/workflow.py,sha256=aG5hs7oj-em2EpydgBPE4xPKrlKxD6NXuLhKkfdG79c,12116
58
- fractal_server/app/routes/api/v2/workflowtask.py,sha256=TIOePM13uK3GKVhtGK2wBB341ZFheBYQKTfXuPfdymE,6999
53
+ fractal_server/app/routes/api/v2/task.py,sha256=R_1bCinQvNrkEh6uAguNNfimduz1uJzgN_iTDwjnVF4,7209
54
+ fractal_server/app/routes/api/v2/task_collection.py,sha256=gCxOwigT_tfs8lCDNoE7nxl9-9iuRp1gW__3YXqsioc,11478
55
+ fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=9T0U_4gqrQbJCy6uFDCMSZ-b1sfNIzyz_qm4P41W2Gs,6133
56
+ fractal_server/app/routes/api/v2/task_group.py,sha256=wOLoqBnoeOIefRN5juhrjm2luGK6E_sF79umKirwWu8,5313
57
+ fractal_server/app/routes/api/v2/workflow.py,sha256=jxBgxjKjrtO8T9Y-IOZb1az9NeuhUY4Ma5wd-1uvvoE,10575
58
+ fractal_server/app/routes/api/v2/workflowtask.py,sha256=ciHTwXXFiFnMF7ZpJ3Xs0q6YfuZrFvIjqndlzAEdZpo,6969
59
59
  fractal_server/app/routes/auth/__init__.py,sha256=fao6CS0WiAjHDTvBzgBVV_bSXFpEAeDBF6Z6q7rRkPc,1658
60
- fractal_server/app/routes/auth/_aux_auth.py,sha256=6GERRDXK4P-2OA81bjxJZEw6hN4QCk5x7MqDNtN7VG4,4746
60
+ fractal_server/app/routes/auth/_aux_auth.py,sha256=ifkNocTYatBSMYGwiR14qohmvR9SfMldceiEj6uJBrU,4783
61
61
  fractal_server/app/routes/auth/current_user.py,sha256=v767HGi8k076ZHoErlU4Vv0_c8HQqYmi8ncjzZZDaDE,4455
62
- fractal_server/app/routes/auth/group.py,sha256=eT-1c0Ow8KbYkKEMQ5ebhEAeRixwJs2kQW45UIutH5w,5833
62
+ fractal_server/app/routes/auth/group.py,sha256=riav97YGJHqAwcbjbZcSYPfx8kEnyUnYe37155dMAmU,6548
63
63
  fractal_server/app/routes/auth/login.py,sha256=tSu6OBLOieoBtMZB4JkBAdEgH2Y8KqPGSbwy7NIypIo,566
64
64
  fractal_server/app/routes/auth/oauth.py,sha256=AnFHbjqL2AgBX3eksI931xD6RTtmbciHBEuGf9YJLjU,1895
65
65
  fractal_server/app/routes/auth/register.py,sha256=DlHq79iOvGd_gt2v9uwtsqIKeO6i_GKaW59VIkllPqY,587
@@ -127,7 +127,7 @@ fractal_server/app/runner/v2/merge_outputs.py,sha256=IHuHqbKmk97K35BFvTrKVBs60z3
127
127
  fractal_server/app/runner/v2/runner.py,sha256=nw9oYt3cFItHWVoevJyMI63K0kWHCTAriAQ_KINo_F8,13039
128
128
  fractal_server/app/runner/v2/runner_functions.py,sha256=BLREIcQaE6FSc2AEJyZuiYk6rGazEz_9gprUqUZDljs,9488
129
129
  fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=1fWvQ6YZUUnDhO_mipXC5hnaT-zK-GHxg8ayoxZX82k,3648
130
- fractal_server/app/runner/v2/task_interface.py,sha256=myS-kT0DsJ8xIJZBVEzgD8g54VbiwL6i7Im3e1zcVHQ,1866
130
+ fractal_server/app/runner/v2/task_interface.py,sha256=hT3p-bRGsLNAR_dNv_PYFoqzIF_EQtSsGwl38j1haYA,1824
131
131
  fractal_server/app/runner/versions.py,sha256=dSaPRWqmFPHjg20kTCHmi_dmGNcCETflDtDLronNanU,852
132
132
  fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
133
133
  fractal_server/app/schemas/_validators.py,sha256=XKEGEHxp3H6YSJewtFWXe_2Nh7SDdNtAXmlEmJO6Vb0,3606
@@ -145,33 +145,34 @@ fractal_server/app/schemas/v1/task.py,sha256=7BxOZ_qoRQ8n3YbQpDvB7VMcxB5fSYQmR5R
145
145
  fractal_server/app/schemas/v1/task_collection.py,sha256=uvq9bcMaGD_qHsh7YtcpoSAkVAbw12eY4DocIO3MKOg,3057
146
146
  fractal_server/app/schemas/v1/workflow.py,sha256=tuOs5E5Q_ozA8if7YPZ07cQjzqB_QMkBS4u92qo4Ro0,4618
147
147
  fractal_server/app/schemas/v2/__init__.py,sha256=BHbRPSBLjGaCpmjd8OJSycKhBLfZY5b1lj0z9sLR17o,2273
148
- fractal_server/app/schemas/v2/dataset.py,sha256=dLT52tV4dSf2HrFNak4vdQEn8PT_04IUrGnd2z-AXIU,2599
149
- fractal_server/app/schemas/v2/dumps.py,sha256=ZrJCHTv9oU2QMNjPUSBO3DIPRO3qDvbxpAGpernpf-Q,1720
150
- fractal_server/app/schemas/v2/job.py,sha256=zfF9K3v4jWUJ7M482ta2CkqUJ4tVT4XfVt60p9IRhP0,3250
148
+ fractal_server/app/schemas/v2/dataset.py,sha256=865ia13E9mWu1DaYyppKW2csNYglaInrScrprdVYX7A,2552
149
+ fractal_server/app/schemas/v2/dumps.py,sha256=s6dg-pHZFui6t2Ktm0SMxjKDN-v-ZqBHz9iTsBQF3eU,1712
150
+ fractal_server/app/schemas/v2/job.py,sha256=oYSLYkQ0HL83QyjEGIaggtZ117FndzFlONMKWd9sTXM,3270
151
151
  fractal_server/app/schemas/v2/manifest.py,sha256=eHfDjth8cSDiuYeDMfBOte8sMHOI74DC0VlhebhUXvY,6545
152
- fractal_server/app/schemas/v2/project.py,sha256=u7S4B-bote1oGjzAGiZ-DuQIyeRAGqJsI71Tc1EtYE0,736
152
+ fractal_server/app/schemas/v2/project.py,sha256=UXEA0UUUe0bFFOVLLmVtvDFLBO5vmD1JVI7EeTIcwDo,756
153
153
  fractal_server/app/schemas/v2/status.py,sha256=SQaUpQkjFq5c5k5J4rOjNhuQaDOEg8lksPhkKmPU5VU,332
154
- fractal_server/app/schemas/v2/task.py,sha256=8iuugQR_ol-bP9nFkANt2JjjBtEzzTifrBmTWpV4QF4,6557
155
- fractal_server/app/schemas/v2/task_collection.py,sha256=_utBv7_kcRJCbPdWezasU8GrikI_QFPKeIl4vyAgDd4,6155
156
- fractal_server/app/schemas/v2/task_group.py,sha256=LRW_sggWUqnXVkmicmwxMbxRRYbSJmzg0Np-Dm0uBDU,1217
157
- fractal_server/app/schemas/v2/workflow.py,sha256=7jqZhGn6plFSU8EkQsvvnDMh5N8m7GouRt1DIXmweIA,1986
158
- fractal_server/app/schemas/v2/workflowtask.py,sha256=t29n7TM2Z_bcFC8RKor694dcU_cGaasUSuX4Q9oQikY,5758
154
+ fractal_server/app/schemas/v2/task.py,sha256=FRAN7bLQ5sTf3AjcthUYISHcZeHIgf5nhbyfHDuaGU4,6407
155
+ fractal_server/app/schemas/v2/task_collection.py,sha256=Ddw_7QaQ93kdEIwWQvzLQDu03gho_OHdhah3n0ioK3M,6296
156
+ fractal_server/app/schemas/v2/task_group.py,sha256=F40u64z-wXHNPFjx9RHozzl_SySTHfKFc-sBFyn_e0I,2352
157
+ fractal_server/app/schemas/v2/workflow.py,sha256=HSNQSrBRdoBzh8Igr76FUWCAWvVzykrqmUv1vGv-8og,2026
158
+ fractal_server/app/schemas/v2/workflowtask.py,sha256=zBXmVFozBTIXDzyRtr2Y1ZgDc644OiDpzYgoZVOEp8Y,5662
159
159
  fractal_server/app/security/__init__.py,sha256=V1NOWlmaFZHMR6SrkMl62jyAuqYONyo8lyGvR6UZesM,12312
160
160
  fractal_server/app/user_settings.py,sha256=aZgQ3i0JkHfgwLGW1ee6Gzr1ae3IioFfJKKSsSS8Svk,1312
161
161
  fractal_server/config.py,sha256=gX0aYwDwbC5y7JNorifON84YMveubb7XTb4sH14N3KM,23667
162
- fractal_server/data_migrations/2_7_0.py,sha256=ReB664szR2w9_mblfEilYYkVzs8Wi61O1_9G1gDtoQQ,9405
162
+ fractal_server/data_migrations/2_7_0.py,sha256=HWReCLmfz_abEzKEAbDflNjH5kQEgTpzjiKCWexNaTk,9133
163
163
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
164
164
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
165
165
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
166
166
  fractal_server/images/__init__.py,sha256=xO6jTLE4EZKO6cTDdJsBmK9cdeh9hFTaSbSuWgQg7y4,196
167
- fractal_server/images/models.py,sha256=9ipU5h4N6ogBChoB-2vHoqtL0TXOHCv6kRR-fER3mkM,4167
167
+ fractal_server/images/models.py,sha256=UlWazUOFQtpS3pZuROjcJXviG_Ai453jqUDHdzuvD5w,4170
168
168
  fractal_server/images/tools.py,sha256=gxeniYy4Z-cp_ToK2LHPJUTVVUUrdpogYdcBUvBuLiY,2209
169
169
  fractal_server/logger.py,sha256=56wfka6fHaa3Rx5qO009nEs_y8gx5wZ2NUNZZ1I-uvc,5130
170
- fractal_server/main.py,sha256=68rVybnviF28yFgRhfHZXwnf6LyzkcmeYYZZppboU4M,4925
170
+ fractal_server/main.py,sha256=gStLT9Du5QMpc9SyvRvtKU21EKwp-dG4HL3zGHzE06A,4908
171
171
  fractal_server/migrations/README,sha256=4rQvyDfqodGhpJw74VYijRmgFP49ji5chyEemWGHsuw,59
172
172
  fractal_server/migrations/env.py,sha256=9t_OeKVlhM8WRcukmTrLbWNup-imiBGP_9xNgwCbtpI,2730
173
173
  fractal_server/migrations/naming_convention.py,sha256=htbKrVdetx3pklowb_9Cdo5RqeF0fJ740DNecY5de_M,265
174
174
  fractal_server/migrations/script.py.mako,sha256=oMXw9LC3zRbinWWPPDgeZ4z9FJrV2zhRWiYdS5YgNbI,526
175
+ fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=vrPhC8hfFu1c4HmLHNZyCuqEfecFD8-bWc49bXMNes0,6199
175
176
  fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py,sha256=-BSS9AFTPcu3gYC-sYbawSy4MWQQx8TfMb5BW5EBKmQ,1450
176
177
  fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py,sha256=-wHe-fOffmYeAm0JXVl_lxZ7hhDkaEVqxgxpHkb_uL8,954
177
178
  fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py,sha256=Mob8McGYAcmgvrseyyYOa54E6Gsgr-4SiGdC-r9O4_A,1157
@@ -180,8 +181,6 @@ fractal_server/migrations/versions/50a13d6138fd_initial_schema.py,sha256=zwXegXs
180
181
  fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=axhNkr_H6R4rRbY7oGYazNbFvPXeSyBDWFVbKNmiqs8,8433
181
182
  fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
182
183
  fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=mbWuCkTpRAdGbRhW7lhXs_e5S6O37UAcCN6JfoY5H8A,1353
183
- fractal_server/migrations/versions/742b74e1cc6e_revamp_taskv2_and_taskgroupv2.py,sha256=CHihUE7dfHfVwweH_ijdGw_l7XGM0UfXDqXwAG9FKBg,3002
184
- fractal_server/migrations/versions/7cf1baae8fb4_task_group_v2.py,sha256=793xuEk8Pr28q1Hfe9_qNWWtU6ysXYdOFVRUPO_MB1o,1996
185
184
  fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=NSCuhANChsg76vBkShBl-9tQ4VEHubOjtAv1etHhlvY,2684
186
185
  fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=6pgODDtyAxevZvAJBj9IJ41inhV1RpwbpZr_qfPPu1A,1115
187
186
  fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py,sha256=yL3-Hvzw5jBLKj4LFP1z5ofZE9L9W3tLwYtPNW7z4ko,1508
@@ -192,41 +191,39 @@ fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.p
192
191
  fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py,sha256=ekDUML7ILpmdoqEclKbEUdyLi4uw9HSG_sTjG2hp_JE,867
193
192
  fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py,sha256=6cHEZFuTXiQg9yu32Y3RH1XAl71av141WQ6UMbiITIg,949
194
193
  fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py,sha256=yGWSA2HIHUybcVy66xBITk08opV2DFYSCIIrulaUZhI,901
195
- fractal_server/migrations/versions/df7cc3501bf7_linkusergroup_timestamp_created.py,sha256=pkF9ocXKYCsIeVXf8kDRK4hmIgv7UHCytJu2U-X1n7w,1134
196
194
  fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py,sha256=lOggSvzGWqQvnxxFuSM6W50Ui49R918A-uBuiZJ0pNM,963
197
195
  fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py,sha256=jilQW3QIqYQ4Q6hCnUiG7UtNMpA41ujqrB3tPFiPM1Q,1221
198
196
  fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py,sha256=9BwqUS9Gf7UW_KjrzHbtViC880qhD452KAytkHWWZyk,746
199
197
  fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
198
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
201
199
  fractal_server/ssh/_fabric.py,sha256=Fw6NZl8YnlShYTL-jmuPpbJ_Kn2pDRAIRY3bbDcnMA8,16214
202
- fractal_server/string_tools.py,sha256=bEcGNzlZJ3fj4IjRBXM34Klt25Amfx5AbeTHqPwnAqM,2264
200
+ fractal_server/string_tools.py,sha256=Z4qcleqXSG6RCG4hqS1emm0U-Bvv0sgTm_T87ZdYn7M,2395
203
201
  fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
204
202
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
205
- fractal_server/tasks/utils.py,sha256=wucz57I7G0Vd8hvtmvonlryACx9zIVlqfxG5I87MJ80,1820
206
- fractal_server/tasks/v1/_TaskCollectPip.py,sha256=16Gn8lVYHBuwNLBHdcdx0X8s9QXXsbfPwSzcCcM6fRg,3775
203
+ fractal_server/tasks/utils.py,sha256=8sbVCxvgfuzGxEhSfnLWRv36Rx4ZUwR7IAPP1TXfJFM,2178
204
+ fractal_server/tasks/v1/_TaskCollectPip.py,sha256=ARq5AoHYXH0hziEsb-nFAqbsLA-VIddXOdXL38O6_zA,3746
207
205
  fractal_server/tasks/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- fractal_server/tasks/v1/background_operations.py,sha256=6EGnZ0kG_N-LUcmUmWNztobmjwMIrO1Al9fMOnCK7Vo,11766
206
+ fractal_server/tasks/v1/background_operations.py,sha256=zYhqAP3-hedHxF9AMHFf8Y1znoFvC7Lq1qhqJPNROfk,11781
209
207
  fractal_server/tasks/v1/endpoint_operations.py,sha256=YyMU1Y3Xt7D9WOKqaMLuwEoIaAqQP2Klz3I-ypAgOLI,5077
210
- fractal_server/tasks/v1/get_collection_data.py,sha256=bi9tuApLgoKZNMIG1kR4GoKI9S6Y040gFfNQapw4ikM,502
208
+ fractal_server/tasks/v1/get_collection_data.py,sha256=5C22jp356rCH5IIC0J57wOu-DCC_kp3B6p68JooN7IM,508
211
209
  fractal_server/tasks/v1/utils.py,sha256=J9oKys-82OehBxOon5wWl3CxjVBgYWeVEEyWGVFnreI,1759
212
- fractal_server/tasks/v2/_TaskCollectPip.py,sha256=kWQNMNZ8OEddkYhmhsk3E6ArcaD7qe4vsjYYx9vbrUg,4900
213
210
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
- fractal_server/tasks/v2/_venv_pip.py,sha256=6NCItfeWgO9BDnlfhoCfiUG5UCGGz_SJz4Mfn4Jg_nk,6489
215
- fractal_server/tasks/v2/background_operations.py,sha256=CcaIzhQTqtw4wnlN3A-vLLSm6qOJvzrfG-12Jg0iC1I,11604
216
- fractal_server/tasks/v2/background_operations_ssh.py,sha256=9mj4t3cNJ8a268ykoj7lukXSojXi2dme7od1Uf_lVq4,14917
217
- fractal_server/tasks/v2/database_operations.py,sha256=_55kLUMWuOYQANuN0QDtDt-GWby4hDKPJp5NOB4ZoxA,1396
218
- fractal_server/tasks/v2/endpoint_operations.py,sha256=v1p3lFa3nuQ0ydv2T-cUQF42mZodz62C4tuiOKsA858,5637
219
- fractal_server/tasks/v2/templates/_1_create_venv.sh,sha256=5uW0ETYxl5xiQEXP107zgq8V_-vf3k5NzMMj1hSLjas,1015
211
+ fractal_server/tasks/v2/_venv_pip.py,sha256=FOD20yKfTsW7sim3h7CsB6pgp85JBhELyYvbkpaiDKA,6390
212
+ fractal_server/tasks/v2/background_operations.py,sha256=jWmg_XkBmcXQfPKJu_eu0wtDL4sMp1QP2bIZ9QtMj_Y,15411
213
+ fractal_server/tasks/v2/background_operations_ssh.py,sha256=RcMshcrj04r70hnyCB9aANk-8x8gr55AeP3v0gS7-Ts,13410
214
+ fractal_server/tasks/v2/database_operations.py,sha256=6r56yyFPnEBrXl6ncmO6D76znzISQCFZqCYcD-Ummd4,1213
215
+ fractal_server/tasks/v2/endpoint_operations.py,sha256=MtUoI0XWHuPSousDeH2IC2WU--AUKQVup6Q6AbHiNUA,4102
216
+ fractal_server/tasks/v2/templates/_1_create_venv.sh,sha256=7tt-B6n8KRN-pannZ0enE6XSxyq-hKRYRGY63CvtINI,1151
220
217
  fractal_server/tasks/v2/templates/_2_upgrade_pip.sh,sha256=ca5Yng6JgJYu-a4QrsIsatwUmrLdRWBKw7_VJrY7WLY,555
221
218
  fractal_server/tasks/v2/templates/_3_pip_install.sh,sha256=T9sabeB9iQzVZpLfuLkKGz9EpfHkUrJHKWO4HNij6yM,595
222
219
  fractal_server/tasks/v2/templates/_4_pip_freeze.sh,sha256=qHdDKu1svXi1VQKGePciEJK4_uEKuwAvwaDCcGxSvNk,274
223
220
  fractal_server/tasks/v2/templates/_5_pip_show.sh,sha256=GrJ19uHYQxANEy9JaeNJZVTquY9c8Ww9eCdnC7eLVr0,1754
224
- fractal_server/tasks/v2/utils.py,sha256=JOyCacb6MNvrwfLNTyLwcz8y79J29YuJeJ2MK5kqXRM,1657
221
+ fractal_server/tasks/v2/utils.py,sha256=MnY6MhcxDRo4rPuXo2tQ252eWEPZF3OlCGe-p5MrG9U,1846
225
222
  fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
226
- fractal_server/utils.py,sha256=b7WwFdcFZ8unyT65mloFToYuEDXpQoHRcmRNqrhd_dQ,2115
223
+ fractal_server/utils.py,sha256=jrlCBPmC7F0ptBVcDac-EbZNsdYTLbHfX9oxkXthS5Q,2193
227
224
  fractal_server/zip_tools.py,sha256=xYpzBshysD2nmxkD5WLYqMzPYUcCRM3kYy-7n9bJL-U,4426
228
- fractal_server-2.7.0a3.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
229
- fractal_server-2.7.0a3.dist-info/METADATA,sha256=rovIICs2nBroN4xAIpjuVgTPhmY985uWMIuWQDPjl3g,4630
230
- fractal_server-2.7.0a3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
231
- fractal_server-2.7.0a3.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
232
- fractal_server-2.7.0a3.dist-info/RECORD,,
225
+ fractal_server-2.7.0a5.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
226
+ fractal_server-2.7.0a5.dist-info/METADATA,sha256=lR1xBCbOuECf2yjGLD5DIriG2Lch3vpc5GDgHxv9a9g,4630
227
+ fractal_server-2.7.0a5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
228
+ fractal_server-2.7.0a5.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
229
+ fractal_server-2.7.0a5.dist-info/RECORD,,
@@ -1,101 +0,0 @@
1
- """Revamp TaskV2 and TaskGroupV2
2
-
3
- Revision ID: 742b74e1cc6e
4
- Revises: df7cc3501bf7
5
- Create Date: 2024-10-07 16:56:37.399878
6
-
7
- """
8
- import sqlalchemy as sa
9
- import sqlmodel
10
- from alembic import op
11
-
12
-
13
- # revision identifiers, used by Alembic.
14
- revision = "742b74e1cc6e"
15
- down_revision = "df7cc3501bf7"
16
- branch_labels = None
17
- depends_on = None
18
-
19
-
20
- def upgrade() -> None:
21
- # ### commands auto generated by Alembic - please adjust! ###
22
- with op.batch_alter_table("taskgroupv2", schema=None) as batch_op:
23
- batch_op.add_column(
24
- sa.Column(
25
- "origin", sqlmodel.sql.sqltypes.AutoString(), nullable=False
26
- )
27
- )
28
- batch_op.add_column(
29
- sa.Column(
30
- "pkg_name", sqlmodel.sql.sqltypes.AutoString(), nullable=False
31
- )
32
- )
33
- batch_op.add_column(
34
- sa.Column(
35
- "version", sqlmodel.sql.sqltypes.AutoString(), nullable=True
36
- )
37
- )
38
- batch_op.add_column(
39
- sa.Column(
40
- "python_version",
41
- sqlmodel.sql.sqltypes.AutoString(),
42
- nullable=True,
43
- )
44
- )
45
- batch_op.add_column(
46
- sa.Column(
47
- "path", sqlmodel.sql.sqltypes.AutoString(), nullable=True
48
- )
49
- )
50
- batch_op.add_column(
51
- sa.Column(
52
- "venv_path", sqlmodel.sql.sqltypes.AutoString(), nullable=True
53
- )
54
- )
55
- batch_op.add_column(
56
- sa.Column(
57
- "pip_extras", sqlmodel.sql.sqltypes.AutoString(), nullable=True
58
- )
59
- )
60
-
61
- with op.batch_alter_table("taskv2", schema=None) as batch_op:
62
- batch_op.add_column(
63
- sa.Column(
64
- "category", sqlmodel.sql.sqltypes.AutoString(), nullable=True
65
- )
66
- )
67
- batch_op.add_column(
68
- sa.Column(
69
- "modality", sqlmodel.sql.sqltypes.AutoString(), nullable=True
70
- )
71
- )
72
- batch_op.add_column(
73
- sa.Column(
74
- "authors", sqlmodel.sql.sqltypes.AutoString(), nullable=True
75
- )
76
- )
77
- batch_op.add_column(
78
- sa.Column("tags", sa.JSON(), server_default="[]", nullable=False)
79
- )
80
-
81
- # ### end Alembic commands ###
82
-
83
-
84
- def downgrade() -> None:
85
- # ### commands auto generated by Alembic - please adjust! ###
86
- with op.batch_alter_table("taskv2", schema=None) as batch_op:
87
- batch_op.drop_column("tags")
88
- batch_op.drop_column("authors")
89
- batch_op.drop_column("modality")
90
- batch_op.drop_column("category")
91
-
92
- with op.batch_alter_table("taskgroupv2", schema=None) as batch_op:
93
- batch_op.drop_column("pip_extras")
94
- batch_op.drop_column("venv_path")
95
- batch_op.drop_column("path")
96
- batch_op.drop_column("python_version")
97
- batch_op.drop_column("version")
98
- batch_op.drop_column("pkg_name")
99
- batch_op.drop_column("origin")
100
-
101
- # ### end Alembic commands ###