comparison babel/util.py @ 346:faf0ead3a132 stable-0.9.x

Merged revisions [358:360], [364:370], [373:378], [380:382] from [source:trunk].
author cmlenz
date Mon, 16 Jun 2008 12:48:43 +0000
parents 3d67cf6d8022
children c2ae38340540
comparison
equal deleted inserted replaced
321:5491dbf09386 346:faf0ead3a132
14 """Various utility classes and functions.""" 14 """Various utility classes and functions."""
15 15
16 import codecs 16 import codecs
17 from datetime import timedelta, tzinfo 17 from datetime import timedelta, tzinfo
18 import os 18 import os
19 import parser
20 import re 19 import re
21 try: 20 try:
22 set 21 set
23 except NameError: 22 except NameError:
24 from sets import Set as set 23 from sets import Set as set
25 import textwrap 24 import textwrap
26 import time 25 import time
26 from itertools import izip, imap
27 missing = object()
27 28
28 __all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'odict', 'UTC', 29 __all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'odict', 'UTC',
29 'LOCALTZ'] 30 'LOCALTZ']
30 __docformat__ = 'restructuredtext en' 31 __docformat__ = 'restructuredtext en'
31 32
73 line1 = line1[len(codecs.BOM_UTF8):] 74 line1 = line1[len(codecs.BOM_UTF8):]
74 75
75 m = PYTHON_MAGIC_COMMENT_re.match(line1) 76 m = PYTHON_MAGIC_COMMENT_re.match(line1)
76 if not m: 77 if not m:
77 try: 78 try:
79 import parser
78 parser.suite(line1) 80 parser.suite(line1)
79 except SyntaxError: 81 except (ImportError, SyntaxError):
80 # Either it's a real syntax error, in which case the source is 82 # Either it's a real syntax error, in which case the source is
81 # not valid python source, or line2 is a continuation of line1, 83 # not valid python source, or line2 is a continuation of line1,
82 # in which case we don't want to scan line2 for a magic 84 # in which case we don't want to scan line2 for a magic
83 # comment. 85 # comment.
84 pass 86 pass
191 if key not in self._keys: 193 if key not in self._keys:
192 self._keys.append(key) 194 self._keys.append(key)
193 195
194 def __iter__(self): 196 def __iter__(self):
195 return iter(self._keys) 197 return iter(self._keys)
198 iterkeys = __iter__
196 199
197 def clear(self): 200 def clear(self):
198 dict.clear(self) 201 dict.clear(self)
199 self._keys = [] 202 self._keys = []
200 203
204 return d 207 return d
205 208
206 def items(self): 209 def items(self):
207 return zip(self._keys, self.values()) 210 return zip(self._keys, self.values())
208 211
212 def iteritems(self):
213 return izip(self._keys, self.itervalues())
214
209 def keys(self): 215 def keys(self):
210 return self._keys[:] 216 return self._keys[:]
211 217
212 def pop(self, key, default=None): 218 def pop(self, key, default=missing):
213 if key not in self: 219 if default is missing:
220 return dict.pop(self, key)
221 elif key not in self:
214 return default 222 return default
215 self._keys.remove(key) 223 self._keys.remove(key)
216 return dict.pop(self, key) 224 return dict.pop(self, key, default)
225
226 def popitem(self, key):
227 self._keys.remove(key)
228 return dict.popitem(key)
217 229
218 def setdefault(self, key, failobj = None): 230 def setdefault(self, key, failobj = None):
219 dict.setdefault(self, key, failobj) 231 dict.setdefault(self, key, failobj)
220 if key not in self._keys: 232 if key not in self._keys:
221 self._keys.append(key) 233 self._keys.append(key)
224 for (key, val) in dict.items(): 236 for (key, val) in dict.items():
225 self[key] = val 237 self[key] = val
226 238
227 def values(self): 239 def values(self):
228 return map(self.get, self._keys) 240 return map(self.get, self._keys)
241
242 def itervalues(self):
243 return imap(self.get, self._keys)
229 244
230 245
231 try: 246 try:
232 relpath = os.path.relpath 247 relpath = os.path.relpath
233 except AttributeError: 248 except AttributeError:
Copyright (C) 2012-2017 Edgewall Software