summaryrefslogtreecommitdiff
path: root/lib/taurus/core/taurusbasetypes.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/taurus/core/taurusbasetypes.py')
-rw-r--r--lib/taurus/core/taurusbasetypes.py300
1 files changed, 300 insertions, 0 deletions
diff --git a/lib/taurus/core/taurusbasetypes.py b/lib/taurus/core/taurusbasetypes.py
new file mode 100644
index 00000000..f336ee39
--- /dev/null
+++ b/lib/taurus/core/taurusbasetypes.py
@@ -0,0 +1,300 @@
+#!/usr/bin/env python
+#############################################################################
+##
+## This file is part of Taurus
+##
+## http://taurus-scada.org
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus is free software: you can redistribute it and/or modify
+## it under the terms of the GNU Lesser General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+##
+## Taurus is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU Lesser General Public License for more details.
+##
+## You should have received a copy of the GNU Lesser General Public License
+## along with Taurus. If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+'''
+a misc collection of basic types
+'''
+
+__all__ = ["TaurusSWDevState", "TaurusSWDevHealth", "OperationMode",
+ "TaurusSerializationMode", "SubscriptionState", "TaurusEventType",
+ "MatchLevel", "TaurusElementType", "LockStatus", "DataFormat",
+ "AttrQuality", "AttrAccess", "DisplayLevel", "ManagerState",
+ "TaurusTimeVal", "TaurusAttrValue", "TaurusConfigValue",
+ "TaurusLockInfo"]
+
+__docformat__ = "restructuredtext"
+
+import time
+import datetime
+
+from .util.enumeration import Enumeration
+
+TaurusSWDevState = Enumeration(
+'TaurusSWDevState', (
+ 'Uninitialized',
+ 'Running',
+ 'Shutdown',
+ 'Crash',
+ 'EventSystemShutdown'
+))
+
+TaurusSWDevHealth = Enumeration(
+'TaurusSWDevHealth', (
+ 'Exported', # device reported exported
+ 'ExportedAlive', # device reported exported and confirmed connection
+ 'ExportedNotAlive', # device reported exported but connection failed!!
+ 'NotExported', # device didn't report exported
+ 'NotExportedAlive', # device didn't report exported but connection confirmed!
+ 'NotExportedNotAlive' # device didn't report exported and connection failed
+))
+
+OperationMode = Enumeration(
+'OperationMode', (
+ 'OFFLINE',
+ 'ONLINE'
+))
+
+TaurusSerializationMode = Enumeration(
+'TaurusSerializationMode', (
+ 'Serial',
+ 'Concurrent'
+))
+
+TaurusEventType = Enumeration(
+'TaurusEventType', (
+ 'Change',
+ 'Config',
+ 'Periodic',
+ 'Error'
+))
+
+MatchLevel = Enumeration(
+'MatchLevel', (
+ 'ANY',
+ 'SHORT',
+ 'NORMAL',
+ 'COMPLETE',
+ 'SHORT_NORMAL',
+ 'NORMAL_COMPLETE'
+))
+
+TaurusElementType = Enumeration(
+'TaurusElementType', (
+ 'Unknown',
+ 'Name',
+ 'DeviceClass',
+ 'Device',
+ 'DeviceAlias',
+ 'Domain',
+ 'Family',
+ 'Member',
+ 'Server',
+ 'ServerName',
+ 'ServerInstance',
+ 'Exported',
+ 'Host',
+ 'Attribute',
+ 'AttributeAlias',
+ 'Command',
+ 'Property',
+ 'Configuration',
+ 'Database',
+))
+
+LockStatus = Enumeration(
+'LockStatus', (
+ 'Unlocked',
+ 'Locked',
+ 'LockedMaster',
+ 'Unknown',
+))
+
+DataFormat = Enumeration(
+'DataFormat', (
+ '_0D',
+ '_1D',
+ '_2D'
+))
+
+DataType = Enumeration(
+'DataType', (
+ 'Integer',
+ 'Float',
+ 'String',
+ 'Boolean',
+))
+
+SubscriptionState = Enumeration(
+"SubscriptionState", (
+ "Unsubscribed",
+ "Subscribing",
+ "Subscribed",
+ "PendingSubscribe"
+))
+
+#################
+# Not in use yet:
+
+AttrQuality = Enumeration(
+'AttrQuality', (
+ 'ATTR_VALID',
+ 'ATTR_INVALID',
+ 'ATTR_ALARM'
+))
+
+AttrAccess = Enumeration(
+'AttrAccess', (
+ 'READ',
+ 'READ_WITH_WRITE',
+ 'WRITE',
+ 'READ_WRITE'
+))
+
+DisplayLevel = Enumeration(
+'DisplayLevel', (
+ 'OPERATOR',
+ 'EXPERT',
+ 'DEVELOPER'
+))
+
+ManagerState = Enumeration(
+'ManagerState', (
+ 'UNINITIALIZED',
+ 'INITED',
+ 'CLEANED'
+))
+
+
+
+class TaurusTimeVal(object):
+ def __init__(self):
+ self.tv_sec = 0
+ self.tv_usec = 0
+ self.tv_nsec = 0
+
+ def __repr__(self):
+ return "%s(tv_sec=%i, tv_usec=%i, tv_nsec=%i)"%(self.__class__.__name__, self.tv_sec, self.tv_usec, self.tv_nsec)
+
+ def __float__(self):
+ return self.totime()
+
+ def totime(self):
+ return self.tv_usec*1e-9 + self.tv_usec*1e-6 + self.tv_sec
+
+ def todatetime(self):
+ return datetime.datetime.fromtimestamp(self.totime())
+
+ def isoformat(self):
+ return self.todatetime().isoformat()
+
+ @staticmethod
+ def fromtimestamp(v):
+ tv = TaurusTimeVal()
+ tv.tv_sec = int(v)
+ usec = (v - tv.tv_sec)*1000000
+ tv.tv_usec = int(usec)
+ tv.tv_nsec = int((usec - tv.tv_usec)*1000)
+ return tv
+
+ @staticmethod
+ def fromdatetime(v):
+ import time
+ tv = TaurusTimeVal()
+ tv.tv_sec = int(time.mktime(v.timetuple()))
+ tv.tv_usec = v.microsecond
+ tv.tv_nsec = 0 #datetime does not provide ns info
+ return tv
+
+ @staticmethod
+ def now():
+ return TaurusTimeVal.fromdatetime(datetime.datetime.now())
+
+
+class TaurusAttrValue(object):
+ def __init__(self):
+ self.value = None
+ self.w_value = None
+ self.time = None
+ self.quality = AttrQuality.ATTR_VALID
+ self.format = 0
+ self.has_failed = False
+ self.err_stack = None
+ self.config = TaurusConfigValue()
+
+ def __getattr__(self,name):
+ return getattr(self.config, name)
+
+ def __repr__(self):
+ return "%s%s"%(self.__class__.__name__, repr(self.__dict__))
+ #values = ", ".join(["%s=%s"%(m,repr(getattr(self,m))) for m in self.__dict__])
+ #return "%s(%s)"%(self.__class__.__name__, values)
+
+class TaurusConfigValue(object):
+ def __init__(self):
+ self.name = None
+ self.writable = None
+ self.data_format = None
+ self.type = None
+ self.max_dim = 1, 1
+ self.label = None
+ self.unit = None
+ self.standard_unit = None
+ self.display_unit= None
+ self.format = None
+ self.range = float('-inf'), float('inf')
+ self.alarm = float('-inf'), float('inf')
+ self.warning = float('-inf'), float('inf')
+ self.disp_level = None
+ self.description = None
+
+ def __repr__(self):
+ return "%s%s"%(self.__class__.__name__, repr(self.__dict__))
+
+ def isWrite(self):
+ return self.writable == AttrAccess.WRITE
+
+ def isReadOnly(sel):
+ return self.writable == AttrAccess.READ
+
+ def isReadWrite(self):
+ return self.writable == AttrAccess.READ_WRITE
+
+ def isScalar(self):
+ return self.format == DataFormat._0D
+
+ def isSpectrum(self):
+ return self.format == DataFormat._1D
+
+ def isImage(self):
+ return self.format == DataFormat._2D
+
+
+class TaurusLockInfo(object):
+
+ LOCK_STATUS_UNKNOWN = 'Lock status unknown'
+
+ def __init__(self):
+ self.status = LockStatus.Unknown
+ self.status_msg = self.LOCK_STATUS_UNKNOWN
+ self.id = None
+ self.host = None
+ self.klass = None
+
+ def __repr__(self):
+ return self.status_msg
+
+#del time
+#del datetime
+#del Enumeration
+#del AttrQuality, AttrAccess, DataFormat, LockStatus \ No newline at end of file