ENH: bundle inspect.isclass to avoid paying the cost of inspect import.
This commit is contained in:
parent
871bb64cc0
commit
dbaba50e68
|
@ -8,6 +8,11 @@ PY2 = sys.version_info[0] == 2
|
||||||
|
|
||||||
|
|
||||||
if PY2:
|
if PY2:
|
||||||
|
import types
|
||||||
|
|
||||||
|
def isclass(klass):
|
||||||
|
return isinstance(klass, (type, types.ClassType))
|
||||||
|
|
||||||
# TYPE is used in exceptions, repr(int) is different on Python 2 and 3.
|
# TYPE is used in exceptions, repr(int) is different on Python 2 and 3.
|
||||||
TYPE = "type"
|
TYPE = "type"
|
||||||
|
|
||||||
|
@ -20,6 +25,9 @@ if PY2:
|
||||||
def iterkeys(d):
|
def iterkeys(d):
|
||||||
return d.iterkeys()
|
return d.iterkeys()
|
||||||
else:
|
else:
|
||||||
|
def isclass(klass):
|
||||||
|
return isinstance(klass, type)
|
||||||
|
|
||||||
TYPE = "class"
|
TYPE = "class"
|
||||||
|
|
||||||
def exec_(code, locals_, globals_):
|
def exec_(code, locals_, globals_):
|
||||||
|
|
|
@ -2,10 +2,9 @@ from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
import hashlib
|
import hashlib
|
||||||
import inspect
|
|
||||||
import linecache
|
import linecache
|
||||||
|
|
||||||
from ._compat import exec_, iteritems, iterkeys
|
from ._compat import exec_, iteritems, isclass, iterkeys
|
||||||
from . import _config
|
from . import _config
|
||||||
|
|
||||||
|
|
||||||
|
@ -411,7 +410,7 @@ def fields(cl):
|
||||||
|
|
||||||
:rtype: tuple of :class:`attr.Attribute`
|
:rtype: tuple of :class:`attr.Attribute`
|
||||||
"""
|
"""
|
||||||
if not inspect.isclass(cl):
|
if not isclass(cl):
|
||||||
raise TypeError("Passed object must be a class.")
|
raise TypeError("Passed object must be a class.")
|
||||||
attrs = getattr(cl, "__attrs_attrs__", None)
|
attrs = getattr(cl, "__attrs_attrs__", None)
|
||||||
if attrs is None:
|
if attrs is None:
|
||||||
|
|
|
@ -4,8 +4,7 @@ Commonly useful filters for :func:`attr.asdict`.
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import inspect
|
from ._compat import isclass
|
||||||
|
|
||||||
from ._make import Attribute
|
from ._make import Attribute
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +13,7 @@ def _split_what(what):
|
||||||
Returns a tuple of `frozenset`s of classes and attributes.
|
Returns a tuple of `frozenset`s of classes and attributes.
|
||||||
"""
|
"""
|
||||||
return (
|
return (
|
||||||
frozenset(cl for cl in what if inspect.isclass(cl)),
|
frozenset(cl for cl in what if isclass(cl)),
|
||||||
frozenset(cl for cl in what if isinstance(cl, Attribute)),
|
frozenset(cl for cl in what if isinstance(cl, Attribute)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue