taurus taurus

Source code for taurus.core.util

#!/usr/bin/env python

#############################################################################
##
## This file is part of Taurus, a Tango User Interface Library
## 
## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
##
## 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/>.
##
#############################################################################

"""This package consists of a collection of useful classes and functions. Most of
the elements are taurus independent and can be used generically.

This module contains a python implementation of :mod:`json`. This was done because
json only became part of python since version 2.6.
The json implementation follows the rule:

    #. if python >= 2.6 use standard json from python distribution
    #. otherwise use private implementation distributed with taurus
"""

__docformat__ = "restructuredtext"

import sys
import os.path

try:
    import json
except:
    json = None

from .codecs import *
from .colors import *
from .constant import *
from .containers import *
from .enumeration import *
from .event import *
from .log import *
from .object import *
from .timer import *
from .singleton import *
from .safeeval import *
from .prop import *
from .threadpool import *
from .user import *

import eventfilters

from lxml import etree

[docs]def str_DevFailed(df): """Returns a string representation of a :class:`PyTango.DevFailed`. :param df: (PyTango.DevFailed) the PyTango exception object :return: (str) a string representation of the given exception""" ret = "" try: desc = df.message.desc.rstrip('\n').replace('\n'," \n") ret += " Severity = %s\n" % df.message.severity ret += " Reason = %s\n" % df.message.reason ret += "Description = %s\n" % desc ret += " Origin = %s\n" % df.message.origin except: ret = "Exception = %s" % str(df) return ret
[docs]def dictFromSequence(seq): """Translates a sequence into a dictionary by converting each to elements of the sequence (k,v) into a k:v pair in the dictionary :param seq: (sequence) any sequence object :return: (dict) dictionary built from the given sequence""" def _pairwise(iterable): """Utility method used by dictFromSequence""" itnext = iter(iterable).next while True: yield itnext(), itnext() return dict(_pairwise(seq))
if sys.version_info < (2,6): def relpath(path, start=os.path.curdir): """Return a relative version of a path""" if not path: raise ValueError("no path specified") start_list = os.path.abspath(start).split(os.path.sep) path_list = os.path.abspath(path).split(os.path.sep) # Work out how much of the filepath is shared by start and path. i = len(os.path.commonprefix([start_list, path_list])) rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:] if not rel_list: return os.path.curdir return os.path.join(*rel_list) os.path.relpath = relpath