Package logilab-common-0 ::
Package 36 ::
Package 1 ::
Module compat
|
|
1
2 """Wrappers around some builtins introduced in python 2.3, 2.4 and
3 2.5, making them available in for earlier versions of python.
4
5 :copyright: 2000-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
6 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
7 :license: General Public License version 2 - http://www.gnu.org/licenses
8 """
9 from __future__ import generators
10 __docformat__ = "restructuredtext en"
11
12 from warnings import warn
13
14 import __builtin__
15
16 from logilab.common.deprecation import class_renamed
17
18 try:
19 set = set
20 frozenset = frozenset
21 except NameError:
22 try:
23 from sets import Set as set, ImmutableSet as frozenset
24 except ImportError:
27 self._data = {}
28 warn("This implementation of Set is not complete !",
29 stacklevel=2)
30 for v in values:
31 self._data[v] = 1
32
34 result = self.__class__(self._data.keys())
35 for val in other:
36 result.add(val)
37 return result
38 __add__ = __or__
39
41 result = self.__class__()
42 for val in other:
43 if val in self._data:
44 result.add(val)
45 return result
46
48 result = self.__class__(self._data.keys())
49 for val in other:
50 if val in self._data:
51 result.remove(val)
52 return result
53
55 keys = self._data.keys()
56 okeys = other._data.keys()
57 keys.sort()
58 okeys.sort()
59 return cmp(keys, okeys)
60
62 return len(self._data)
63
65 elements = self._data.keys()
66 return 'lcc.%s(%r)' % (self.__class__.__name__, elements)
67 __str__ = __repr__
68
70 return iter(self._data)
71
73 """immutable set (can be set in dictionnaries)"""
77
79 """taken from python stdlib (sets.py)"""
80
81
82
83
84
85 result = 0
86 for elt in self:
87 result ^= hash(elt)
88 return result
89
91 """taken from python stdlib (sets.py)"""
92 if self._hashcode is None:
93 self._hashcode = self._compute_hash()
94 return self._hashcode
95
96
97 - class set(_baseset):
98 """mutable set"""
99 - def add(self, value):
100 self._data[value] = 1
101
103 """removes <element> from set"""
104 del self._data[element]
105
107 """pops an arbitrary element from set"""
108 return self._data.popitem()[0]
109
111 """mutable et cannot be hashed."""
112 raise TypeError("set objects are not hashable")
113
114 del _baseset
115
116 Set = class_renamed('Set', set, 'logilab.common.compat.Set is deprecated, '
117 'use logilab.common.compat.set instead')
118
119 try:
120 from itertools import izip, chain, imap
121 except ImportError:
122
123 - def izip(*iterables):
124 iterables = map(iter, iterables)
125 while iterables:
126 result = [i.next() for i in iterables]
127 yield tuple(result)
128
130 for it in iterables:
131 for element in it:
132 yield element
133
134 - def imap(function, *iterables):
135 iterables = map(iter, iterables)
136 while True:
137 args = [i.next() for i in iterables]
138 if function is None:
139 yield tuple(args)
140 else:
141 yield function(*args)
142 try:
143 sum = sum
144 enumerate = enumerate
145 except NameError:
146
147 import operator
148 - def sum(seq, start=0):
149 """Returns the sum of all elements in the sequence"""
150 return reduce(operator.add, seq, start)
151
153 """emulates the python2.3 enumerate() function"""
154 i = 0
155 for val in iterable:
156 yield i, val
157 i += 1
158
159 try:
160 sorted = sorted
161 reversed = reversed
162 except NameError:
163
164 - def sorted(iterable, cmp=None, key=None, reverse=False):
165 original = list(iterable)
166 if key:
167 l2 = [(key(elt), index) for index, elt in enumerate(original)]
168 else:
169 l2 = original
170 l2.sort(cmp)
171 if reverse:
172 l2.reverse()
173 if key:
174 return [original[index] for elt, index in l2]
175 return l2
176
178 l2 = list(l)
179 l2.reverse()
180 return l2
181
182 try:
183 max = max
184 max(("ab","cde"),key=len)
185 except TypeError:
186 - def max( *args, **kargs):
187 if len(args) == 0:
188 raise TypeError("max expected at least 1 arguments, got 0")
189 key= kargs.pop("key", None)
190
191 if key is None:
192 return __builtin__.max(*args,**kargs)
193
194 for karg in kargs:
195 raise TypeError("unexpected keyword argument %s for function max") % karg
196
197 if len(args) == 1:
198 items = iter(args[0])
199 else:
200 items = iter(args)
201
202 try:
203 best_item = items.next()
204 best_value = key(best_item)
205 except StopIteration:
206 raise ValueError("max() arg is an empty sequence")
207
208 for item in items:
209 value = key(item)
210 if value > best_value:
211 best_item = item
212 best_value = value
213
214 return best_item
215
216
217
218
219
220
221 try:
222 any = any
223 all = all
224 except NameError:
226 """any(iterable) -> bool
227
228 Return True if bool(x) is True for any x in the iterable.
229 """
230 for elt in iterable:
231 if elt:
232 return True
233 return False
234
236 """all(iterable) -> bool
237
238 Return True if bool(x) is True for all values x in the iterable.
239 """
240 for elt in iterable:
241 if not elt:
242 return False
243 return True
244