Added parsers and Evaluators auto discovery

This commit is contained in:
2019-11-15 16:36:38 +01:00
parent 9e10e77737
commit 2fbda533f1
3 changed files with 109 additions and 14 deletions
+32
View File
@@ -1,4 +1,6 @@
import importlib
import inspect
import pkgutil
import sys
@@ -38,6 +40,7 @@ def get_class(qname):
m = getattr(m, comp)
return m
def get_module(qname):
"""
Loads a module from its full qualified name
@@ -77,6 +80,11 @@ def get_full_qualified_name(obj):
def get_classes(module_name):
"""
Gets all classes, for a given module_name
:param module_name: name of the module
:return:
"""
mod = get_module(module_name)
for name in dir(mod):
obj = getattr(mod, name)
@@ -84,6 +92,30 @@ def get_classes(module_name):
yield obj
def get_classes_from_package(package_name):
"""
Gets all classes, for a given package
:param package_name: name of the package
:return:
"""
pkg = __import__(package_name)
prefix = pkg.__name__ + "."
for importer, modname, ispkg in pkgutil.iter_modules(pkg.__path__, prefix):
for c in get_classes(modname):
yield c
def get_sub_classes(package_name, base_class_name):
pkg = __import__(package_name)
prefix = pkg.__name__ + "."
for (module_loader, name, ispkg) in pkgutil.iter_modules(pkg.__path__, prefix):
importlib.import_module(name)
base_class = get_class(base_class_name)
return base_class.__subclasses__()
def remove_from_list(lst, to_remove):
"""
Removes elements from a list if they exist