mirror of
				https://github.com/django/django.git
				synced 2025-10-29 08:36:09 +00:00 
			
		
		
		
	| @@ -20,12 +20,15 @@ | |||||||
| # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||||
| # SOFTWARE. | # SOFTWARE. | ||||||
|  |  | ||||||
|  | from __future__ import absolute_import | ||||||
|  |  | ||||||
|  | import functools | ||||||
| import operator | import operator | ||||||
| import sys | import sys | ||||||
| import types | import types | ||||||
|  |  | ||||||
| __author__ = "Benjamin Peterson <benjamin@python.org>" | __author__ = "Benjamin Peterson <benjamin@python.org>" | ||||||
| __version__ = "1.6.1" | __version__ = "1.8.0" | ||||||
|  |  | ||||||
|  |  | ||||||
| # Useful for very coarse version differentiation. | # Useful for very coarse version differentiation. | ||||||
| @@ -83,11 +86,7 @@ class _LazyDescr(object): | |||||||
|         self.name = name |         self.name = name | ||||||
|  |  | ||||||
|     def __get__(self, obj, tp): |     def __get__(self, obj, tp): | ||||||
|         try: |         result = self._resolve() | ||||||
|             result = self._resolve() |  | ||||||
|         except ImportError: |  | ||||||
|             # See the nice big comment in MovedModule.__getattr__. |  | ||||||
|             raise AttributeError("%s could not be imported " % self.name) |  | ||||||
|         setattr(obj, self.name, result) # Invokes __set__. |         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(obj.__class__, self.name) |         delattr(obj.__class__, self.name) | ||||||
| @@ -109,22 +108,7 @@ class MovedModule(_LazyDescr): | |||||||
|         return _import_module(self.mod) |         return _import_module(self.mod) | ||||||
|  |  | ||||||
|     def __getattr__(self, attr): |     def __getattr__(self, attr): | ||||||
|         # It turns out many Python frameworks like to traverse sys.modules and |         _module = self._resolve() | ||||||
|         # try to load various attributes. This causes problems if this is a |  | ||||||
|         # platform-specific module on the wrong platform, like _winreg on |  | ||||||
|         # Unixes. Therefore, we silently pretend unimportable modules do not |  | ||||||
|         # have any attributes. See issues #51, #53, #56, and #63 for the full |  | ||||||
|         # tales of woe. |  | ||||||
|         # |  | ||||||
|         # First, if possible, avoid loading the module just to look at __file__, |  | ||||||
|         # __name__, or __path__. |  | ||||||
|         if (attr in ("__file__", "__name__", "__path__") and |  | ||||||
|             self.mod not in sys.modules): |  | ||||||
|             raise AttributeError(attr) |  | ||||||
|         try: |  | ||||||
|             _module = self._resolve() |  | ||||||
|         except ImportError: |  | ||||||
|             raise AttributeError(attr) |  | ||||||
|         value = getattr(_module, attr) |         value = getattr(_module, attr) | ||||||
|         setattr(self, attr, value) |         setattr(self, attr, value) | ||||||
|         return value |         return value | ||||||
| @@ -170,9 +154,72 @@ class MovedAttribute(_LazyDescr): | |||||||
|         return getattr(module, self.attr) |         return getattr(module, self.attr) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class _SixMetaPathImporter(object): | ||||||
|  |     """ | ||||||
|  |     A meta path importer to import six.moves and its submodules. | ||||||
|  |  | ||||||
|  |     This class implements a PEP302 finder and loader. It should be compatible | ||||||
|  |     with Python 2.5 and all existing versions of Python3 | ||||||
|  |     """ | ||||||
|  |     def __init__(self, six_module_name): | ||||||
|  |         self.name = six_module_name | ||||||
|  |         self.known_modules = {} | ||||||
|  |  | ||||||
|  |     def _add_module(self, mod, *fullnames): | ||||||
|  |         for fullname in fullnames: | ||||||
|  |             self.known_modules[self.name + "." + fullname] = mod | ||||||
|  |  | ||||||
|  |     def _get_module(self, fullname): | ||||||
|  |         return self.known_modules[self.name + "." + fullname] | ||||||
|  |  | ||||||
|  |     def find_module(self, fullname, path=None): | ||||||
|  |         if fullname in self.known_modules: | ||||||
|  |             return self | ||||||
|  |         return None | ||||||
|  |  | ||||||
|  |     def __get_module(self, fullname): | ||||||
|  |         try: | ||||||
|  |             return self.known_modules[fullname] | ||||||
|  |         except KeyError: | ||||||
|  |             raise ImportError("This loader does not know module " + fullname) | ||||||
|  |  | ||||||
|  |     def load_module(self, fullname): | ||||||
|  |         try: | ||||||
|  |             # in case of a reload | ||||||
|  |             return sys.modules[fullname] | ||||||
|  |         except KeyError: | ||||||
|  |             pass | ||||||
|  |         mod = self.__get_module(fullname) | ||||||
|  |         if isinstance(mod, MovedModule): | ||||||
|  |             mod = mod._resolve() | ||||||
|  |         else: | ||||||
|  |             mod.__loader__ = self | ||||||
|  |         sys.modules[fullname] = mod | ||||||
|  |         return mod | ||||||
|  |  | ||||||
|  |     def is_package(self, fullname): | ||||||
|  |         """ | ||||||
|  |         Return true, if the named module is a package. | ||||||
|  |  | ||||||
|  |         We need this method to get correct spec objects with | ||||||
|  |         Python 3.4 (see PEP451) | ||||||
|  |         """ | ||||||
|  |         return hasattr(self.__get_module(fullname), "__path__") | ||||||
|  |  | ||||||
|  |     def get_code(self, fullname): | ||||||
|  |         """Return None | ||||||
|  |  | ||||||
|  |         Required, if is_package is implemented""" | ||||||
|  |         self.__get_module(fullname)  # eventually raises ImportError | ||||||
|  |         return None | ||||||
|  |     get_source = get_code  # same as get_code | ||||||
|  |  | ||||||
|  | _importer = _SixMetaPathImporter(__name__) | ||||||
|  |  | ||||||
|  |  | ||||||
| class _MovedItems(_LazyModule): | class _MovedItems(_LazyModule): | ||||||
|     """Lazy loading of moved objects""" |     """Lazy loading of moved objects""" | ||||||
|  |     __path__ = []  # mark as package | ||||||
|  |  | ||||||
|  |  | ||||||
| _moved_attributes = [ | _moved_attributes = [ | ||||||
| @@ -180,11 +227,15 @@ _moved_attributes = [ | |||||||
|     MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), |     MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), | ||||||
|     MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), |     MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), | ||||||
|     MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), |     MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), | ||||||
|  |     MovedAttribute("intern", "__builtin__", "sys"), | ||||||
|     MovedAttribute("map", "itertools", "builtins", "imap", "map"), |     MovedAttribute("map", "itertools", "builtins", "imap", "map"), | ||||||
|     MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), |     MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), | ||||||
|     MovedAttribute("reload_module", "__builtin__", "imp", "reload"), |     MovedAttribute("reload_module", "__builtin__", "imp", "reload"), | ||||||
|     MovedAttribute("reduce", "__builtin__", "functools"), |     MovedAttribute("reduce", "__builtin__", "functools"), | ||||||
|  |     MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), | ||||||
|     MovedAttribute("StringIO", "StringIO", "io"), |     MovedAttribute("StringIO", "StringIO", "io"), | ||||||
|  |     MovedAttribute("UserDict", "UserDict", "collections"), | ||||||
|  |     MovedAttribute("UserList", "UserList", "collections"), | ||||||
|     MovedAttribute("UserString", "UserString", "collections"), |     MovedAttribute("UserString", "UserString", "collections"), | ||||||
|     MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), |     MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), | ||||||
|     MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), |     MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), | ||||||
| @@ -194,12 +245,14 @@ _moved_attributes = [ | |||||||
|     MovedModule("configparser", "ConfigParser"), |     MovedModule("configparser", "ConfigParser"), | ||||||
|     MovedModule("copyreg", "copy_reg"), |     MovedModule("copyreg", "copy_reg"), | ||||||
|     MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), |     MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), | ||||||
|  |     MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), | ||||||
|     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"), | ||||||
|     MovedModule("html_parser", "HTMLParser", "html.parser"), |     MovedModule("html_parser", "HTMLParser", "html.parser"), | ||||||
|     MovedModule("http_client", "httplib", "http.client"), |     MovedModule("http_client", "httplib", "http.client"), | ||||||
|     MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), |     MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), | ||||||
|  |     MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), | ||||||
|     MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), |     MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), | ||||||
|     MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), |     MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), | ||||||
|     MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), |     MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), | ||||||
| @@ -233,18 +286,19 @@ _moved_attributes = [ | |||||||
|     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("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), | ||||||
|     MovedModule("xmlrpc_server", "xmlrpclib", "xmlrpc.server"), |     MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), | ||||||
|     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): |     if isinstance(attr, MovedModule): | ||||||
|         sys.modules[__name__ + ".moves." + attr.name] = attr |         _importer._add_module(attr, "moves." + attr.name) | ||||||
| del attr | del attr | ||||||
|  |  | ||||||
| _MovedItems._moved_attributes = _moved_attributes | _MovedItems._moved_attributes = _moved_attributes | ||||||
|  |  | ||||||
| moves = sys.modules[__name__ + ".moves"] = _MovedItems(__name__ + ".moves") | moves = _MovedItems(__name__ + ".moves") | ||||||
|  | _importer._add_module(moves, "moves") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_parse(_LazyModule): | class Module_six_moves_urllib_parse(_LazyModule): | ||||||
| @@ -268,6 +322,13 @@ _urllib_parse_moved_attributes = [ | |||||||
|     MovedAttribute("unquote_plus", "urllib", "urllib.parse"), |     MovedAttribute("unquote_plus", "urllib", "urllib.parse"), | ||||||
|     MovedAttribute("urlencode", "urllib", "urllib.parse"), |     MovedAttribute("urlencode", "urllib", "urllib.parse"), | ||||||
|     MovedAttribute("splitquery", "urllib", "urllib.parse"), |     MovedAttribute("splitquery", "urllib", "urllib.parse"), | ||||||
|  |     MovedAttribute("splittag", "urllib", "urllib.parse"), | ||||||
|  |     MovedAttribute("splituser", "urllib", "urllib.parse"), | ||||||
|  |     MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), | ||||||
|  |     MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), | ||||||
|  |     MovedAttribute("uses_params", "urlparse", "urllib.parse"), | ||||||
|  |     MovedAttribute("uses_query", "urlparse", "urllib.parse"), | ||||||
|  |     MovedAttribute("uses_relative", "urlparse", "urllib.parse"), | ||||||
| ] | ] | ||||||
| for attr in _urllib_parse_moved_attributes: | 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) | ||||||
| @@ -275,7 +336,8 @@ del attr | |||||||
|  |  | ||||||
| Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes | Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_parse"] = sys.modules[__name__ + ".moves.urllib.parse"] = Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse") | _importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), | ||||||
|  |                       "moves.urllib_parse", "moves.urllib.parse") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_error(_LazyModule): | class Module_six_moves_urllib_error(_LazyModule): | ||||||
| @@ -293,7 +355,8 @@ del attr | |||||||
|  |  | ||||||
| Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes | Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_error"] = sys.modules[__name__ + ".moves.urllib.error"] = Module_six_moves_urllib_error(__name__ + ".moves.urllib.error") | _importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), | ||||||
|  |                       "moves.urllib_error", "moves.urllib.error") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_request(_LazyModule): | class Module_six_moves_urllib_request(_LazyModule): | ||||||
| @@ -341,7 +404,8 @@ del attr | |||||||
|  |  | ||||||
| Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes | Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_request"] = sys.modules[__name__ + ".moves.urllib.request"] = Module_six_moves_urllib_request(__name__ + ".moves.urllib.request") | _importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), | ||||||
|  |                       "moves.urllib_request", "moves.urllib.request") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_response(_LazyModule): | class Module_six_moves_urllib_response(_LazyModule): | ||||||
| @@ -360,7 +424,8 @@ del attr | |||||||
|  |  | ||||||
| Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes | Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_response"] = sys.modules[__name__ + ".moves.urllib.response"] = Module_six_moves_urllib_response(__name__ + ".moves.urllib.response") | _importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), | ||||||
|  |                       "moves.urllib_response", "moves.urllib.response") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib_robotparser(_LazyModule): | class Module_six_moves_urllib_robotparser(_LazyModule): | ||||||
| @@ -376,22 +441,24 @@ del attr | |||||||
|  |  | ||||||
| Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes | Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes | ||||||
|  |  | ||||||
| sys.modules[__name__ + ".moves.urllib_robotparser"] = sys.modules[__name__ + ".moves.urllib.robotparser"] = Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser") | _importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), | ||||||
|  |                       "moves.urllib_robotparser", "moves.urllib.robotparser") | ||||||
|  |  | ||||||
|  |  | ||||||
| class Module_six_moves_urllib(types.ModuleType): | class Module_six_moves_urllib(types.ModuleType): | ||||||
|     """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" |     """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" | ||||||
|     parse = sys.modules[__name__ + ".moves.urllib_parse"] |     __path__ = []  # mark as package | ||||||
|     error = sys.modules[__name__ + ".moves.urllib_error"] |     parse = _importer._get_module("moves.urllib_parse") | ||||||
|     request = sys.modules[__name__ + ".moves.urllib_request"] |     error = _importer._get_module("moves.urllib_error") | ||||||
|     response = sys.modules[__name__ + ".moves.urllib_response"] |     request = _importer._get_module("moves.urllib_request") | ||||||
|     robotparser = sys.modules[__name__ + ".moves.urllib_robotparser"] |     response = _importer._get_module("moves.urllib_response") | ||||||
|  |     robotparser = _importer._get_module("moves.urllib_robotparser") | ||||||
|  |  | ||||||
|     def __dir__(self): |     def __dir__(self): | ||||||
|         return ['parse', 'error', 'request', 'response', 'robotparser'] |         return ['parse', 'error', 'request', 'response', 'robotparser'] | ||||||
|  |  | ||||||
|  | _importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), | ||||||
| sys.modules[__name__ + ".moves.urllib"] = Module_six_moves_urllib(__name__ + ".moves.urllib") |                       "moves.urllib") | ||||||
|  |  | ||||||
|  |  | ||||||
| def add_move(move): | def add_move(move): | ||||||
| @@ -418,11 +485,6 @@ if PY3: | |||||||
|     _func_code = "__code__" |     _func_code = "__code__" | ||||||
|     _func_defaults = "__defaults__" |     _func_defaults = "__defaults__" | ||||||
|     _func_globals = "__globals__" |     _func_globals = "__globals__" | ||||||
|  |  | ||||||
|     _iterkeys = "keys" |  | ||||||
|     _itervalues = "values" |  | ||||||
|     _iteritems = "items" |  | ||||||
|     _iterlists = "lists" |  | ||||||
| else: | else: | ||||||
|     _meth_func = "im_func" |     _meth_func = "im_func" | ||||||
|     _meth_self = "im_self" |     _meth_self = "im_self" | ||||||
| @@ -432,11 +494,6 @@ else: | |||||||
|     _func_defaults = "func_defaults" |     _func_defaults = "func_defaults" | ||||||
|     _func_globals = "func_globals" |     _func_globals = "func_globals" | ||||||
|  |  | ||||||
|     _iterkeys = "iterkeys" |  | ||||||
|     _itervalues = "itervalues" |  | ||||||
|     _iteritems = "iteritems" |  | ||||||
|     _iterlists = "iterlists" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| try: | try: | ||||||
|     advance_iterator = next |     advance_iterator = next | ||||||
| @@ -485,21 +542,37 @@ get_function_defaults = operator.attrgetter(_func_defaults) | |||||||
| get_function_globals = operator.attrgetter(_func_globals) | get_function_globals = operator.attrgetter(_func_globals) | ||||||
|  |  | ||||||
|  |  | ||||||
| def iterkeys(d, **kw): | if PY3: | ||||||
|     """Return an iterator over the keys of a dictionary.""" |     def iterkeys(d, **kw): | ||||||
|     return iter(getattr(d, _iterkeys)(**kw)) |         return iter(d.keys(**kw)) | ||||||
|  |  | ||||||
| def itervalues(d, **kw): |     def itervalues(d, **kw): | ||||||
|     """Return an iterator over the values of a dictionary.""" |         return iter(d.values(**kw)) | ||||||
|     return iter(getattr(d, _itervalues)(**kw)) |  | ||||||
|  |  | ||||||
| def iteritems(d, **kw): |     def iteritems(d, **kw): | ||||||
|     """Return an iterator over the (key, value) pairs of a dictionary.""" |         return iter(d.items(**kw)) | ||||||
|     return iter(getattr(d, _iteritems)(**kw)) |  | ||||||
|  |  | ||||||
| def iterlists(d, **kw): |     def iterlists(d, **kw): | ||||||
|     """Return an iterator over the (key, [values]) pairs of a dictionary.""" |         return iter(d.lists(**kw)) | ||||||
|     return iter(getattr(d, _iterlists)(**kw)) | else: | ||||||
|  |     def iterkeys(d, **kw): | ||||||
|  |         return iter(d.iterkeys(**kw)) | ||||||
|  |  | ||||||
|  |     def itervalues(d, **kw): | ||||||
|  |         return iter(d.itervalues(**kw)) | ||||||
|  |  | ||||||
|  |     def iteritems(d, **kw): | ||||||
|  |         return iter(d.iteritems(**kw)) | ||||||
|  |  | ||||||
|  |     def iterlists(d, **kw): | ||||||
|  |         return iter(d.iterlists(**kw)) | ||||||
|  |  | ||||||
|  | _add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") | ||||||
|  | _add_doc(itervalues, "Return an iterator over the values of a dictionary.") | ||||||
|  | _add_doc(iteritems, | ||||||
|  |          "Return an iterator over the (key, value) pairs of a dictionary.") | ||||||
|  | _add_doc(iterlists, | ||||||
|  |          "Return an iterator over the (key, [values]) pairs of a dictionary.") | ||||||
|  |  | ||||||
|  |  | ||||||
| if PY3: | if PY3: | ||||||
| @@ -545,6 +618,8 @@ if PY3: | |||||||
|  |  | ||||||
|  |  | ||||||
|     def reraise(tp, value, tb=None): |     def reraise(tp, value, tb=None): | ||||||
|  |         if value is None: | ||||||
|  |             value = tp() | ||||||
|         if value.__traceback__ is not tb: |         if value.__traceback__ is not tb: | ||||||
|             raise value.with_traceback(tb) |             raise value.with_traceback(tb) | ||||||
|         raise value |         raise value | ||||||
| @@ -625,26 +700,67 @@ if print_ is None: | |||||||
|  |  | ||||||
| _add_doc(reraise, """Reraise an exception.""") | _add_doc(reraise, """Reraise an exception.""") | ||||||
|  |  | ||||||
|  | if sys.version_info[0:2] < (3, 4): | ||||||
|  |     def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, | ||||||
|  |               updated=functools.WRAPPER_UPDATES): | ||||||
|  |         def wrapper(f): | ||||||
|  |             f = functools.wraps(wrapped)(f) | ||||||
|  |             f.__wrapped__ = wrapped | ||||||
|  |             return f | ||||||
|  |         return wrapper | ||||||
|  | else: | ||||||
|  |     wraps = functools.wraps | ||||||
|  |  | ||||||
| def with_metaclass(meta, *bases): | def with_metaclass(meta, *bases): | ||||||
|     """Create a base class with a metaclass.""" |     """Create a base class with a metaclass.""" | ||||||
|     return meta("NewBase", bases, {}) |     # This requires a bit of explanation: the basic idea is to make a dummy | ||||||
|  |     # metaclass for one level of class instantiation that replaces itself with | ||||||
|  |     # the actual metaclass. | ||||||
|  |     class metaclass(meta): | ||||||
|  |         def __new__(cls, name, this_bases, d): | ||||||
|  |             return meta(name, bases, d) | ||||||
|  |     return type.__new__(metaclass, 'temporary_class', (), {}) | ||||||
|  |  | ||||||
|  |  | ||||||
| def add_metaclass(metaclass): | def add_metaclass(metaclass): | ||||||
|     """Class decorator for creating a class with a metaclass.""" |     """Class decorator for creating a class with a metaclass.""" | ||||||
|     def wrapper(cls): |     def wrapper(cls): | ||||||
|         orig_vars = cls.__dict__.copy() |         orig_vars = cls.__dict__.copy() | ||||||
|         orig_vars.pop('__dict__', None) |  | ||||||
|         orig_vars.pop('__weakref__', None) |  | ||||||
|         slots = orig_vars.get('__slots__') |         slots = orig_vars.get('__slots__') | ||||||
|         if slots is not None: |         if slots is not None: | ||||||
|             if isinstance(slots, str): |             if isinstance(slots, str): | ||||||
|                 slots = [slots] |                 slots = [slots] | ||||||
|             for slots_var in slots: |             for slots_var in slots: | ||||||
|                 orig_vars.pop(slots_var) |                 orig_vars.pop(slots_var) | ||||||
|  |         orig_vars.pop('__dict__', None) | ||||||
|  |         orig_vars.pop('__weakref__', None) | ||||||
|         return metaclass(cls.__name__, cls.__bases__, orig_vars) |         return metaclass(cls.__name__, cls.__bases__, orig_vars) | ||||||
|     return wrapper |     return wrapper | ||||||
|  |  | ||||||
|  | # Complete the moves implementation. | ||||||
|  | # This code is at the end of this module to speed up module loading. | ||||||
|  | # Turn this module into a package. | ||||||
|  | __path__ = []  # required for PEP 302 and PEP 451 | ||||||
|  | __package__ = __name__  # see PEP 366 @ReservedAssignment | ||||||
|  | if globals().get("__spec__") is not None: | ||||||
|  |     __spec__.submodule_search_locations = []  # PEP 451 @UndefinedVariable | ||||||
|  | # Remove other six meta path importers, since they cause problems. This can | ||||||
|  | # happen if six is removed from sys.modules and then reloaded. (Setuptools does | ||||||
|  | # this for some reason.) | ||||||
|  | if sys.meta_path: | ||||||
|  |     for i, importer in enumerate(sys.meta_path): | ||||||
|  |         # Here's some real nastiness: Another "instance" of the six module might | ||||||
|  |         # be floating around. Therefore, we can't use isinstance() to check for | ||||||
|  |         # the six meta path importer, since the other six instance will have | ||||||
|  |         # inserted an importer with different class. | ||||||
|  |         if (type(importer).__name__ == "_SixMetaPathImporter" and | ||||||
|  |             importer.name == __name__): | ||||||
|  |             del sys.meta_path[i] | ||||||
|  |             break | ||||||
|  |     del i, importer | ||||||
|  | # Finally, add the importer to the meta path import hook. | ||||||
|  | sys.meta_path.append(_importer) | ||||||
|  |  | ||||||
|  |  | ||||||
| ### Additional customizations for Django ### | ### Additional customizations for Django ### | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								docs/releases/1.4.17.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/releases/1.4.17.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | =========================== | ||||||
|  | Django 1.4.17 release notes | ||||||
|  | =========================== | ||||||
|  |  | ||||||
|  | *Under development* | ||||||
|  |  | ||||||
|  | Django 1.4.17 ... | ||||||
|  |  | ||||||
|  | Additionally, Django's vendored version of six, :mod:`django.utils.six`, has | ||||||
|  | been upgraded to the latest release (1.8.0). | ||||||
							
								
								
									
										10
									
								
								docs/releases/1.6.9.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/releases/1.6.9.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | ========================== | ||||||
