From d40e40d48915823ce100caacbad35d20ae97c562 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Wed, 12 Jul 2023 18:29:46 +0200 Subject: [PATCH] added a clean up for filename / output directory --- slic/core/acquisition/broker_client.py | 7 ++++++- slic/core/acquisition/broker_tools.py | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/slic/core/acquisition/broker_client.py b/slic/core/acquisition/broker_client.py index 02053f77..a3d22e1e 100644 --- a/slic/core/acquisition/broker_client.py +++ b/slic/core/acquisition/broker_client.py @@ -12,7 +12,7 @@ from slic.utils import xrange, tqdm_mod, tqdm_sleep from slic.utils import json_validate from slic.utils.printing import printable_dict -from .broker_tools import get_current_pulseid, get_endstation +from .broker_tools import get_current_pulseid, get_endstation, clean_output_dir class BrokerClient: @@ -306,7 +306,12 @@ class BrokerConfig: self.kwargs_init = kwargs # unknown arguments will be forwarded verbatim to the broker self.set(None) #TODO: sensible defaults? + def set(self, output_dir, detectors=None, channels=None, pvs=None, scan_info=None, **kwargs): + # output dir needs to be cleaned if used as part of the folder name + if self.append_user_tag_to_data_dir: + output_dir = clean_output_dir(output_dir) + self.output_dir = output_dir self.detectors = detectors self.channels = channels diff --git a/slic/core/acquisition/broker_tools.py b/slic/core/acquisition/broker_tools.py index 7e0a4bbe..8d786aa3 100644 --- a/slic/core/acquisition/broker_tools.py +++ b/slic/core/acquisition/broker_tools.py @@ -1,9 +1,11 @@ from datetime import datetime import socket +import string import epics from logzero import logger as log from slic.utils import singleton +from slic.utils import cprint #TODO: these should probably move to different IOCs @@ -29,6 +31,10 @@ IP_TO_ENDSTATION = { REFERENCE_DATETIME = datetime(2020, 5, 8, 8, 29, 52) REFERENCE_PID = 11718051371 +#TODO: remove the same from gui code +ALLOWED_CHARS = set( + string.ascii_letters + string.digits + "_-" +) def decide_get_current_pulseid(): @@ -100,3 +106,17 @@ class get_current_pulseid(): +def clean_output_dir(s, default="_", allowed=ALLOWED_CHARS): + if s is None: + return None + res = "".join(i if i in allowed else default for i in s) + if res != s: + warn_output_dir(s, res) + return res + +def warn_output_dir(old, new): + msg = f'output dir contains forbidden characters. will adjust:\n"{old}"\n==>\n"{new}"' + cprint(msg, color="cyan") + + +