/usr/share/pyshared/PyTango/group_reply_list.py is in python-pytango 7.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | ################################################################################
##
## This file is part of PyTango, a python binding for Tango
##
## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
##
## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
##
## PyTango 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.
##
## PyTango 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 PyTango. If not, see <http://www.gnu.org/licenses/>.
##
################################################################################
"""
This is an internal PyTango module.
"""
__all__ = []
__docformat__ = "restructuredtext"
from _PyTango import GroupReplyList
from _PyTango import GroupCmdReplyList
from _PyTango import GroupAttrReplyList
def __GroupReplyList__getitem(self, item):
# Accessing an item in GroupReplyList and friends makes a C++ copy
# of the item calling the copy constructor. But the copy constructor
# of GroupReply is not fair: It extracts the data from the original
# object!! So, we will only call the original getitem once, the
# successive calls will just return the cached object.
# GroupReplyList could be changed to use proxies to the internal
# c++ object with the apropriate parameter to the
# boost::vector_indexing_suite, but when the value is extracted
# it is not anymore in any C++ object but in the python object, so
# we must still keep it.
# Slices support
if isinstance(item, slice):
return [self.__getitem__(x) for x in xrange(*item.indices(len(self)))]
# We want to get the same cache value for x[-1] as for x[len(x)-1]
if item < 0:
item = item + len(self)
# Try to get from cache
try:
return self.__listCache[item]
except AttributeError:
# The GroupReplyList object is created without the
# cache attribute, so it is created here
self.__listCache = dict()
except KeyError:
# The decision wheter we are out of bounds or it's just a cache
# miss will be taken by original_getitem
pass
r = self.__GroupReplyList_original_getitem(item)
self.__listCache[item] = r
return r
def __GroupReplyList__iter(self):
# Same problem as getitem. In this case it is easier for me to just
# reimplement __iter__ in terms of __getitem__
for x in xrange(len(self)):
yield self[x]
def __init_GroupReplyList():
GroupReplyList.__GroupReplyList_original_getitem = GroupReplyList.__getitem__
GroupReplyList.__getitem__ = __GroupReplyList__getitem
GroupCmdReplyList.__GroupReplyList_original_getitem = GroupCmdReplyList.__getitem__
GroupCmdReplyList.__getitem__ = __GroupReplyList__getitem
GroupAttrReplyList.__GroupReplyList_original_getitem = GroupAttrReplyList.__getitem__
GroupAttrReplyList.__getitem__ = __GroupReplyList__getitem
GroupReplyList.__iter__ = __GroupReplyList__iter
GroupCmdReplyList.__iter__ = __GroupReplyList__iter
GroupAttrReplyList.__iter__ = __GroupReplyList__iter
def __doc_GroupReplyList():
pass
def init(doc=True):
__init_GroupReplyList()
if doc:
__doc_GroupReplyList()
|