inspect for classes and modules

This commit is contained in:
Martin A. Brown 2016-02-25 09:51:17 -08:00
parent 03881d20de
commit eb4e3d8c38
1 changed files with 28 additions and 13 deletions

View File

@ -6,22 +6,36 @@ from __future__ import absolute_import, division, print_function
import os import os
import inspect import inspect
from .utils import logger, makefh from tldp.utils import logger, makefh
from . import doctypes
import tldp.doctypes
def listDoctypes(): def getDoctypeMembers(membertype):
'''returns a list of tldp.doctypes Python classes '''returns a list of tldp.doctypes; convenience function'''
found = list()
for name, member in inspect.getmembers(tldp.doctypes, membertype):
logger.debug("Located %s %s (%r).", membertype.__name__, name, member)
found.append(member)
return found
def getDoctypeModules():
'''returns a list of the modules known in tldp.doctypes
This is the canonical list of doctypes which are recognized and capable of This is the canonical list of doctypes which are recognized and capable of
being processed into outputs. See tldp.doctypes for more information. being processed into outputs. See tldp.doctypes for more information.
''' '''
kdt = list() return getDoctypeMembers(inspect.ismodule)
for name, member in inspect.getmembers(doctypes, inspect.isclass):
logger.debug("Located class %s (%r).", name, member)
kdt.append(member) def getDoctypeClasses():
logger.debug("Capable of handling %s document classes.", len(kdt)) '''returns a list of the classes known in tldp.doctypes
return kdt
This is the canonical list of doctypes which are recognized and capable of
being processed into outputs. See tldp.doctypes for more information.
'''
return getDoctypeMembers(inspect.isclass)
def guess(thing): def guess(thing):
@ -56,7 +70,7 @@ def guess(thing):
logger.debug("%s no file extension, skipping %s.", stem, ext) logger.debug("%s no file extension, skipping %s.", stem, ext)
return None return None
possible = [t for t in knowndoctypes if ext in t.extensions] possible = [t for t in knowndoctypeclasses if ext in t.extensions]
logger.debug("Possible: %r", possible) logger.debug("Possible: %r", possible)
if not possible: if not possible:
logger.debug("%s unknown extension %s.", stem, ext) logger.debug("%s unknown extension %s.", stem, ext)
@ -100,9 +114,10 @@ def guess(thing):
return doctype return doctype
knowndoctypes = listDoctypes() knowndoctypemodules = getDoctypeModules()
knowndoctypeclasses = getDoctypeClasses()
knownextensions = set() knownextensions = set()
for x in knowndoctypes: for x in knowndoctypeclasses:
knownextensions.update(x.extensions) knownextensions.update(x.extensions)
# #