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:
|
||||
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 = "type"
|
||||
|
||||
|
@ -20,6 +25,9 @@ if PY2:
|
|||
def iterkeys(d):
|
||||
return d.iterkeys()
|
||||
else:
|
||||
def isclass(klass):
|
||||
return isinstance(klass, type)
|
||||
|
||||
TYPE = "class"
|
||||
|
||||
def exec_(code, locals_, globals_):
|
||||
|
|
|
@ -2,10 +2,9 @@ from __future__ import absolute_import, division, print_function
|
|||
|
||||
import copy
|
||||
import hashlib
|
||||
import inspect
|
||||
import linecache
|
||||
|
||||
from ._compat import exec_, iteritems, iterkeys
|
||||
from ._compat import exec_, iteritems, isclass, iterkeys
|
||||
from . import _config
|
||||
|
||||
|
||||
|
@ -411,7 +410,7 @@ def fields(cl):
|
|||
|
||||
:rtype: tuple of :class:`attr.Attribute`
|
||||
"""
|
||||
if not inspect.isclass(cl):
|
||||
if not isclass(cl):
|
||||
raise TypeError("Passed object must be a class.")
|
||||
attrs = getattr(cl, "__attrs_attrs__", None)
|
||||
if attrs is None:
|
||||
|
|
|
@ -4,8 +4,7 @@ Commonly useful filters for :func:`attr.asdict`.
|
|||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
import inspect
|
||||
|
||||
from ._compat import isclass
|
||||
from ._make import Attribute
|
||||
|
||||
|
||||
|
@ -14,7 +13,7 @@ def _split_what(what):
|
|||
Returns a tuple of `frozenset`s of classes and attributes.
|
||||
"""
|
||||
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)),
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue