From 6d6c48e6b896d9e2037ca09bae66d54f5be91240 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sun, 5 Apr 2020 16:53:12 +0200 Subject: [PATCH] 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 --- tools/python/jwutils/misc.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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)