turned default_representation and spec_convenience decorators into mixins

This commit is contained in:
2020-07-15 19:33:32 +02:00
parent 3dfad81c43
commit 536e2cfb66
3 changed files with 68 additions and 83 deletions
+63
View File
@@ -0,0 +1,63 @@
import colorama
class SpecConvenience:
def mv(self, value):
self._currentChange = self.set_target_value(value)
return self._currentChange
def wm(self, *args, **kwargs):
return self.get_current_value(*args, **kwargs)
def mvr(self, value, *args, **kwargs):
if (
hasattr(self, "_currentChange")
and self._currentChange
and not (self._currentChange.status() == "done")
):
startvalue = self._currentChange.target
elif hasattr(self, "is_moving") and not self.is_moving():
startvalue = self.get_current_value(readback=True, *args, **kwargs)
else:
startvalue = self.get_current_value(*args, **kwargs)
self._currentChange = self.set_target_value(value + startvalue, *args, **kwargs)
return self._currentChange
def wait(self):
self._currentChange.wait()
def __call__(self, value=None):
if not value is None:
self._currentChange = self.set_target_value(value)
return self._currentChange
else:
return self.get_current_value()
#TODO: if hasattr(Adj, "update_change"):
def umv(self, *args, **kwargs):
self.update_change(*args, **kwargs)
#TODO: if hasattr(Adj, "update_change_relative"):
def umvr(self, *args, **kwargs):
self.update_change_relative(*args, **kwargs)
class DefaultRepresentation:
def _get_name(self):
if self.alias:
return self.alias.get_full_name()
elif self.name:
return self.name
else:
return self.Id
def __repr__(self):
s = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')+': '
s += f"{colorama.Style.BRIGHT}{self._get_name()}{colorama.Style.RESET_ALL} at {colorama.Style.BRIGHT}{self.get_current_value():g}{colorama.Style.RESET_ALL}"
return s
+3 -80
View File
@@ -5,80 +5,7 @@ from enum import IntEnum, auto
import colorama
import time
import datetime
def default_representation(Obj):
def get_name(Obj):
if Obj.alias:
return Obj.alias.get_full_name()
elif Obj.name:
return Obj.name
else:
return Obj.Id
def get_repr(Obj):
s = datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')+': '
s += f"{colorama.Style.BRIGHT}{Obj._get_name()}{colorama.Style.RESET_ALL} at {colorama.Style.BRIGHT}{Obj.get_current_value():g}{colorama.Style.RESET_ALL}"
return s
Obj._get_name = get_name
Obj.__repr__ = get_repr
return Obj
def spec_convenience(Adj):
def mv(self, value):
self._currentChange = self.set_target_value(value)
return self._currentChange
def wm(self, *args, **kwargs):
return self.get_current_value(*args, **kwargs)
def mvr(self, value, *args, **kwargs):
if (
hasattr(self, "_currentChange")
and self._currentChange
and not (self._currentChange.status() == "done")
):
startvalue = self._currentChange.target
elif hasattr(self, "is_moving") and not self.is_moving():
startvalue = self.get_current_value(readback=True, *args, **kwargs)
else:
startvalue = self.get_current_value(*args, **kwargs)
self._currentChange = self.set_target_value(value + startvalue, *args, **kwargs)
return self._currentChange
def wait(self):
self._currentChange.wait()
def call(self, value=None):
if not value is None:
self._currentChange = self.set_target_value(value)
return self._currentChange
else:
return self.get_current_value()
def umv(self, *args, **kwargs):
self.update_change(*args, **kwargs)
def umvr(self, *args, **kwargs):
self.update_change_relative(*args, **kwargs)
Adj.mv = mv
Adj.wm = wm
Adj.mvr = mvr
Adj.wait = wait
Adj.__call__ = call
if hasattr(Adj, "update_change"):
Adj.umv = umv
Adj.umvr = umvr
return Adj
from .convenience import SpecConvenience, DefaultRepresentation
class PvRecord:
@@ -162,9 +89,7 @@ class PvRecord:
#@default_representation
@spec_convenience
class PvEnum:
class PvEnum(SpecConvenience):
def __init__(self, pvname, name=None):
self.Id = pvname
@@ -214,9 +139,7 @@ class PvEnum:
@default_representation
@spec_convenience
class AdjustableVirtual:
class AdjustableVirtual(SpecConvenience, DefaultRepresentation):
def __init__(
self,
+2 -3
View File
@@ -4,7 +4,7 @@ import subprocess
from epics import PV
from slic.core.task import Task
from slic.utils.eco_components.aliases import Alias
from .adjustable import spec_convenience
from slic.core.adjustable.convenience import SpecConvenience
from .motors_new_helper import update_changes, ValueInRange, AdjustableError
import colorama
@@ -35,9 +35,8 @@ def _keywordChecker(kw_key_list_tups):
assert tkey in tlist, "Keyword %s should be one of %s" % (tkw, tlist)
@spec_convenience
@update_changes
class MotorRecord:
class MotorRecord(SpecConvenience):
def __init__(
self,
pvname,