From 85454e409a775401499d6b31d98a195c00ff8d16 Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 26 Sep 2019 15:59:14 +0000 Subject: [PATCH] windows support + add quiet mode --- copyparty/__main__.py | 9 +++++++-- copyparty/authsrv.py | 15 +++++++++++++-- copyparty/broker_mp.py | 8 +++++--- copyparty/svchub.py | 23 ++++++++++++++++++++--- 4 files changed, 45 insertions(+), 10 deletions(-) diff --git a/copyparty/__main__.py b/copyparty/__main__.py index e3f2108f..f9727ff8 100644 --- a/copyparty/__main__.py +++ b/copyparty/__main__.py @@ -15,7 +15,7 @@ import locale import argparse from textwrap import dedent -from .__init__ import E +from .__init__ import E, WINDOWS from .__version__ import S_VERSION, S_BUILD_DT from .svchub import SvcHub from .util import py_desc @@ -27,12 +27,16 @@ class RiceFormatter(argparse.HelpFormatter): same as ArgumentDefaultsHelpFormatter(HelpFormatter) except the help += [...] line now has colors """ + fmt = "\033[36m (default: \033[35m%(default)s\033[36m)\033[0m" + if WINDOWS: + fmt = " (default: %(default)s)" + help = action.help if "%(default)" not in action.help: if action.default is not argparse.SUPPRESS: defaulting_nargs = [argparse.OPTIONAL, argparse.ZERO_OR_MORE] if action.option_strings or action.nargs in defaulting_nargs: - help += "\033[36m (default: \033[35m%(default)s\033[36m)\033[0m" + help += fmt return help def _fill_text(self, text, width, indent): @@ -123,6 +127,7 @@ def main(): ap.add_argument("-j", metavar="CORES", type=int, help="max num cpu cores") ap.add_argument("-a", metavar="ACCT", type=str, action="append", help="add account") ap.add_argument("-v", metavar="VOL", type=str, action="append", help="add volume") + ap.add_argument("-q", action="store_true", help="quiet") ap.add_argument("-nw", action="store_true", help="benchmark: disable writing") al = ap.parse_args() diff --git a/copyparty/authsrv.py b/copyparty/authsrv.py index 28f9d2b8..9bbbdc73 100644 --- a/copyparty/authsrv.py +++ b/copyparty/authsrv.py @@ -2,9 +2,10 @@ from __future__ import print_function, unicode_literals import os +import re import threading -from .__init__ import PY2 +from .__init__ import PY2, WINDOWS from .util import undot, Pebkac, fsdec, fsenc @@ -139,6 +140,11 @@ class AuthSrv(object): self.warn_anonwrite = True + if WINDOWS: + self.re_vol = re.compile(r'^([a-zA-Z]:[\\/][^:]*|[^:]*):([^:]*):(.*)') + else: + self.re_vol = re.compile(r'^([^:]*):([^:]*):(.*)') + self.mutex = threading.Lock() self.reload() @@ -220,7 +226,12 @@ class AuthSrv(object): if self.args.v: # list of src:dst:permset:permset:... # permset is [rwa]username - for src, dst, perms in [x.split(":", 2) for x in self.args.v]: + for vol_match in [self.re_vol.match(x) for x in self.args.v]: + try: + src, dst, perms = vol_match.groups() + except: + raise Exception('invalid -v argument') + src = fsdec(os.path.abspath(fsenc(src))) dst = dst.strip("/") mount[dst] = src diff --git a/copyparty/broker_mp.py b/copyparty/broker_mp.py index c2347093..8b028049 100644 --- a/copyparty/broker_mp.py +++ b/copyparty/broker_mp.py @@ -140,13 +140,15 @@ class BrokerMp(object): raise Exception("what is " + str(dest)) def debug_load_balancer(self): + fmt = "\033[1m{}\033[0;36m{:4}\033[0m " + if WINDOWS: + fmt = "({}{:4})" + last = "" while self.procs: msg = "" for proc in self.procs: - msg += "\033[1m{}\033[0;36m{:4}\033[0m ".format( - len(proc.clients), proc.workload - ) + msg += fmt.format(len(proc.clients), proc.workload) if msg != last: last = msg diff --git a/copyparty/svchub.py b/copyparty/svchub.py index 509dbe6c..ee328639 100644 --- a/copyparty/svchub.py +++ b/copyparty/svchub.py @@ -1,6 +1,7 @@ # coding: utf-8 from __future__ import print_function, unicode_literals +import re import sys import time import threading @@ -27,9 +28,12 @@ class SvcHub(object): def __init__(self, args): self.args = args + self.ansi_re = re.compile("\033\\[[^m]*m") self.log_mutex = threading.Lock() self.next_day = 0 + self.log = self._log_disabled if args.q else self._log_enabled + # initiate all services to manage self.tcpsrv = TcpSrv(self) self.up2k = Up2k(self) @@ -61,7 +65,10 @@ class SvcHub(object): self.broker.shutdown() print("nailed it") - def log(self, src, msg): + def _log_disabled(self, src, msg): + pass + + def _log_enabled(self, src, msg): """handles logging from all components""" with self.log_mutex: now = time.time() @@ -78,10 +85,20 @@ class SvcHub(object): self.next_day = calendar.timegm(dt.utctimetuple()) ts = datetime.utcfromtimestamp(now).strftime("%H:%M:%S.%f")[:-3] - msg = "\033[36m{} \033[33m{:21} \033[0m{}".format(ts, src, msg) + + if not WINDOWS: + fmt = "\033[36m{} \033[33m{:21} \033[0m{}" + else: + fmt = "{} {:21} {}" + if "\033" in msg: + msg = self.ansi_re.sub("", msg) + if "\033" in src: + src = self.ansi_re.sub("", src) + + msg = fmt.format(ts, src, msg) try: print(msg) - except UnicodeEncodeError as ex: + except UnicodeEncodeError: print(msg.encode("utf-8", "replace").decode()) def check_mp_support(self):