|  | Django 1.6.9 release notes | ||||||
|  | ========================== | ||||||
|  |  | ||||||
|  | *Under development* | ||||||
|  |  | ||||||
|  | Django 1.6.9 ... | ||||||
|  |  | ||||||
|  | Additionally, Django's vendored version of six, :mod:`django.utils.six`, has | ||||||
|  | been upgraded to the latest release (1.8.0). | ||||||
| @@ -25,6 +25,7 @@ versions of the documentation contain the release notes for any later releases. | |||||||
| .. toctree:: | .. toctree:: | ||||||
|    :maxdepth: 1 |    :maxdepth: 1 | ||||||
|  |  | ||||||
|  |    1.6.9 | ||||||
|    1.6.8 |    1.6.8 | ||||||
|    1.6.7 |    1.6.7 | ||||||
|    1.6.6 |    1.6.6 | ||||||
| @@ -58,6 +59,7 @@ versions of the documentation contain the release notes for any later releases. | |||||||
| .. toctree:: | .. toctree:: | ||||||
|    :maxdepth: 1 |    :maxdepth: 1 | ||||||
|  |  | ||||||
|  |    1.4.17 | ||||||
|    1.4.16 |    1.4.16 | ||||||
|    1.4.15 |    1.4.15 | ||||||
|    1.4.14 |    1.4.14 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user