Package advene :: Package util
[hide private]
[frames] | no frames]

Source Code for Package advene.util

  1  from inspect import stack 
  2   
3 -def make_property(name):
4 """ 5 This function must be called in the body of a class. 6 It looks for _get_X, _set_X and _del_X to create the X property. 7 """ 8 loc = stack()[1][0].f_locals 9 getter = loc.get("_get_%s" % name) # None if undefined 10 setter = loc.get("_set_%s" % name) # None if undefined 11 deller = loc.get("_del_%s" % name) # None if undefined 12 doc = getter.__doc__ 13 loc[name] = property(getter, setter, deller, doc)
14
15 -def make_tuple_methods(*names):
16 """ 17 This function must be called in the body of a subclass of tuple. 18 It creates methods __new__, __repr__, and as many methods as the names 19 provided, returning the corresponding element of the tuple. 20 21 e.g. 22 23 class MyPair(tuple): 24 "a lisp-like pair" 25 make_tuple_methods("car", "cdr") 26 """ 27 loc = stack()[1][0].f_locals 28 29 def __new__(cls, *values): 30 if len(values) != len(names): 31 raise TypeError("%s() takes exactly %s argument(s) (%s given)" 32 % (cls.__name__, len(names), len(values))) 33 return tuple.__new__(cls, values)
34 loc["__new__"] = __new__ 35 36 def __repr__(self): 37 return "%s%s" % (self.__class__.__name__, tuple.__repr__(self)) 38 loc["__repr__"] = __repr__ 39 40 for i,n in enumerate(names): 41 loc[n] = property(lambda self, _i=i: self[_i]) 42
43 -class dict_view(object):
44 """ 45 This callable accepts a dict and return a read only view of that dict. 46 """ 47
48 - def __init__(self, d):
49 self.__d = d
50
51 - def __getitem__(self, key):
52 return self.__d[key]
53
54 - def __in__(self, key):
55 return key in self.__d
56
57 - def __iter__(self, key):
58 return iter(self.__d)
59
60 - def __len__(self):
61 return len(self.__d)
62
63 - def __repr__(self):
64 return "dict_view(%r)" % (self.__d,)
65
66 - def get(self, key, default=None):
67 return self.__d.get(key, default)
68
69 - def iterkeys(self):
70 return self.__d.iterkeys()
71
72 - def itervalues(self):
73 return self.__d.itervalues()
74
75 - def iteritems(self):
76 return self.__d.iteritems()
77
78 -class smart_list_view(object):
79 """ 80 This callable accepts a dict and a list (supposed to contain the same 81 elements) and return a mixt read-only view of them. 82 """
83 - def __init__(self, l, d):
84 self.__l = l 85 self.__d = d
86
87 - def __getitem__(self, i):
88 return self.__l[i]
89
90 - def __in__(self, i):
91 return i in self.__l
92
93 - def __iter__(self, i):
94 return iter(self.__l)
95
96 - def __len__(self):
97 return len(self.__l)
98
99 - def __repr__(self):
100 return "smart_list_view(%r)" % (self.__d,)
101
102 - def get(self, key, default=None):
103 return self.__d.get(key, default)
104
105 - def iterkeys(self):
106 for i in self.__l: 107 yield i.id
108
109 - def itervalues(self):
110 return iter(self.__l)
111
112 - def iteritems(self):
113 for i in self._l: 114 yield i.id, i
115