Package PyFoam :: Package ThirdParty :: Module six
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.ThirdParty.six

  1  """Utilities for writing code that runs on Python 2 and 3""" 
  2   
  3  import operator 
  4  import sys 
  5  import types 
  6   
  7  __author__ = "Benjamin Peterson <benjamin@python.org>" 
  8  __version__ = "1.2.0" 
  9   
 10   
 11  # True if we are running on Python 3. 
 12  PY3 = sys.version_info[0] == 3 
 13   
 14  if PY3: 
 15      string_types = str, 
 16      integer_types = int, 
 17      class_types = type, 
 18      text_type = str 
 19      binary_type = bytes 
 20   
 21      MAXSIZE = sys.maxsize 
 22  else: 
 23      string_types = basestring, 
 24      integer_types = (int, long) 
 25      class_types = (type, types.ClassType) 
 26      text_type = unicode 
 27      binary_type = str 
 28   
 29      if sys.platform == "java": 
 30          # Jython always uses 32 bits. 
 31          MAXSIZE = int((1 << 31) - 1) 
 32      else: 
 33          # It's possible to have sizeof(long) != sizeof(Py_ssize_t). 
34 - class X(object):
35 - def __len__(self):
36 return 1 << 31
37 try: 38 len(X()) 39 except OverflowError: 40 # 32-bit 41 MAXSIZE = int((1 << 31) - 1) 42 else: 43 # 64-bit 44 MAXSIZE = int((1 << 63) - 1) 45 del X 46 47
48 -def _add_doc(func, doc):
49 """Add documentation to a function.""" 50 func.__doc__ = doc
51 52
53 -def _import_module(name):
54 """Import module, returning the module after the last dot.""" 55 __import__(name) 56 return sys.modules[name]
57 58
59 -class _LazyDescr(object):
60
61 - def __init__(self, name):
62 self.name = name
63
64 - def __get__(self, obj, tp):
65 result = self._resolve() 66 setattr(obj, self.name, result) 67 # This is a bit ugly, but it avoids running this again. 68 delattr(tp, self.name) 69 return result
70 71
72 -class MovedModule(_LazyDescr):
73
74 - def __init__(self, name, old, new=None):
75 super(MovedModule, self).__init__(name) 76 if PY3: 77 if new is None: 78 new = name 79 self.mod = new 80 else: 81 self.mod = old
82
83 - def _resolve(self):
84 return _import_module(self.mod)
85 86
87 -class MovedAttribute(_LazyDescr):
88
89 - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
90 super(MovedAttribute, self).__init__(name) 91 if PY3: 92 if new_mod is None: 93 new_mod = name 94 self.mod = new_mod 95 if new_attr is None: 96 if old_attr is None: 97 new_attr = name 98 else: 99 new_attr = old_attr 100 self.attr = new_attr 101 else: 102 self.mod = old_mod 103 if old_attr is None: 104 old_attr = name 105 self.attr = old_attr
106
107 - def _resolve(self):
108 module = _import_module(self.mod) 109 return getattr(module, self.attr)
110 111 112
113 -class _MovedItems(types.ModuleType):
114 """Lazy loading of moved objects"""
115 116 117 _moved_attributes = [ 118 MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), 119 MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), 120 MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), 121 MovedAttribute("map", "itertools", "builtins", "imap", "map"), 122 MovedAttribute("reload_module", "__builtin__", "imp", "reload"), 123 MovedAttribute("reduce", "__builtin__", "functools"), 124 MovedAttribute("StringIO", "StringIO", "io"), 125 MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), 126 MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), 127 128 MovedModule("builtins", "__builtin__"), 129 MovedModule("configparser", "ConfigParser"), 130 MovedModule("copyreg", "copy_reg"), 131 MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), 132 MovedModule("http_cookies", "Cookie", "http.cookies"), 133 MovedModule("html_entities", "htmlentitydefs", "html.entities"), 134 MovedModule("html_parser", "HTMLParser", "html.parser"), 135 MovedModule("http_client", "httplib", "http.client"), 136 MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), 137 MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), 138 MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), 139 MovedModule("cPickle", "cPickle", "pickle"), 140 MovedModule("queue", "Queue"), 141 MovedModule("reprlib", "repr"), 142 MovedModule("socketserver", "SocketServer"), 143 MovedModule("tkinter", "Tkinter"), 144 MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), 145 MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), 146 MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), 147 MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), 148 MovedModule("tkinter_tix", "Tix", "tkinter.tix"), 149 MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), 150 MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), 151 MovedModule("tkinter_colorchooser", "tkColorChooser", 152 "tkinter.colorchooser"), 153 MovedModule("tkinter_commondialog", "tkCommonDialog", 154 "tkinter.commondialog"), 155 MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), 156 MovedModule("tkinter_font", "tkFont", "tkinter.font"), 157 MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), 158 MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", 159 "tkinter.simpledialog"), 160 MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), 161 MovedModule("winreg", "_winreg"), 162 ] 163 for attr in _moved_attributes: 164 setattr(_MovedItems, attr.name, attr) 165 del attr 166 167 moves = sys.modules["PyFoam.ThirdParty.six.moves"] = _MovedItems("moves") 168 # moves = sys.modules["six.moves"] = _MovedItems("moves") 169 170
171 -def add_move(move):
172 """Add an item to six.moves.""" 173 setattr(_MovedItems, move.name, move)
174 175
176 -def remove_move(name):
177 """Remove item from six.moves.""" 178 try: 179 delattr(_MovedItems, name) 180 except AttributeError: 181 try: 182 del moves.__dict__[name] 183 except KeyError: 184 raise AttributeError("no such move, %r" % (name,))
185 186 187 if PY3: 188 _meth_func = "__func__" 189 _meth_self = "__self__" 190 191 _func_code = "__code__" 192 _func_defaults = "__defaults__" 193 194 _iterkeys = "keys" 195 _itervalues = "values" 196 _iteritems = "items" 197 else: 198 _meth_func = "im_func" 199 _meth_self = "im_self" 200 201 _func_code = "func_code" 202 _func_defaults = "func_defaults" 203 204 _iterkeys = "iterkeys" 205 _itervalues = "itervalues" 206 _iteritems = "iteritems" 207 208 209 try: 210 advance_iterator = next 211 except NameError:
212 - def advance_iterator(it):
213 return it.next()
214 next = advance_iterator 215 216 217 if PY3:
218 - def get_unbound_function(unbound):
219 return unbound
220 221 Iterator = object 222
223 - def callable(obj):
224 return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
225 else:
226 - def get_unbound_function(unbound):
227 return unbound.im_func
228
229 - class Iterator(object):
230
231 - def next(self):
232 return type(self).__next__(self)
233 234 callable = callable 235 _add_doc(get_unbound_function, 236 """Get the function out of a possibly unbound function""") 237 238 239 get_method_function = operator.attrgetter(_meth_func) 240 get_method_self = operator.attrgetter(_meth_self) 241 get_function_code = operator.attrgetter(_func_code) 242 get_function_defaults = operator.attrgetter(_func_defaults) 243 244
245 -def iterkeys(d):
246 """Return an iterator over the keys of a dictionary.""" 247 return iter(getattr(d, _iterkeys)())
248
249 -def itervalues(d):
250 """Return an iterator over the values of a dictionary.""" 251 return iter(getattr(d, _itervalues)())
252
253 -def iteritems(d):
254 """Return an iterator over the (key, value) pairs of a dictionary.""" 255 return iter(getattr(d, _iteritems)())
256 257 258 if PY3:
259 - def b(s):
260 return s.encode("latin-1")
261 - def u(s):
262 return s
263 if sys.version_info[1] <= 1:
264 - def int2byte(i):
265 return bytes((i,))
266 else: 267 # This is about 2x faster than the implementation above on 3.2+ 268 int2byte = operator.methodcaller("to_bytes", 1, "big") 269 import io 270 StringIO = io.StringIO 271 BytesIO = io.BytesIO 272 else:
273 - def b(s):
274 return s
275 - def u(s):
276 return unicode(s, "unicode_escape")
277 int2byte = chr 278 import StringIO 279 StringIO = BytesIO = StringIO.StringIO 280 _add_doc(b, """Byte literal""") 281 _add_doc(u, """Text literal""") 282 283 284 if PY3: 285 import builtins 286 exec_ = getattr(builtins, "exec") 287 288
289 - def reraise(tp, value, tb=None):
290 if value.__traceback__ is not tb: 291 raise value.with_traceback(tb) 292 raise value
293 294 295 print_ = getattr(builtins, "print") 296 del builtins 297 298 else:
299 - def exec_(code, globs=None, locs=None):
300 """Execute code in a namespace.""" 301 if globs is None: 302 frame = sys._getframe(1) 303 globs = frame.f_globals 304 if locs is None: 305 locs = frame.f_locals 306 del frame 307 elif locs is None: 308 locs = globs 309 exec("""exec code in globs, locs""")
310 311 312 exec_("""def reraise(tp, value, tb=None): 313 raise tp, value, tb 314 """) 315 316 326 want_unicode = False 327 sep = kwargs.pop("sep", None) 328 if sep is not None: 329 if isinstance(sep, unicode): 330 want_unicode = True 331 elif not isinstance(sep, str): 332 raise TypeError("sep must be None or a string") 333 end = kwargs.pop("end", None) 334 if end is not None: 335 if isinstance(end, unicode): 336 want_unicode = True 337 elif not isinstance(end, str): 338 raise TypeError("end must be None or a string") 339 if kwargs: 340 raise TypeError("invalid keyword arguments to print()") 341 if not want_unicode: 342 for arg in args: 343 if isinstance(arg, unicode): 344 want_unicode = True 345 break 346 if want_unicode: 347 newline = unicode("\n") 348 space = unicode(" ") 349 else: 350 newline = "\n" 351 space = " " 352 if sep is None: 353 sep = space 354 if end is None: 355 end = newline 356 for i, arg in enumerate(args): 357 if i: 358 write(sep) 359 write(arg) 360 write(end) 361 362 _add_doc(reraise, """Reraise an exception.""") 363 364
365 -def with_metaclass(meta, base=object):
366 """Create a base class with a metaclass.""" 367 return meta("NewBase", (base,), {})
368