mirror of https://github.com/mahmoud/boltons.git
added the facilities necessary to automatically document how many modules, types, and functions there are in boltons.
This commit is contained in:
parent
9208ec53e0
commit
9145a4fb92
|
@ -4,11 +4,41 @@ utilities on top of Python's first-class function
|
||||||
support. ``funcutils`` generally stays in the same vein, adding to and
|
support. ``funcutils`` generally stays in the same vein, adding to and
|
||||||
correcting Python's standard metaprogramming facilities.
|
correcting Python's standard metaprogramming facilities.
|
||||||
"""
|
"""
|
||||||
|
import sys
|
||||||
import functools
|
import functools
|
||||||
from types import MethodType, FunctionType
|
from types import MethodType, FunctionType
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
|
|
||||||
|
def get_module_callables(mod, ignore=None):
|
||||||
|
"""Returns two maps of (*types*, *funcs*) from *mod*, optionally
|
||||||
|
ignoring based on the :class:`bool` return value of the *ignore*
|
||||||
|
callable. *mod* can be a string name of a module in
|
||||||
|
:data:`sys.modules` or the module instance itself.
|
||||||
|
"""
|
||||||
|
if isinstance(mod, basestring):
|
||||||
|
mod = sys.modules[mod]
|
||||||
|
types, funcs = {}, {}
|
||||||
|
for attr_name in dir(mod):
|
||||||
|
if ignore and ignore(attr_name):
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
attr = getattr(mod, attr_name)
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
attr_mod_name = attr.__module__
|
||||||
|
except AttributeError:
|
||||||
|
continue
|
||||||
|
if attr_mod_name != mod.__name__:
|
||||||
|
continue
|
||||||
|
if isinstance(attr, type):
|
||||||
|
types[attr_name] = attr
|
||||||
|
elif callable(attr):
|
||||||
|
funcs[attr_name] = attr
|
||||||
|
return types, funcs
|
||||||
|
|
||||||
|
|
||||||
def mro_items(type_obj):
|
def mro_items(type_obj):
|
||||||
"""Takes a type and returns an iterator over all class variables
|
"""Takes a type and returns an iterator over all class variables
|
||||||
throughout the type hierarchy (respecting the MRO).
|
throughout the type hierarchy (respecting the MRO).
|
||||||
|
|
33
docs/conf.py
33
docs/conf.py
|
@ -16,11 +16,42 @@ import os
|
||||||
import sys
|
import sys
|
||||||
import sphinx
|
import sphinx
|
||||||
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
CUR_PATH = os.path.dirname(os.path.abspath(__file__))
|
CUR_PATH = os.path.dirname(os.path.abspath(__file__))
|
||||||
sys.path.insert(0, os.path.abspath(CUR_PATH + '/../'))
|
PROJECT_PATH = os.path.abspath(CUR_PATH + '/../')
|
||||||
|
PACKAGE_PATH = os.path.abspath(CUR_PATH + '/../boltons/')
|
||||||
|
sys.path.insert(0, PROJECT_PATH)
|
||||||
|
sys.path.insert(0, PACKAGE_PATH)
|
||||||
|
|
||||||
|
|
||||||
|
def get_mod_stats():
|
||||||
|
import pkgutil
|
||||||
|
from boltons.funcutils import get_module_defs
|
||||||
|
|
||||||
|
mod_count = 0
|
||||||
|
tot_type_count = 0
|
||||||
|
tot_func_count = 0
|
||||||
|
ignore = lambda attr_name: attr_name.startswith('_')
|
||||||
|
for _, mod_name, _ in pkgutil.iter_modules([PACKAGE_PATH]):
|
||||||
|
if not mod_name.endswith('utils'):
|
||||||
|
continue
|
||||||
|
mod = __import__(mod_name)
|
||||||
|
types, funcs, others = get_module_defs(mod, ignore=ignore)
|
||||||
|
if not len(types) and not len(funcs):
|
||||||
|
continue
|
||||||
|
mod_count += 1
|
||||||
|
tot_type_count += len(types)
|
||||||
|
tot_func_count += len(funcs)
|
||||||
|
|
||||||
|
ret = (mod_count, tot_type_count, tot_func_count)
|
||||||
|
print ('==== %s modules ==== %s types ==== %s funcs ====' % ret)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
get_mod_stats()
|
||||||
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue