mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.6.x] Fixed #21823 -- Upgraded six to 1.5.2
Backport of 780ae7e9f8 from master.
			
			
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| """Utilities for writing code that runs on Python 2 and 3""" | """Utilities for writing code that runs on Python 2 and 3""" | ||||||
|  |  | ||||||
| # Copyright (c) 2010-2013 Benjamin Peterson | # Copyright (c) 2010-2014 Benjamin Peterson | ||||||
| # | # | ||||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
| # of this software and associated documentation files (the "Software"), to deal | # of this software and associated documentation files (the "Software"), to deal | ||||||
| @@ -25,7 +25,7 @@ import sys | |||||||
| import types | import types | ||||||
|  |  | ||||||
| __author__ = "Benjamin Peterson <benjamin@python.org>" | __author__ = "Benjamin Peterson <benjamin@python.org>" | ||||||
| __version__ = "1.4.1" | __version__ = "1.5.2" | ||||||
|  |  | ||||||
|  |  | ||||||
| # Useful for very coarse version differentiation. | # Useful for very coarse version differentiation. | ||||||
| @@ -84,9 +84,9 @@ class _LazyDescr(object): | |||||||
|  |  | ||||||
|     def __get__(self, obj, tp): |     def __get__(self, obj, tp): | ||||||
|         result = self._resolve() |         result = self._resolve() | ||||||
|         setattr(obj, self.name, result) |         setattr(obj, self.name, result) # Invokes __set__. | ||||||
|         # This is a bit ugly, but it avoids running this again. |         # This is a bit ugly, but it avoids running this again. | ||||||
|         delattr(tp, self.name) |         delattr(obj.__class__, self.name) | ||||||
|         return result |         return result | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -104,6 +104,35 @@ class MovedModule(_LazyDescr): | |||||||
|     def _resolve(self): |     def _resolve(self): | ||||||
|         return _import_module(self.mod) |         return _import_module(self.mod) | ||||||
|  |  | ||||||
|  |     def __getattr__(self, attr): | ||||||
|  |         # Hack around the Django autoreloader. The reloader tries to get | ||||||
|  |         # __file__ or __name__ of every module in sys.modules. This doesn't work | ||||||
|  |         # well if this MovedModule is for an module that is unavailable on this | ||||||
|  |         # machine (like winreg on Unix systems). Thus, we pretend __file__ and | ||||||
|  |         # __name__ don't exist if the module hasn't been loaded yet. See issues | ||||||
|  |         # #51 and #53. | ||||||
|  |         if attr in ("__file__", "__name__") and self.mod not in sys.modules: | ||||||
|  |             raise AttributeError | ||||||
|  |         _module = self._resolve() | ||||||
|  |         value = getattr(_module, attr) | ||||||
|  |         setattr(self, attr, value) | ||||||
|  |         return value | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class _LazyModule(types.ModuleType): | ||||||
|  |  | ||||||
|  |     def __init__(self, name): | ||||||
|  |         super(_LazyModule, self).__init__(name) | ||||||
|  |         self.__doc__ = self.__class__.__doc__ | ||||||
|  |  | ||||||
|  |     def __dir__(self): | ||||||
|  |         attrs = ["__doc__", "__name__"] | ||||||
|  |         attrs += [attr.name for attr in self._moved_attributes] | ||||||
|  |         return attrs | ||||||
|  |  | ||||||
|  |     # Subclasses should override this | ||||||
|  |     _moved_attributes = [] | ||||||
|  |  | ||||||
|  |  | ||||||
| class MovedAttribute(_LazyDescr): | class MovedAttribute(_LazyDescr): | ||||||
|  |  | ||||||
| @@ -131,7 +160,7 @@ class MovedAttribute(_LazyDescr): | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| class _MovedItems(types.ModuleType): | class _MovedItems(_LazyModule): | ||||||
|     """Lazy loading of moved objects""" |     """Lazy loading of moved objects""" | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -153,6 +182,7 @@ _moved_attributes = [ | |||||||
|     MovedModule("builtins", "__builtin__"), |     MovedModule("builtins", "__builtin__"), | ||||||
|     MovedModule("configparser", "ConfigParser"), |     MovedModule("configparser", "ConfigParser"), | ||||||
|     MovedModule("copyreg", "copy_reg"), |     MovedModule("copyreg", "copy_reg"), | ||||||
|  |     MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), | ||||||
|     MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), |     MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), | ||||||
|     MovedModule("http_cookies", "Cookie", "http.cookies"), |     MovedModule("http_cookies", "Cookie", "http.cookies"), | ||||||
|     MovedModule("html_entities", "htmlentitydefs", "html.entities"), |     MovedModule("html_entities", "htmlentitydefs", "html.entities"), | ||||||
| @@ -168,12 +198,14 @@ _moved_attributes = [ | |||||||
|     MovedModule("queue", "Queue"), |     MovedModule("queue", "Queue"), | ||||||
|     MovedModule("reprlib", "repr"), |     MovedModule("reprlib", "repr"), | ||||||
|     MovedModule("socketserver", "SocketServer"), |     MovedModule("socketserver", "SocketServer"), | ||||||
|  |     MovedModule("_thread", "thread", "_thread"), | ||||||
|     MovedModule("tkinter", "Tkinter"), |     MovedModule("tkinter", "Tkinter"), | ||||||
|     MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), |     MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), | ||||||
|     MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), |     MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), | ||||||
|     MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), |     MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), | ||||||
|     MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), |     MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), | ||||||
|     MovedModule("tkinter_tix", "Tix", "tkinter.tix"), |     MovedModule("tkinter_tix", "Tix", "tkinter.tix"), | ||||||
|  |     MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), | ||||||
|     MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), |     MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), | ||||||
|     MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), |     MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), | ||||||
|     MovedModule("tkinter_colorchooser", "tkColorChooser", |     MovedModule("tkinter_colorchooser", "tkColorChooser", | ||||||
| @@ -189,17 +221,21 @@ _moved_attributes = [ | |||||||
|     MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), |     MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), | ||||||
|     MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), |     MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), | ||||||
|     MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), |     MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), | ||||||
|  |     MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), | ||||||
|     MovedModule("winreg", "_winreg"), |     MovedModule("winreg", "_winreg"), | ||||||
| ] | ] | ||||||
| for attr in _moved_attributes: | for attr in _moved_attributes: | ||||||
|     setattr(_MovedItems, attr.name, attr) |     setattr(_MovedItems, attr.name, attr) | ||||||
|  |     if isinstance(attr, MovedModule): | ||||||
|  |         sys.modules[__name__ + ".moves." + attr.name] = attr | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
|  | _MovedItems._moved_attributes = _moved_attributes | ||||||
|  |  | ||||||
| moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves") | moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves") | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class Module_six_moves_urllib_parse(_LazyModule): | ||||||
| class Module_six_moves_urllib_parse(types.ModuleType): |  | ||||||
|     """Lazy loading of moved objects in six.moves.urllib_parse""" |     """Lazy loading of moved objects in six.moves.urllib_parse""" | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -223,11 +259,12 @@ for attr in _urllib_parse_moved_attributes: | |||||||
|     setattr(Module_six_moves_urllib_parse, attr.name, attr) |     setattr(Module_six_moves_urllib_parse, attr.name, attr) | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse") | Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes | ||||||
| sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib.parse") |  | ||||||
|  | sys.modules[__name__ + ".moves.urllib_parse"] = sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_error(types.ModuleType): | class Module_six_moves_urllib_error(_LazyModule): | ||||||
|     """Lazy loading of moved objects in six.moves.urllib_error""" |     """Lazy loading of moved objects in six.moves.urllib_error""" | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -240,11 +277,12 @@ for attr in _urllib_error_moved_attributes: | |||||||
|     setattr(Module_six_moves_urllib_error, attr.name, attr) |     setattr(Module_six_moves_urllib_error, attr.name, attr) | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib_error") | Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes | ||||||
| sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error") |  | ||||||
|  | sys.modules[__name__ + ".moves.urllib_error"] = sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_request(types.ModuleType): | class Module_six_moves_urllib_request(_LazyModule): | ||||||
|     """Lazy loading of moved objects in six.moves.urllib_request""" |     """Lazy loading of moved objects in six.moves.urllib_request""" | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -281,16 +319,18 @@ _urllib_request_moved_attributes = [ | |||||||
|     MovedAttribute("urlcleanup", "urllib", "urllib.request"), |     MovedAttribute("urlcleanup", "urllib", "urllib.request"), | ||||||
|     MovedAttribute("URLopener", "urllib", "urllib.request"), |     MovedAttribute("URLopener", "urllib", "urllib.request"), | ||||||
|     MovedAttribute("FancyURLopener", "urllib", "urllib.request"), |     MovedAttribute("FancyURLopener", "urllib", "urllib.request"), | ||||||
|  |     MovedAttribute("proxy_bypass", "urllib", "urllib.request"), | ||||||
| ] | ] | ||||||
| for attr in _urllib_request_moved_attributes: | for attr in _urllib_request_moved_attributes: | ||||||
|     setattr(Module_six_moves_urllib_request, attr.name, attr) |     setattr(Module_six_moves_urllib_request, attr.name, attr) | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib_request") | Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes | ||||||
| sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request") |  | ||||||
|  | sys.modules[__name__ + ".moves.urllib_request"] = sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_response(types.ModuleType): | class Module_six_moves_urllib_response(_LazyModule): | ||||||
|     """Lazy loading of moved objects in six.moves.urllib_response""" |     """Lazy loading of moved objects in six.moves.urllib_response""" | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -304,11 +344,12 @@ for attr in _urllib_response_moved_attributes: | |||||||
|     setattr(Module_six_moves_urllib_response, attr.name, attr) |     setattr(Module_six_moves_urllib_response, attr.name, attr) | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib_response") | Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes | ||||||
| sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response") |  | ||||||
|  | sys.modules[__name__ + ".moves.urllib_response"] = sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_robotparser(types.ModuleType): | class Module_six_moves_urllib_robotparser(_LazyModule): | ||||||
|     """Lazy loading of moved objects in six.moves.urllib_robotparser""" |     """Lazy loading of moved objects in six.moves.urllib_robotparser""" | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -319,8 +360,9 @@ for attr in _urllib_robotparser_moved_attributes: | |||||||
|     setattr(Module_six_moves_urllib_robotparser, attr.name, attr) |     setattr(Module_six_moves_urllib_robotparser, attr.name, attr) | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib_robotparser") | Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes | ||||||
| sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser") |  | ||||||
|  | sys.modules[__name__ + ".moves.urllib_robotparser"] = sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib(types.ModuleType): | class Module_six_moves_urllib(types.ModuleType): | ||||||
| @@ -331,6 +373,9 @@ class Module_six_moves_urllib(types.ModuleType): | |||||||
|     response = sys.modules[__name__ + ".moves.urllib_response"] |     response = sys.modules[__name__ + ".moves.urllib_response"] | ||||||
|     robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"] |     robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"] | ||||||
|  |  | ||||||
|  |     def __dir__(self): | ||||||
|  |         return ['parse', 'error', 'request', 'response', 'robotparser'] | ||||||
|  |  | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib") | sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib") | ||||||
|  |  | ||||||
| @@ -464,8 +509,9 @@ if PY3: | |||||||
| else: | else: | ||||||
|     def b(s): |     def b(s): | ||||||
|         return s |         return s | ||||||
|  |     # Workaround for standalone backslash | ||||||
|     def u(s): |     def u(s): | ||||||
|         return unicode(s, "unicode_escape") |         return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") | ||||||
|     unichr = unichr |     unichr = unichr | ||||||
|     int2byte = chr |     int2byte = chr | ||||||
|     def byte2int(bs): |     def byte2int(bs): | ||||||
| @@ -481,8 +527,7 @@ _add_doc(u, """Text literal""") | |||||||
|  |  | ||||||
|  |  | ||||||
| if PY3: | if PY3: | ||||||
|     import builtins |     exec_ = getattr(moves.builtins, "exec") | ||||||
|     exec_ = getattr(builtins, "exec") |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     def reraise(tp, value, tb=None): |     def reraise(tp, value, tb=None): | ||||||
| @@ -490,10 +535,6 @@ if PY3: | |||||||
|             raise value.with_traceback(tb) |             raise value.with_traceback(tb) | ||||||
|         raise value |         raise value | ||||||
|  |  | ||||||
|  |  | ||||||
|     print_ = getattr(builtins, "print") |  | ||||||
|     del builtins |  | ||||||
|  |  | ||||||
| else: | else: | ||||||
|     def exec_(_code_, _globs_=None, _locs_=None): |     def exec_(_code_, _globs_=None, _locs_=None): | ||||||
|         """Execute code in a namespace.""" |         """Execute code in a namespace.""" | ||||||
| @@ -513,14 +554,24 @@ else: | |||||||
| """) | """) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | print_ = getattr(moves.builtins, "print", None) | ||||||
|  | if print_ is None: | ||||||
|     def print_(*args, **kwargs): |     def print_(*args, **kwargs): | ||||||
|         """The new-style print function.""" |         """The new-style print function for Python 2.4 and 2.5.""" | ||||||
|         fp = kwargs.pop("file", sys.stdout) |         fp = kwargs.pop("file", sys.stdout) | ||||||
|         if fp is None: |         if fp is None: | ||||||
|             return |             return | ||||||
|         def write(data): |         def write(data): | ||||||
|             if not isinstance(data, basestring): |             if not isinstance(data, basestring): | ||||||
|                 data = str(data) |                 data = str(data) | ||||||
|  |             # If the file has an encoding, encode unicode with it. | ||||||
|  |             if (isinstance(fp, file) and | ||||||
|  |                 isinstance(data, unicode) and | ||||||
|  |                 fp.encoding is not None): | ||||||
|  |                 errors = getattr(fp, "errors", None) | ||||||
|  |                 if errors is None: | ||||||
|  |                     errors = "strict" | ||||||
|  |                 data = data.encode(fp.encoding, errors) | ||||||
|             fp.write(data) |             fp.write(data) | ||||||
|         want_unicode = False |         want_unicode = False | ||||||
|         sep = kwargs.pop("sep", None) |         sep = kwargs.pop("sep", None) | ||||||
| @@ -571,7 +622,11 @@ def add_metaclass(metaclass): | |||||||
|         orig_vars = cls.__dict__.copy() |         orig_vars = cls.__dict__.copy() | ||||||
|         orig_vars.pop('__dict__', None) |         orig_vars.pop('__dict__', None) | ||||||
|         orig_vars.pop('__weakref__', None) |         orig_vars.pop('__weakref__', None) | ||||||
|         for slots_var in orig_vars.get('__slots__', ()): |         slots = orig_vars.get('__slots__') | ||||||
|  |         if slots is not None: | ||||||
|  |             if isinstance(slots, str): | ||||||
|  |                 slots = [slots] | ||||||
|  |             for slots_var in slots: | ||||||
|                 orig_vars.pop(slots_var) |                 orig_vars.pop(slots_var) | ||||||
|         return metaclass(cls.__name__, cls.__bases__, orig_vars) |         return metaclass(cls.__name__, cls.__bases__, orig_vars) | ||||||
|     return wrapper |     return wrapper | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user