jwutils.misc: Add get_derived_classes()

get_derived_classes(mod, baseclass) returns a list of class
definitions from a module which are subclasses of baseclass.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2020-04-05 16:53:12 +02:00
commit 6d6c48e6b8

View file

@ -1,6 +1,8 @@
import os, errno
import atexit
import tempfile
import inspect
from jwutils import log
_tmpfiles = set()
@ -46,4 +48,18 @@ def object_builtin_name(o, full=True): # export
return o.__class__.__name__ # Avoid reporting __builtin__
return module + '.' + o.__class__.__name__
def get_derived_classes(mod, base): # export
members = inspect.getmembers(mod, inspect.isclass)
r = []
for name, c in members:
log.slog(log.DEBUG, "found ", name)
if inspect.isabstract(c):
log.slog(log.DEBUG, " is abstract")
continue
if not base in inspect.getmro(c):
log.slog(log.DEBUG, " is not derived from", base, "only", inspect.getmro(c))
continue
r.append(c)
return r
atexit.register(_cleanup)