Source code for qarbon.value
# -*- coding: utf-8 -*-
# ----------------------------------------------------------------------------
# This file is part of qarbon (http://qarbon.rtfd.org/)
#
# Copyright (c) 2013 European Synchrotron Radiation Facility, Grenoble, France
#
# Distributed under the terms of the GNU Lesser General Public License,
# either version 3 of the License, or (at your option) any later version.
# See LICENSE.txt for more info.
# ----------------------------------------------------------------------------
"""Value definition."""
__all__ = ["AttributeConfig", "NullAttributeConfig",
"Value", "NullValue",
"AttributeValue", "NullAttributeValue"]
from .core import DisplayLevel, Access
[docs]class AttributeConfig(object):
name = ""
label = "-----"
description = ""
ndim = -1
format = "%s"
display_level = DisplayLevel._Invalid
display_format = "!s"
access = Access._Invalid
unit = None
standard_unit = None
display_unit = None
min_value = None
max_value = None
min_alarm = None
max_alarm = None
min_warning = None
max_warning = None
value_range = None, None
alarm_range = None, None
warning_range = None, None
[docs] def is_write(self):
return self.access == Access.Write
[docs] def is_readonly(self):
return self.access == Access.Read
[docs] def is_readwrite(self):
return self.access == Access.ReadWrite
[docs] def is_scalar(self):
return self.ndim == 0
[docs] def is_spectrum(self):
return self.ndim == 1
[docs] def is_mage(self):
return self.ndim == 2
NullAttributeConfig = AttributeConfig()
[docs]class Value(object):
"""A qarbon value. A container for a value read from a qarbon model. It
contains the following members:
* r_value (Quantity): (aka: value) a Quantity representing the read value
* r_timestamp (datetime.datetime): the timestamp of reading the value
* w_value (Quantity): a Quantity representing the write value
* quality (Quality): the quality related to the read value
* exc_info (tuple): a 3-tuple equivalent to sys.exc_info() if reading a
value resulted in an exception or None otherwise
* error (bool): tells the read resulted in an error
Example on how to pretty print
"""
r_value = None
r_timestamp = None
r_ndim = None
r_quality = None
w_value = None
exc_info = None
def __str__(self):
if self.error:
value = ErrorStr
else:
value = self.r_value
return "{0}".format(value)
def __repr__(self):
cname = self.__class__.__name__
if self.error:
value = ErrorRepr
else:
value = self.r_value
return "{0}({1!r})".format(cname, self.r_value)
def __format__(self, format_spec):
if self.error:
v = ErrorStr
else:
v = format(self.r_value, format_spec)
return v
@property
[docs] def value(self):
return self.r_value
@property
[docs] def timestamp(self):
return self.r_timestamp
@property
[docs] def ndim(self):
return self.r_ndim
@property
[docs] def quality(self):
return self.r_quality
@property
[docs] def error(self):
return self.exc_info is not None
[docs] def is_scalar(self):
return self.ndim == 0
[docs] def is_spectrum(self):
return self.ndim == 1
[docs] def is_image(self):
return self.ndim == 2
NullValue = Value()
[docs]class AttributeValue(Value):
"""A qarbon value. A container for a value read from a qarbon model. It
contains the following members:
* r_value (Quantity): (aka: value) a Quantity representing the read value
* r_timestamp (datetime.datetime): the timestamp of reading the value
* w_value (Quantity): a Quantity representing the write value
* quality (Quality): the quality related to the read value
* exc_info (tuple): a 3-tuple equivalent to sys.exc_info() if reading a
value resulted in an exception or None otherwise
* error (bool): tells the read resulted in an error
* config (AttributeConfig): config object from which this value was obtained
Other configuration values can also be accessed:
* name (str): model name from which the value was obtained
* min_value (Quantity): minimum value allowed
* max_value (Quantity): maximum value allowed
* min_alarm (Quantity): minimum alarm value trigger
* max_alarm (Quantity): maximum alarm value trigger
* min_warning (Quantity): minimum warning value trigger
* max_warning (Quantity): maximum warning value trigger
* description (str): a description
Example on how to pretty print
"""
config = NullAttributeConfig
def __getattr__(self, name):
return getattr(self.config, name)
def __str__(self):
if self.error:
value = ErrorStr
else:
value = self.r_value
return "{0}".format(value)
def __repr__(self):
cname = self.__class__.__name__
if self.error:
value = ErrorRepr
else:
value = self.r_value
return "{0}({1}, {2!r})".format(cname, self.name, self.r_value)
def __format__(self, format_spec):
if self.error:
v = ErrorStr
else:
v = format(self.r_value, format_spec)
return '{obj.label}: {0}'.format(v, obj=self)
def __pformat__(self):
return """\
AttributeValue
name = {0.name}
label = {0.label}
access = {0.access}
display_level = {0.display_level}
unit = {0.unit}
value_range = {0.value_range}
alarm_range = {0.alarm_range}
warning_range = {0.warning_range}
ndim = {0.ndim}
r_value = {0.r_value}
r_timestamp = {0.r_timestamp}
r_quality = {0.r_quality}
w_value = {0.w_value}
error = {0.error}
""".format(self)
NullAttributeValue = AttributeValue()