From 8fea0250e3e681ed93285e43a0b73c160a610d71 Mon Sep 17 00:00:00 2001 From: midichef <67946319+midichef@users.noreply.github.com> Date: Sun, 9 Jun 2024 01:54:24 -0700 Subject: [PATCH] [save-] handle empty delimiter when safety_first --- visidata/save.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/visidata/save.py b/visidata/save.py index 95d048851..ecdc1afe9 100644 --- a/visidata/save.py +++ b/visidata/save.py @@ -13,12 +13,15 @@ def safe_trdict(vs): 'returns string.translate dictionary for replacing tabs and newlines' if vs.options.safety_first: delim = vs.options.delimiter - return { + trdict = { 0: '', # strip NUL completely - ord(delim): vs.options.tsv_safe_tab, # \t 10: vs.options.tsv_safe_newline, # \n 13: vs.options.tsv_safe_newline, # \r } + if not delim or ord(delim) in trdict: + vd.fail(f'cannot use delimiter {repr(delim)} with safety_first') + trdict[ord(delim)] = vs.options.tsv_safe_tab # \t + return trdict return {} @@ -29,12 +32,12 @@ def iterdispvals(sheet, *cols, format=False): cols = sheet.visibleCols transformers = collections.OrderedDict() # list of transformers for each column in order + trdict = sheet.safe_trdict() for col in cols: transformers[col] = [ col.type ] if format: formatMaker = getattr(col, 'formatter_'+(col.formatter or sheet.options.disp_formatter)) transformers[col].append(formatMaker(col._formatdict)) - trdict = sheet.safe_trdict() if trdict: transformers[col].append(lambda v,trdict=trdict: v.translate(trdict))