fractal-server 2.8.0__py3-none-any.whl → 2.8.1__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.
@@ -1 +1 @@
1
- __VERSION__ = "2.8.0"
1
+ __VERSION__ = "2.8.1"
@@ -74,7 +74,7 @@ def val_absolute_path(attribute: str, accept_none: bool = False):
74
74
  Check that a string attribute is an absolute path
75
75
  """
76
76
 
77
- def val(string: Optional[str]) -> str:
77
+ def val(string: Optional[str]) -> Optional[str]:
78
78
  if string is None:
79
79
  if accept_none:
80
80
  return string
@@ -39,7 +39,7 @@ class DatasetCreateV2(BaseModel, extra=Extra.forbid):
39
39
 
40
40
  # Validators
41
41
  @validator("zarr_dir")
42
- def normalize_zarr_dir(cls, v: str) -> str:
42
+ def normalize_zarr_dir(cls, v: Optional[str]) -> Optional[str]:
43
43
  if v is not None:
44
44
  return normalize_url(v)
45
45
  return v
@@ -57,16 +57,8 @@ class TaskCollectPipV2(BaseModel, extra=Extra.forbid):
57
57
  python_version: Optional[Literal["3.9", "3.10", "3.11", "3.12"]] = None
58
58
  pinned_package_versions: Optional[dict[str, str]] = None
59
59
 
60
- _package = validator("package", allow_reuse=True)(valstr("package"))
61
- _package_version = validator("package_version", allow_reuse=True)(
62
- valstr("package_version")
63
- )
64
- _package_extras = validator("package_extras", allow_reuse=True)(
65
- valstr("package_extras")
66
- )
67
-
68
60
  @validator("pinned_package_versions")
69
- def pinned_package_validator(cls, value):
61
+ def pinned_package_versions_validator(cls, value):
70
62
  if value is None:
71
63
  return value
72
64
  old_keys = list(value.keys())
@@ -87,6 +79,7 @@ class TaskCollectPipV2(BaseModel, extra=Extra.forbid):
87
79
 
88
80
  @validator("package")
89
81
  def package_validator(cls, value):
82
+ value = valstr("package")(value)
90
83
  if "/" in value or value.endswith(".whl"):
91
84
  if not value.endswith(".whl"):
92
85
  raise ValueError(
@@ -97,17 +90,27 @@ class TaskCollectPipV2(BaseModel, extra=Extra.forbid):
97
90
  raise ValueError(
98
91
  f"Local-package path must be absolute: (given {value})."
99
92
  )
93
+ validate_cmd(value, attribute_name="package")
100
94
  return value
101
95
 
102
96
  @validator("package_version")
103
- def package_version_validator(cls, v, values):
97
+ def package_version_validator(
98
+ cls, v: Optional[str], values
99
+ ) -> Optional[str]:
104
100
  v = valstr("package_version")(v)
105
101
  if values["package"].endswith(".whl"):
106
102
  raise ValueError(
107
103
  "Cannot provide package version when package is a wheel file."
108
104
  )
105
+ validate_cmd(v, attribute_name="package_version")
109
106
  return v
110
107
 
108
+ @validator("package_extras")
109
+ def package_extras_validator(cls, value: Optional[str]) -> Optional[str]:
110
+ value = valstr("package_extras")(value)
111
+ validate_cmd(value, attribute_name="package_extras")
112
+ return value
113
+
111
114
 
112
115
  class TaskCollectCustomV2(BaseModel, extra=Extra.forbid):
113
116
  """
@@ -54,7 +54,12 @@ def slugify_task_name_for_source_v1(task_name: str) -> str:
54
54
  return task_name.replace(" ", "_").lower()
55
55
 
56
56
 
57
- def validate_cmd(command: str, allow_char: Optional[str] = None):
57
+ def validate_cmd(
58
+ command: str,
59
+ *,
60
+ allow_char: Optional[str] = None,
61
+ attribute_name: str = "Command",
62
+ ):
58
63
  """
59
64
  Assert that the provided `command` does not contain any of the forbidden
60
65
  characters for commands
@@ -63,6 +68,7 @@ def validate_cmd(command: str, allow_char: Optional[str] = None):
63
68
  Args:
64
69
  command: command to validate.
65
70
  allow_char: chars to accept among the forbidden ones
71
+ attribute_name: Name of the attribute, to be used in error message.
66
72
  """
