diff options
Diffstat (limited to 'lib/taurus/core/evaluation/dev_example.py')
-rw-r--r-- | lib/taurus/core/evaluation/dev_example.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/taurus/core/evaluation/dev_example.py b/lib/taurus/core/evaluation/dev_example.py new file mode 100644 index 00000000..811cdc71 --- /dev/null +++ b/lib/taurus/core/evaluation/dev_example.py @@ -0,0 +1,81 @@ +#!/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/>. +## +############################################################################# + +''' +Examples on using the evaluation scheme for exposing arbitrary non-tango quantities as taurus attributes +''' + +__all__ = ['FreeSpaceDevice'] + +from taurus.core.evaluation import EvaluationDevice +import os, platform, ctypes + +class FreeSpaceDevice(EvaluationDevice): + '''A simple example of usage of the evaluation scheme for + creating a device that allows to obtain available space in a dir. + + Important: note that only those members listed in `_symbols` will be available + ''' + _symbols = ['getFreeSpace'] + + def getFreeSpace(self, dir): + """ return free space (in bytes). + (Recipe adapted from `http://stackoverflow.com/questions/51658`) + """ + if platform.system() == 'Windows': + free_bytes = ctypes.c_ulonglong(0) + ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(dir), None, None, ctypes.pointer(free_bytes)) + return free_bytes.value + else: + s = os.statvfs(dir) + return s.f_bsize * s.f_bavail + + +#=============================================================================== +# Just for testing +#=============================================================================== + +def test1(): + import taurus + a = taurus.Attribute('eval://dev=taurus.core.evaluation.dev_example.FreeSpaceDevice;getFreeSpace("/")/1024/1024') #calculates free space in Mb + print "Free space: %iMb"%a.read().value + +def test2(): + import sys + from taurus.qt.qtgui.application import TaurusApplication + from taurus.qt.qtgui.display import TaurusLabel + app = TaurusApplication() + + w = TaurusLabel() + attrname='eval://dev=taurus.core.evaluation.dev_example.FreeSpaceDevice;getFreeSpace("/")' #calculates free space in Mb + + w.setModel(attrname) + + w.show() + sys.exit(app.exec_()) + +if __name__ == "__main__": + test2() + +
\ No newline at end of file |