diff --git a/tools/python/jwutils/misc.py b/tools/python/jwutils/misc.py index 8800211..cf6d19f 100644 --- a/tools/python/jwutils/misc.py +++ b/tools/python/jwutils/misc.py @@ -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)