Loading misc/test_nsett.py +31 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,9 @@ import sys import time import json import pprint as pp # import pysen.ui.nsett as nsett from pysen.misc import setup_logger Loading @@ -12,7 +15,7 @@ if len(sys.argv)>1: if len(sys.argv)>2: quit=sys.argv[2] logger = setup_logger() logger = setup_logger(level='debug', filename='nsett.log') def wait_callback(dt, done, cmd=""): if done: Loading @@ -20,6 +23,19 @@ def wait_callback(dt, done, cmd=""): return print('%.3fs waiting...\r' % dt, end='', flush=True) def parse_out(inbuf): result = {} for line in inbuf: if not line.startswith('val'): continue tokens = line.split() kind, name = tokens[1:3] if kind=='current': result[name] = float(tokens[3]) if kind=='motor': result[name] = float(tokens[5]) return result ns = nsett.NseConnection(verbose=True, wait_callback=wait_callback) try: ns.connect(hostname) Loading @@ -33,8 +49,21 @@ ns.send('q_move 0.50' ) ns.send('display physics') ;#print('-->',"\n".join(ns.pop())) ns.send('show physics') ;#print('-->',"\n".join(ns.pop())) ns.send('show tech' ) ;#print('-->',"\n".join(ns.pop())) ns.send('listcoil' ) ;print('-->',"\n".join(ns.pop())) ns.clear() # clear resp queue res = {} ns.send('out current' ) res['currents'] = parse_out(ns.pop()) ns.send('out motor' ) res['motors'] = parse_out(ns.pop()) print(json.dumps(res, indent=4)) if quit == "yes": if quit == "quit": ns.send('quit', timeout=None) ns.disconnect() pysen/misc.py +64 −13 Original line number Diff line number Diff line Loading @@ -5,28 +5,79 @@ import pickle import hashlib import logging DEFAULT_LOG_LEVEL=1 # default is warnings and errors # ERROR=0 WARNING=1 INFO=2 DEBUG=3 TRACE=4 _MIN_LEVEL=ERROR _MAX_LEVEL=TRACE _STR_LEVELS={ 'error' : ERROR, 'warning': WARNING, 'info' : INFO, 'debug' : DEBUG, 'trace' : TRACE, } # normalize loglevel 0=ERR, 1=WARN, 2=INFO, 3=DEBUG # so that we can simply 'count' -v/-q _LOG_LEVELS={ 0: logging.ERROR, # 40 1: logging.WARNING, # 30 2: logging.INFO, # 20 3: logging.DEBUG, # 10 ERROR: logging.ERROR, # 40 WARNING: logging.WARNING, # 30 INFO: logging.INFO, # 20 DEBUG: logging.DEBUG, # 10 TRACE: logging.DEBUG # for now TRACE==DEBUG } _MIN_LEVEL=0 _MAX_LEVEL=3 def setup_logger(level=DEFAULT_LOG_LEVEL, filename=None): "setup logger" DEFAULT_LOG_LEVEL=WARNING # default is warnings and errors def get_loglevel(level): "get log level" if isinstance(level,str): level = _STR_LEVELS.get(level.lower(), DEFAULT_LOG_LEVEL) # normalize level level = max(min(level,_MAX_LEVEL),_MIN_LEVEL) loglevel = _LOG_LEVELS.get(level, logging.INFO) return _LOG_LEVELS.get(level, logging.INFO) def setup_logger_standard(level=DEFAULT_LOG_LEVEL, filename=None): "setup logger" loglevel = get_loglevel(level) # log_format=r'%(message)s' if level<logging.INFO: if level<logging.INFO or filename is not None: log_format=r'%(levelname)s: %(funcName)s: %(message)s' logging.basicConfig(filename=filename, level=loglevel, format=log_format) return logging.getLogger() log = logging.getLogger() return log def setup_logger_detail(level=DEFAULT_LOG_LEVEL, filename=None): "setup logger" loglevel = get_loglevel(level) log = logging.getLogger() log.setLevel(loglevel) stream_handler = logging.StreamHandler() stream_handler.setLevel(loglevel) stream_formatter = logging.Formatter('%(message)s') stream_handler.setFormatter(stream_formatter) file_handler = logging.FileHandler(filename=filename) file_formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s: %(message)s') file_handler.setFormatter(file_formatter) file_handler.setLevel(loglevel) log.addHandler(stream_handler) log.addHandler(file_handler) return log setup_logger = setup_logger_standard def dictionary_hash(arg): "compute object hash" Loading pysen/revision.py +1 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ PySEN revision module """ import sys __version__ = "1.3" __release__ = "b6" __release__ = "b7" __date__ = "Mar 31, 2023" def version(full=False): Loading pysen/ui/nsett.py +7 −2 Original line number Diff line number Diff line Loading @@ -88,7 +88,8 @@ class NseConnection: raise finally: if (time.time()-t0)>timeout: raise RuntimeError("timeout in connect()") self.log.error("timeout in connect()") raise TimeoutError("timeout in connect()") return result # wait for connection result = wait_loop(self._sock.connect, connection) Loading Loading @@ -136,6 +137,10 @@ class NseConnection: except IndexError: return '' def clear(self): "clear the response" return self._reply.clear() def wait(self, sleep_time=1, timeout=DEF_TIMEOUT): "wait for the server to respond" t0=time.time() Loading Loading @@ -184,7 +189,7 @@ class NseConnection: msg = self._sock.recv(self.CMD_LEN) self._thread_busy.set() # msg = decode(msg, encoding='ascii', errors='replace') self.log.info(msg) self.log.debug(msg) lines = msg.split('\n') for line in lines: if not line: Loading Loading
misc/test_nsett.py +31 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,9 @@ import sys import time import json import pprint as pp # import pysen.ui.nsett as nsett from pysen.misc import setup_logger Loading @@ -12,7 +15,7 @@ if len(sys.argv)>1: if len(sys.argv)>2: quit=sys.argv[2] logger = setup_logger() logger = setup_logger(level='debug', filename='nsett.log') def wait_callback(dt, done, cmd=""): if done: Loading @@ -20,6 +23,19 @@ def wait_callback(dt, done, cmd=""): return print('%.3fs waiting...\r' % dt, end='', flush=True) def parse_out(inbuf): result = {} for line in inbuf: if not line.startswith('val'): continue tokens = line.split() kind, name = tokens[1:3] if kind=='current': result[name] = float(tokens[3]) if kind=='motor': result[name] = float(tokens[5]) return result ns = nsett.NseConnection(verbose=True, wait_callback=wait_callback) try: ns.connect(hostname) Loading @@ -33,8 +49,21 @@ ns.send('q_move 0.50' ) ns.send('display physics') ;#print('-->',"\n".join(ns.pop())) ns.send('show physics') ;#print('-->',"\n".join(ns.pop())) ns.send('show tech' ) ;#print('-->',"\n".join(ns.pop())) ns.send('listcoil' ) ;print('-->',"\n".join(ns.pop())) ns.clear() # clear resp queue res = {} ns.send('out current' ) res['currents'] = parse_out(ns.pop()) ns.send('out motor' ) res['motors'] = parse_out(ns.pop()) print(json.dumps(res, indent=4)) if quit == "yes": if quit == "quit": ns.send('quit', timeout=None) ns.disconnect()
pysen/misc.py +64 −13 Original line number Diff line number Diff line Loading @@ -5,28 +5,79 @@ import pickle import hashlib import logging DEFAULT_LOG_LEVEL=1 # default is warnings and errors # ERROR=0 WARNING=1 INFO=2 DEBUG=3 TRACE=4 _MIN_LEVEL=ERROR _MAX_LEVEL=TRACE _STR_LEVELS={ 'error' : ERROR, 'warning': WARNING, 'info' : INFO, 'debug' : DEBUG, 'trace' : TRACE, } # normalize loglevel 0=ERR, 1=WARN, 2=INFO, 3=DEBUG # so that we can simply 'count' -v/-q _LOG_LEVELS={ 0: logging.ERROR, # 40 1: logging.WARNING, # 30 2: logging.INFO, # 20 3: logging.DEBUG, # 10 ERROR: logging.ERROR, # 40 WARNING: logging.WARNING, # 30 INFO: logging.INFO, # 20 DEBUG: logging.DEBUG, # 10 TRACE: logging.DEBUG # for now TRACE==DEBUG } _MIN_LEVEL=0 _MAX_LEVEL=3 def setup_logger(level=DEFAULT_LOG_LEVEL, filename=None): "setup logger" DEFAULT_LOG_LEVEL=WARNING # default is warnings and errors def get_loglevel(level): "get log level" if isinstance(level,str): level = _STR_LEVELS.get(level.lower(), DEFAULT_LOG_LEVEL) # normalize level level = max(min(level,_MAX_LEVEL),_MIN_LEVEL) loglevel = _LOG_LEVELS.get(level, logging.INFO) return _LOG_LEVELS.get(level, logging.INFO) def setup_logger_standard(level=DEFAULT_LOG_LEVEL, filename=None): "setup logger" loglevel = get_loglevel(level) # log_format=r'%(message)s' if level<logging.INFO: if level<logging.INFO or filename is not None: log_format=r'%(levelname)s: %(funcName)s: %(message)s' logging.basicConfig(filename=filename, level=loglevel, format=log_format) return logging.getLogger() log = logging.getLogger() return log def setup_logger_detail(level=DEFAULT_LOG_LEVEL, filename=None): "setup logger" loglevel = get_loglevel(level) log = logging.getLogger() log.setLevel(loglevel) stream_handler = logging.StreamHandler() stream_handler.setLevel(loglevel) stream_formatter = logging.Formatter('%(message)s') stream_handler.setFormatter(stream_formatter) file_handler = logging.FileHandler(filename=filename) file_formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s: %(message)s') file_handler.setFormatter(file_formatter) file_handler.setLevel(loglevel) log.addHandler(stream_handler) log.addHandler(file_handler) return log setup_logger = setup_logger_standard def dictionary_hash(arg): "compute object hash" Loading
pysen/revision.py +1 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ PySEN revision module """ import sys __version__ = "1.3" __release__ = "b6" __release__ = "b7" __date__ = "Mar 31, 2023" def version(full=False): Loading
pysen/ui/nsett.py +7 −2 Original line number Diff line number Diff line Loading @@ -88,7 +88,8 @@ class NseConnection: raise finally: if (time.time()-t0)>timeout: raise RuntimeError("timeout in connect()") self.log.error("timeout in connect()") raise TimeoutError("timeout in connect()") return result # wait for connection result = wait_loop(self._sock.connect, connection) Loading Loading @@ -136,6 +137,10 @@ class NseConnection: except IndexError: return '' def clear(self): "clear the response" return self._reply.clear() def wait(self, sleep_time=1, timeout=DEF_TIMEOUT): "wait for the server to respond" t0=time.time() Loading Loading @@ -184,7 +189,7 @@ class NseConnection: msg = self._sock.recv(self.CMD_LEN) self._thread_busy.set() # msg = decode(msg, encoding='ascii', errors='replace') self.log.info(msg) self.log.debug(msg) lines = msg.split('\n') for line in lines: if not line: Loading