67
73
  if not isinstance(command, str):
68
74
  raise ValueError(f"{command=} is not a string.")
@@ -71,6 +77,7 @@ def validate_cmd(command: str, allow_char: Optional[str] = None):
71
77
  forbidden = forbidden - set(allow_char)
72
78
  if not forbidden.isdisjoint(set(command)):
73
79
  raise ValueError(
74
- f"Command must not contain any of this characters: '{forbidden}'\n"
75
- f"Provided command: '{command}'."
80
+ f"{attribute_name} must not contain any of this characters: "
81
+ f"'{forbidden}'\n"
82
+ f"Provided {attribute_name.lower()}: '{command}'."
76
83
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.8.0
3
+ Version: 2.8.1
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,4 +1,4 @@
1
- fractal_server/__init__.py,sha256=G56kqxabLk9eJUznRHuCU6TnwgJOf5nsccv59FmRQWI,22
1
+ fractal_server/__init__.py,sha256=_UadKzwkiZjaRG8tsoM0cHEnXlBYpVpNzh9Ld4g5XDg,22
2
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
@@ -132,7 +132,7 @@ fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=1fWvQ6YZUUnDhO
132
132
  fractal_server/app/runner/v2/task_interface.py,sha256=hT3p-bRGsLNAR_dNv_PYFoqzIF_EQtSsGwl38j1haYA,1824
133
133
  fractal_server/app/runner/versions.py,sha256=dSaPRWqmFPHjg20kTCHmi_dmGNcCETflDtDLronNanU,852
134
134
  fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
135
- fractal_server/app/schemas/_validators.py,sha256=XKEGEHxp3H6YSJewtFWXe_2Nh7SDdNtAXmlEmJO6Vb0,3606
135
+ fractal_server/app/schemas/_validators.py,sha256=3YBteFMxrEE9DOYlIHvIMsUOWTPSHEZlDL7dUQzBQjs,3616
136
136
  fractal_server/app/schemas/user.py,sha256=aUD8YAcfYTEO06TEUoTx4heVrXFiX7E2Mb8D2--4FsA,2130
137
137
  fractal_server/app/schemas/user_group.py,sha256=YwJvYgj-PI66LWy38CEd_FIZPsBV1_2N5zJPGFcFvBw,2143
138
138
  fractal_server/app/schemas/user_settings.py,sha256=TalISeEfCrtN8LgqbLx1Q8ZPoeiZnbksg5NYAVzkIqY,3527
@@ -147,14 +147,14 @@ fractal_server/app/schemas/v1/task.py,sha256=7BxOZ_qoRQ8n3YbQpDvB7VMcxB5fSYQmR5R
147
147
  fractal_server/app/schemas/v1/task_collection.py,sha256=uvq9bcMaGD_qHsh7YtcpoSAkVAbw12eY4DocIO3MKOg,3057
148
148
  fractal_server/app/schemas/v1/workflow.py,sha256=tuOs5E5Q_ozA8if7YPZ07cQjzqB_QMkBS4u92qo4Ro0,4618
149
149
  fractal_server/app/schemas/v2/__init__.py,sha256=97y6QY0I4322CPXQCt3WO3QBWhVkmFgwLn8y2ZwWNR0,2382
150
- fractal_server/app/schemas/v2/dataset.py,sha256=_RAm-DX2nR7QUe6iHWbs3fYZPE0xnitnR6wD2dVutdM,2618
150
+ fractal_server/app/schemas/v2/dataset.py,sha256=Jipcj9LiOOipAeM2Ew113wuNQ6CrbC1nf3KwnNApBco,2638
151
151
  fractal_server/app/schemas/v2/dumps.py,sha256=s6dg-pHZFui6t2Ktm0SMxjKDN-v-ZqBHz9iTsBQF3eU,1712
152
152
  fractal_server/app/schemas/v2/job.py,sha256=oYSLYkQ0HL83QyjEGIaggtZ117FndzFlONMKWd9sTXM,3270
153
153
  fractal_server/app/schemas/v2/manifest.py,sha256=Uqtd7DbyOkf9bxBOKkU7Sv7nToBIFGUcfjY7rd5iO7c,6981
154
154
  fractal_server/app/schemas/v2/project.py,sha256=UXEA0UUUe0bFFOVLLmVtvDFLBO5vmD1JVI7EeTIcwDo,756
155
155
  fractal_server/app/schemas/v2/status.py,sha256=SQaUpQkjFq5c5k5J4rOjNhuQaDOEg8lksPhkKmPU5VU,332
156
156
  fractal_server/app/schemas/v2/task.py,sha256=FFAbYwDlqowB8gVMdjFVPVHvAM0T89PYLixUth49xfQ,6870
157
- fractal_server/app/schemas/v2/task_collection.py,sha256=99ohBL9CSX4N7PwDgZH8U27N0x4xLNII0_fw7ln_IxI,6843
157
+ fractal_server/app/schemas/v2/task_collection.py,sha256=56VWGwOZcgmfZ1bKz-_MSSO8HYwtMAKNBL5tfeQc7uQ,7000
158
158
  fractal_server/app/schemas/v2/task_group.py,sha256=oWy7NNsw8Co85qpLyK8FPNTgpAMvx0ZuXjIOVZuLEpM,2466
159
159
  fractal_server/app/schemas/v2/workflow.py,sha256=HSNQSrBRdoBzh8Igr76FUWCAWvVzykrqmUv1vGv-8og,2026
160
160
  fractal_server/app/schemas/v2/workflowtask.py,sha256=vDdMktYbHeYBgB5OuWSv6wRPRXWqvetkeqQ7IC5YtfA,5751
@@ -200,7 +200,7 @@ fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.p
200
200
  fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
201
201
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
202
202
  fractal_server/ssh/_fabric.py,sha256=Pha-gRVUImj1cMsxulrJzaQa6Z60CmMYRAS4o22FcP0,19506
203
- fractal_server/string_tools.py,sha256=Z4qcleqXSG6RCG4hqS1emm0U-Bvv0sgTm_T87ZdYn7M,2395
203
+ fractal_server/string_tools.py,sha256=XtMNsr5R7GmgzmFi68zkKMedHs8vjGoVMMCXqWhIk9k,2568
204
204
  fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
205
205
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
206
206
  fractal_server/tasks/utils.py,sha256=lJeaGX0xw4uE_dQGMnFAvmz03gUVh_nv8m47yuwFcKc,1340
@@ -226,8 +226,8 @@ fractal_server/tasks/v2/utils_templates.py,sha256=61uz9WSb4BDe6JUyJGiasw8BjVrPAm
226
226
  fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
227
227
  fractal_server/utils.py,sha256=BTvNYA8xG-2K42x_hhsKmxrludbSvUbPpbWPq-Dousg,3481
228
228
  fractal_server/zip_tools.py,sha256=xYpzBshysD2nmxkD5WLYqMzPYUcCRM3kYy-7n9bJL-U,4426
229
- fractal_server-2.8.0.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
230
- fractal_server-2.8.0.dist-info/METADATA,sha256=qHNx9Z6smCqff4r4-raosWiFCRh9E2ICeZyjRoiIZYg,4588
231
- fractal_server-2.8.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
232
- fractal_server-2.8.0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
233
- fractal_server-2.8.0.dist-info/RECORD,,
229
+ fractal_server-2.8.1.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
230
+ fractal_server-2.8.1.dist-info/METADATA,sha256=Kg5Q0Ww6lgtblwriHrTueIpkYnal0gCmO9F3JMvf7jc,4588
231
+ fractal_server-2.8.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
232
+ fractal_server-2.8.1.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
233
+ fractal_server-2.8.1.dist-info/RECORD,,