turned default_representation and spec_convenience decorators into mixins
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user