improve formatting of values

Change-Id: I4a9290e85ee2071a3f2cfe0d00bc7dc4dcb4caed
This commit is contained in:
zolliker 2022-09-16 08:06:24 +02:00
parent 0b9e227669
commit 3ab9821860

View File

@ -23,11 +23,11 @@
import sys import sys
import time import time
import json
import re import re
from queue import Queue from queue import Queue
from secop.client import SecopClient from secop.client import SecopClient
from secop.errors import SECoPError from secop.errors import SECoPError
from secop.datatypes import get_datatype
USAGE = """ USAGE = """
Usage: Usage:
@ -97,15 +97,12 @@ class Module:
def _one_line(self, pname, minwid=0): def _one_line(self, pname, minwid=0):
"""return <module>.<param> = <value> truncated to one line""" """return <module>.<param> = <value> truncated to one line"""
param = getattr(type(self), pname)
try: try:
value = getattr(self, pname) value = getattr(self, pname)
# make floats appear with 7 digits only r = param.format(value)
r = repr(json.loads(json.dumps(value), parse_float=PrettyFloat))
except Exception as e: except Exception as e:
r = repr(e) r = repr(e)
unit = getattr(type(self), pname).unit
if unit:
r += ' %s' % unit
pname = pname.ljust(minwid) pname = pname.ljust(minwid)
vallen = 113 - len(self._name) - len(pname) vallen = 113 - len(self._name) - len(pname)
if len(r) > vallen: if len(r) > vallen:
@ -192,11 +189,11 @@ class Module:
class Param: class Param:
def __init__(self, name, unit=None): def __init__(self, name, datainfo):
self.name = name self.name = name
self.prev = None self.prev = None
self.prev_time = 0 self.prev_time = 0
self.unit = unit self.datatype = get_datatype(datainfo)
def __get__(self, obj, owner): def __get__(self, obj, owner):
if obj is None: if obj is None:
@ -214,6 +211,9 @@ class Param:
except SECoPError as e: except SECoPError as e:
obj._secnode.log.error(repr(e)) obj._secnode.log.error(repr(e))
def format(self, value):
return self.datatype.format_value(value)
class Command: class Command:
def __init__(self, name, modname, secnode): def __init__(self, name, modname, secnode):
@ -266,8 +266,7 @@ class Client(SecopClient):
self.log.info('overwrite module %s', modname) self.log.info('overwrite module %s', modname)
attrs = {} attrs = {}
for pname, pinfo in moddesc['parameters'].items(): for pname, pinfo in moddesc['parameters'].items():
unit = pinfo['datainfo'].get('unit') attrs[pname] = Param(pname, pinfo['datainfo'])
attrs[pname] = Param(pname, unit)
for cname in moddesc['commands']: for cname in moddesc['commands']:
attrs[cname] = Command(cname, modname, self) attrs[cname] = Command(cname, modname, self)
mobj = type('M_%s' % modname, (Module,), attrs)(modname, self) mobj = type('M_%s' % modname, (Module,), attrs)(modname, self)