fractal-server 2.14.2__py3-none-any.whl → 2.14.3__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.14.2"
1
+ __VERSION__ = "2.14.3"
@@ -16,67 +16,9 @@ import time
16
16
  from pathlib import Path
17
17
 
18
18
  from fractal_server.app.runner.run_subprocess import run_subprocess
19
- from fractal_server.logger import get_logger
20
19
  from fractal_server.logger import set_logger
21
20
 
22
21
 
23
- def _copy_subfolder(src: Path, dest: Path, logger_name: str):
24
- t_start = time.perf_counter()
25
- cmd_cp = f"cp -r {src.as_posix()} {dest.as_posix()}"
26
- logger = get_logger(logger_name=logger_name)
27
- logger.debug(f"{cmd_cp=}")
28
- res = run_subprocess(cmd=cmd_cp, logger_name=logger_name)
29
- elapsed = time.perf_counter() - t_start
30
- logger.debug(f"[_copy_subfolder] END {elapsed=} s ({dest.as_posix()})")
31
- return res
32
-
33
-
34
- def _create_tar_archive(
35
- tarfile_path: str,
36
- subfolder_path_tmp_copy: Path,
37
- logger_name: str,
38
- filelist_path: str | None,
39
- ):
40
- logger = get_logger(logger_name)
41
- logger.debug(f"[_create_tar_archive] START ({tarfile_path})")
42
- t_start = time.perf_counter()
43
-
44
- if filelist_path is None:
45
- cmd_tar = (
46
- f"tar -c -z -f {tarfile_path} "
47
- f"--directory={subfolder_path_tmp_copy.as_posix()} "
48
- "."
49
- )
50
- else:
51
- cmd_tar = (
52
- f"tar -c -z -f {tarfile_path} "
53
- f"--directory={subfolder_path_tmp_copy.as_posix()} "
54
- f"--files-from={filelist_path} --ignore-failed-read"
55
- )
56
-
57
- logger.debug(f"cmd tar:\n{cmd_tar}")
58
-
59
- run_subprocess(cmd=cmd_tar, logger_name=logger_name, allow_char="*")
60
- elapsed = time.perf_counter() - t_start
61
- logger.debug(f"[_create_tar_archive] END {elapsed=} s ({tarfile_path})")
62
-
63
-
64
- def _remove_temp_subfolder(subfolder_path_tmp_copy: Path, logger_name: str):
65
- logger = get_logger(logger_name)
66
- t_start = time.perf_counter()
67
- try:
68
- cmd_rm = f"rm -rf {subfolder_path_tmp_copy}"
69
- logger.debug(f"cmd rm:\n{cmd_rm}")
70
- run_subprocess(cmd=cmd_rm, logger_name=logger_name, allow_char="*")
71
- except Exception as e:
72
- logger.debug(f"ERROR during {cmd_rm}: {e}")
73
- elapsed = time.perf_counter() - t_start
74
- logger.debug(
75
- f"[_remove_temp_subfolder] END {elapsed=} s "
76
- f"({subfolder_path_tmp_copy=})"
77
- )
78
-
79
-
80
22
  def compress_folder(
81
23
  subfolder_path: Path,
82
24
  filelist_path: str | None,
@@ -97,44 +39,55 @@ def compress_folder(
97
39
  Absolute path to the tar.gz archive.
98
40
  """
99
41
 
100
- logger_name = "compress_folder"
42
+ # Assign an almost-unique label to the logger name, to simplify grepping
43
+ # logs when several `compress_folder` functions are run concurrently
44
+ label = round(time.time(), 2)
45
+ logger_name = f"compress_folder_{label}"
101
46
  logger = set_logger(
102
47
  logger_name,
103
48
  default_logging_level=default_logging_level,
104
49
  )
105
-
106
50
  logger.debug("START")
107
- logger.debug(f"{subfolder_path=}")
108
- parent_dir = subfolder_path.parent
51
+ t_start = time.perf_counter()
52
+
109
53
  subfolder_name = subfolder_path.name
110
- tarfile_path = (parent_dir / f"{subfolder_name}.tar.gz").as_posix()
54
+ tarfile_path = (
55
+ subfolder_path.parent / f"{subfolder_name}.tar.gz"
56
+ ).as_posix()
57
+
58
+ logger.debug(f"{subfolder_path=}")
111
59
  logger.debug(f"{tarfile_path=}")
112
60
 
113
- subfolder_path_tmp_copy = (
114
- subfolder_path.parent / f"{subfolder_path.name}_copy"
115
- )
116
- try:
117
- _copy_subfolder(
118
- subfolder_path,
119
- subfolder_path_tmp_copy,
120
- logger_name=logger_name,
61
+ if filelist_path is None:
62
+ cmd_tar = (
63
+ f"tar -c -z -f {tarfile_path} "
64
+ f"--directory={subfolder_path.as_posix()} "
65
+ "."
121
66
  )
122
- _create_tar_archive(
123
- tarfile_path,
124
- subfolder_path_tmp_copy,
125
- logger_name=logger_name,
126
- filelist_path=filelist_path,
67
+ else:
68
+ cmd_tar = (
69
+ f"tar -c -z -f {tarfile_path} "
70
+ f"--directory={subfolder_path.as_posix()} "
71
+ f"--files-from={filelist_path} --ignore-failed-read"
127
72
  )
128
- return tarfile_path
73
+ logger.debug(f"{cmd_tar=}")
129
74
 
75
+ try:
76
+ run_subprocess(cmd=cmd_tar, logger_name=logger_name)
77
+ elapsed = time.perf_counter() - t_start
78
+ logger.debug(f"END {elapsed=} s ({tarfile_path})")
79
+ return tarfile_path
130
80
  except Exception as e:
131
- logger.debug(f"ERROR: {e}")
132
- sys.exit(1)
81
+ logger.debug(f"ERROR: {str(e)}")
82
+ cmd_rm = f"rm {tarfile_path}"
83
+ try:
84
+ run_subprocess(cmd=cmd_rm, logger_name=logger_name)
85
+ except Exception as e_rm:
86
+ logger.error(
87
+ f"Running {cmd_rm=} failed, original error: {str(e_rm)}."
88
+ )
133
89
 
134
- finally:
135
- _remove_temp_subfolder(
136
- subfolder_path_tmp_copy, logger_name=logger_name
137
- )
90
+ sys.exit(1)
138
91
 
139
92
 
140
93
  def main(
@@ -18,7 +18,6 @@ import logging
18
18
  import os
19
19
  import sys
20
20
  from typing import Literal
21
- from typing import Optional
22
21
  from typing import Union
23
22
 
24
23
  import cloudpickle
@@ -91,7 +90,6 @@ def worker(
91
90
  *,
92
91
  in_fname: str,
93
92
  out_fname: str,
94
- extra_import_paths: Optional[str] = None,
95
93
  ) -> None:
96
94
  """
97
95
  Execute a job, possibly on a remote node.
@@ -99,7 +97,6 @@ def worker(
99
97
  Arguments:
100
98
  in_fname: Absolute path to the input pickle file (must be readable).
101
99
  out_fname: Absolute path of the output pickle file (must be writeable).
102
- extra_import_paths: Additional import paths
103
100
  """
104
101
 
105
102
  # Create output folder, if missing
@@ -108,10 +105,6 @@ def worker(
108
105
  logging.debug(f"_slurm.remote.worker: create {out_dir=}")
109
106
  os.mkdir(out_dir)
110
107
 
111
- if extra_import_paths:
112
- _extra_import_paths = extra_import_paths.split(":")
113
- sys.path[:0] = _extra_import_paths
114
-
115
108
  # Execute the job and capture exceptions
116
109
  try:
117
110
  with open(in_fname, "rb") as f:
@@ -167,18 +160,11 @@ if __name__ == "__main__":
167
160
  help="Path of output pickle file",
168
161
  required=True,
169
162
  )
170
- parser.add_argument(
171
- "--extra-import-paths",
172
- type=str,
173
- help="Extra import paths",
174
- required=False,
175
- )
176
163
  parsed_args = parser.parse_args()
177
164
  logging.debug(f"{parsed_args=}")
178
165
 
179
166
  kwargs = dict(
180
- in_fname=parsed_args.input_file, out_fname=parsed_args.output_file
167
+ in_fname=parsed_args.input_file,
168
+ out_fname=parsed_args.output_file,
181
169
  )
182
- if parsed_args.extra_import_paths:
183
- kwargs["extra_import_paths"] = parsed_args.extra_import_paths
184
170
  worker(**kwargs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fractal-server
3
- Version: 2.14.2
3
+ Version: 2.14.3
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  License: BSD-3-Clause
6
6
  Author: Tommaso Comparin
@@ -1,4 +1,4 @@
1
- fractal_server/__init__.py,sha256=6Uu9b8c6XWTG60V3XHQPdFjCGQfgYX4y4FTD3DmRFXk,23
1
+ fractal_server/__init__.py,sha256=20SgG8fPO0eewuM_dSHcBRp5Xaupoj5yomTxw0STcSI,23
2
2
  fractal_server/__main__.py,sha256=rkM8xjY1KeS3l63irB8yCrlVobR-73uDapC4wvrIlxI,6957
3
3
  fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
4
  fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -67,7 +67,7 @@ fractal_server/app/routes/aux/validate_user_settings.py,sha256=FLVi__8YFcm_6c_K5
67
67
  fractal_server/app/routes/pagination.py,sha256=L8F5JqekF39qz-LpeScdlhb57MQnSRXjK4ZEtsZqYLk,1210
68
68
  fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
69
  fractal_server/app/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
70
- fractal_server/app/runner/compress_folder.py,sha256=PpamheggkacuAFhSiHkuW76x9zwawouqNySPBDyAuRI,5245
70
+ fractal_server/app/runner/compress_folder.py,sha256=3X8eyC5sdTJqOgWiMKCu-1wI658gVMXRuHKBcqHpFWo,3811
71
71
  fractal_server/app/runner/exceptions.py,sha256=JC5ufHyeA1hYD_rkZUscI30DD8D903ncag7Z3AArmUY,4215
72
72
  fractal_server/app/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  fractal_server/app/runner/executors/base_runner.py,sha256=4xxMpYycIeAOz5niaJj2xtVW_Cq-shCxP1qk4g-KwOM,5137
@@ -80,7 +80,7 @@ fractal_server/app/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38
80
80
  fractal_server/app/runner/executors/slurm_common/_slurm_config.py,sha256=_feRRnVVnvQa3AsOQqfULfOgaoj2o6Ze0-fwXwic8p4,15795
81
81
  fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py,sha256=bqFD9uZfwXqmVXsScrgANp09zvbuc_LSGCDAmBV0wqo,33379
82
82
  fractal_server/app/runner/executors/slurm_common/get_slurm_config.py,sha256=BW6fDpPyB0VH5leVxvwzkVH3r3hC7DuSyoWmRzHITWg,7305
83
- fractal_server/app/runner/executors/slurm_common/remote.py,sha256=WdzVSLYKOxLb9NmrvwZu0voXRPTO1gyKTUUuRJwu9Lc,5861
83
+ fractal_server/app/runner/executors/slurm_common/remote.py,sha256=Z7cnAlhYi9Orgeq6UGCl3cnWq9DX_sPrc6X1p40hVFE,5364
84
84
  fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py,sha256=RoxHLKOn0_wGjnY0Sv0a9nDSiqxYZHKRoMkT3p9_G1E,3607
85
85
  fractal_server/app/runner/executors/slurm_common/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
86
86
  fractal_server/app/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -209,8 +209,8 @@ fractal_server/tasks/v2/utils_templates.py,sha256=Kc_nSzdlV6KIsO0CQSPs1w70zLyENP
209
209
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
210
210
  fractal_server/utils.py,sha256=PMwrxWFxRTQRl1b9h-NRIbFGPKqpH_hXnkAT3NfZdpY,3571
211
211
  fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
212
- fractal_server-2.14.2.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
213
- fractal_server-2.14.2.dist-info/METADATA,sha256=LQDnOxlZL14XsZXYcQ42N-JR0NSMBfxN4qOP2raSiG4,4560
214
- fractal_server-2.14.2.dist-info/WHEEL,sha256=7dDg4QLnNKTvwIDR9Ac8jJaAmBC_owJrckbC0jjThyA,88
215
- fractal_server-2.14.2.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
216
- fractal_server-2.14.2.dist-info/RECORD,,
212
+ fractal_server-2.14.3.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
213
+ fractal_server-2.14.3.dist-info/METADATA,sha256=jWGz8N3CZga8UzjSeagUSYuLxxqDbZSBnkZnd15zrTo,4560
214
+ fractal_server-2.14.3.dist-info/WHEEL,sha256=7dDg4QLnNKTvwIDR9Ac8jJaAmBC_owJrckbC0jjThyA,88
215
+ fractal_server-2.14.3.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
216
+ fractal_server-2.14.3.dist-info/RECORD,,