From 1c474fef16c8b81febc3781257115bc81676a5cb Mon Sep 17 00:00:00 2001 From: Maximun Date: Tue, 17 Mar 2026 18:24:26 +0530 Subject: [PATCH] Removed color codes from log file no ugly escape codes in logs :> --- copyparty/__main__.py | 14 ++++++++++++++ copyparty/svchub.py | 18 ++++++++++++++++++ docs/colors.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ docs/devnotes.md | 6 ++++++ 4 files changed, 81 insertions(+) create mode 100644 docs/colors.txt diff --git a/copyparty/__main__.py b/copyparty/__main__.py index 955c5830..266f59f7 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -2047,6 +2047,20 @@ def run_argparse( def main(argv: Optional[list[str]] = None) -> None: + ## if ever want to use logging + # import re, logging + # COLOR_RE = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])") + # def clean(msg: str): + # return COLOR_RE.sub('', msg) + # orig_fac = logging.getLogRecordFactory() + # def logger_fac(*args, **kwargs): + # record = orig_fac(*args, **kwargs) + # print("Boing!") + # if (isinstance(record.msg, str)): + # record.msg = clean(record.msg) + # return record + # logging.setLogRecordFactory(logger_fac) + if argv is None: argv = sys.argv diff --git a/copyparty/svchub.py b/copyparty/svchub.py index fd581c20..0778d261 100644 --- a/copyparty/svchub.py +++ b/copyparty/svchub.py @@ -1372,6 +1372,19 @@ class SvcHub(object): lh = codecs.open(fn, "w", encoding="utf-8", errors="replace") + # Patch the opened log file write method + orig_w = getattr(lh, "write") + + def patched_write(data: str): + try: + clean = self.clean(data) + except: + clean = data + return orig_w(clean) + + setattr(lh, "write", patched_write) + # lh.write = patched_write #type: ignore + if getattr(self.args, "free_umask", False): os.fchmod(lh.fileno(), 0o644) @@ -1389,6 +1402,11 @@ class SvcHub(object): self.logf_base_fn = base_fn print(msg, end="") + # https://regex101.com/r/96ZckU/1 + COLOR_RE = re.compile(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])") + def clean(self, msg: str): + return self.COLOR_RE.sub('', msg) + def run(self) -> None: self.tcpsrv.run() if getattr(self.args, "z_chk", 0) and ( diff --git a/docs/colors.txt b/docs/colors.txt new file mode 100644 index 00000000..52607a2b --- /dev/null +++ b/docs/colors.txt @@ -0,0 +1,43 @@ +\033[0;1m +\033[0;7m + +\033[0;32m +\033[0;33m +\033[0;35m +\033[0;36m +\033[0;40m +\033[0;47m +\033[0;90m + +\033[1;30m +\033[1;31m +\033[1;35m + +\033[30;47m + +\033[07m (same as \033[7m) + +\033[0m +\033[1m +\033[7m +\033[27m +\033[31m +\033[32m +\033[33m +\033[34m +\033[35m +\033[36m +\033[44m +\033[45m +\033[90m +\033[94m +\033[97m + +| Code type | Range | +| ---------- | ------- | +| Reset | `0` | +| Bold | `1` | +| Inverse | `7` | +| Foreground | `30–37` | +| Background | `40–47` | +| Bright FG | `90–97` | diff --git a/docs/devnotes.md b/docs/devnotes.md index 89dc8fb3..b083a4b2 100644 --- a/docs/devnotes.md +++ b/docs/devnotes.md @@ -491,6 +491,12 @@ mostly fine on android, but still haven't find a way to massage iphones into be can be reproduced with `--no-sendfile --s-wr-sz 8192 --s-wr-slp 0.3 --rsp-slp 6` and then play a collection of small audio files with the screen off, `ffmpeg -i track01.cdda.flac -c:a libopus -b:a 128k -segment_time 12 -f segment smol-%02d.opus` +## grabing colors +to grab all color codes (ANSII escape seq) from the source (`../copyparty/`) (optional) + +```bash +grep -roIE '\\033\[([0-9]{1,3};)?[0-9]{1,3}m' | sort -t ':' -k2 | cut -d ':' -f2 | sort -u +``` ## discarded ideas