mirror of https://github.com/django/django.git
Updated bundled version of six.
This commit is contained in:
parent
46f4b19920
commit
e11ccc76d3
|
@ -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-2012 Benjamin Peterson
|
# Copyright (c) 2010-2013 Benjamin Peterson
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
# this software and associated documentation files (the "Software"), to deal in
|
# this software and associated documentation files (the "Software"), to deal in
|
||||||
|
@ -209,22 +209,28 @@ if PY3:
|
||||||
_meth_func = "__func__"
|
_meth_func = "__func__"
|
||||||
_meth_self = "__self__"
|
_meth_self = "__self__"
|
||||||
|
|
||||||
|
_func_closure = "__closure__"
|
||||||
_func_code = "__code__"
|
_func_code = "__code__"
|
||||||
_func_defaults = "__defaults__"
|
_func_defaults = "__defaults__"
|
||||||
|
_func_globals = "__globals__"
|
||||||
|
|
||||||
_iterkeys = "keys"
|
_iterkeys = "keys"
|
||||||
_itervalues = "values"
|
_itervalues = "values"
|
||||||
_iteritems = "items"
|
_iteritems = "items"
|
||||||
|
_iterlists = "lists"
|
||||||
else:
|
else:
|
||||||
_meth_func = "im_func"
|
_meth_func = "im_func"
|
||||||
_meth_self = "im_self"
|
_meth_self = "im_self"
|
||||||
|
|
||||||
|
_func_closure = "func_closure"
|
||||||
_func_code = "func_code"
|
_func_code = "func_code"
|
||||||
_func_defaults = "func_defaults"
|
_func_defaults = "func_defaults"
|
||||||
|
_func_globals = "func_globals"
|
||||||
|
|
||||||
_iterkeys = "iterkeys"
|
_iterkeys = "iterkeys"
|
||||||
_itervalues = "itervalues"
|
_itervalues = "itervalues"
|
||||||
_iteritems = "iteritems"
|
_iteritems = "iteritems"
|
||||||
|
_iterlists = "iterlists"
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -235,14 +241,18 @@ except NameError:
|
||||||
next = advance_iterator
|
next = advance_iterator
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
callable = callable
|
||||||
|
except NameError:
|
||||||
|
def callable(obj):
|
||||||
|
return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
|
||||||
|
|
||||||
|
|
||||||
if PY3:
|
if PY3:
|
||||||
def get_unbound_function(unbound):
|
def get_unbound_function(unbound):
|
||||||
return unbound
|
return unbound
|
||||||
|
|
||||||
Iterator = object
|
Iterator = object
|
||||||
|
|
||||||
def callable(obj):
|
|
||||||
return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
|
|
||||||
else:
|
else:
|
||||||
def get_unbound_function(unbound):
|
def get_unbound_function(unbound):
|
||||||
return unbound.im_func
|
return unbound.im_func
|
||||||
|
@ -259,21 +269,27 @@ _add_doc(get_unbound_function,
|
||||||
|
|
||||||
get_method_function = operator.attrgetter(_meth_func)
|
get_method_function = operator.attrgetter(_meth_func)
|
||||||
get_method_self = operator.attrgetter(_meth_self)
|
get_method_self = operator.attrgetter(_meth_self)
|
||||||
|
get_function_closure = operator.attrgetter(_func_closure)
|
||||||
get_function_code = operator.attrgetter(_func_code)
|
get_function_code = operator.attrgetter(_func_code)
|
||||||
get_function_defaults = operator.attrgetter(_func_defaults)
|
get_function_defaults = operator.attrgetter(_func_defaults)
|
||||||
|
get_function_globals = operator.attrgetter(_func_globals)
|
||||||
|
|
||||||
|
|
||||||
def iterkeys(d):
|
def iterkeys(d, **kw):
|
||||||
"""Return an iterator over the keys of a dictionary."""
|
"""Return an iterator over the keys of a dictionary."""
|
||||||
return iter(getattr(d, _iterkeys)())
|
return iter(getattr(d, _iterkeys)(**kw))
|
||||||
|
|
||||||
def itervalues(d):
|
def itervalues(d, **kw):
|
||||||
"""Return an iterator over the values of a dictionary."""
|
"""Return an iterator over the values of a dictionary."""
|
||||||
return iter(getattr(d, _itervalues)())
|
return iter(getattr(d, _itervalues)(**kw))
|
||||||
|
|
||||||
def iteritems(d):
|
def iteritems(d, **kw):
|
||||||
"""Return an iterator over the (key, value) pairs of a dictionary."""
|
"""Return an iterator over the (key, value) pairs of a dictionary."""
|
||||||
return iter(getattr(d, _iteritems)())
|
return iter(getattr(d, _iteritems)(**kw))
|
||||||
|
|
||||||
|
def iterlists(d, **kw):
|
||||||
|
"""Return an iterator over the (key, [values]) pairs of a dictionary."""
|
||||||
|
return iter(getattr(d, _iterlists)(**kw))
|
||||||
|
|
||||||
|
|
||||||
if PY3:
|
if PY3:
|
||||||
|
@ -317,17 +333,17 @@ if PY3:
|
||||||
del builtins
|
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."""
|
||||||
if globs is None:
|
if _globs_ is None:
|
||||||
frame = sys._getframe(1)
|
frame = sys._getframe(1)
|
||||||
globs = frame.f_globals
|
_globs_ = frame.f_globals
|
||||||
if locs is None:
|
if _locs_ is None:
|
||||||
locs = frame.f_locals
|
_locs_ = frame.f_locals
|
||||||
del frame
|
del frame
|
||||||
elif locs is None:
|
elif _locs_ is None:
|
||||||
locs = globs
|
_locs_ = _globs_
|
||||||
exec("""exec code in globs, locs""")
|
exec("""exec _code_ in _globs_, _locs_""")
|
||||||
|
|
||||||
|
|
||||||
exec_("""def reraise(tp, value, tb=None):
|
exec_("""def reraise(tp, value, tb=None):
|
||||||
|
@ -391,12 +407,10 @@ def with_metaclass(meta, base=object):
|
||||||
### Additional customizations for Django ###
|
### Additional customizations for Django ###
|
||||||
|
|
||||||
if PY3:
|
if PY3:
|
||||||
_iterlists = "lists"
|
|
||||||
_assertRaisesRegex = "assertRaisesRegex"
|
_assertRaisesRegex = "assertRaisesRegex"
|
||||||
_assertRegex = "assertRegex"
|
_assertRegex = "assertRegex"
|
||||||
memoryview = memoryview
|
memoryview = memoryview
|
||||||
else:
|
else:
|
||||||
_iterlists = "iterlists"
|
|
||||||
_assertRaisesRegex = "assertRaisesRegexp"
|
_assertRaisesRegex = "assertRaisesRegexp"
|
||||||
_assertRegex = "assertRegexpMatches"
|
_assertRegex = "assertRegexpMatches"
|
||||||
# memoryview and buffer are not stricly equivalent, but should be fine for
|
# memoryview and buffer are not stricly equivalent, but should be fine for
|
||||||
|
@ -404,11 +418,6 @@ else:
|
||||||
memoryview = buffer
|
memoryview = buffer
|
||||||
|
|
||||||
|
|
||||||
def iterlists(d):
|
|
||||||
"""Return an iterator over the values of a MultiValueDict."""
|
|
||||||
return getattr(d, _iterlists)()
|
|
||||||
|
|
||||||
|
|
||||||
def assertRaisesRegex(self, *args, **kwargs):
|
def assertRaisesRegex(self, *args, **kwargs):
|
||||||
return getattr(self, _assertRaisesRegex)(*args, **kwargs)
|
return getattr(self, _assertRaisesRegex)(*args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -391,12 +391,7 @@ function.
|
||||||
Customizations of six
|
Customizations of six
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
The version of six bundled with Django includes one extra function:
|
The version of six bundled with Django includes a few extras.
|
||||||
|
|
||||||
.. function:: iterlists(MultiValueDict)
|
|
||||||
|
|
||||||
Returns an iterator over the lists of values of a ``MultiValueDict``. This
|
|
||||||
replaces ``iterlists()`` on Python 2 and ``lists()`` on Python 3.
|
|
||||||
|
|
||||||
.. function:: assertRaisesRegex(testcase, *args, **kwargs)
|
.. function:: assertRaisesRegex(testcase, *args, **kwargs)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue