Skip to content
Snippets Groups Projects

Model factory

Merged Tor-Einar Skog requested to merge model_factory into main
3 files
+ 72
0
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 54
0
import importlib
import pkgutil
from vipscore_common.vips_model import VIPSModel
_models = None
_packages = None
def discover_models():
"""
Searches the current Python path for packages that contains "vips" in the package or module name
"""
models = {}
global _packages
_packages = []
for package in pkgutil.walk_packages():
# Package or module has to contain "vips",
# otherwise it will not be indexed
if "vips" in package.name:
_packages.append(package)
print(package.name)
try:
importlib.import_module(package.name)
except:
pass
for vipsmodel_subclass in VIPSModel.__subclasses__():
# We must have an instance to reach the property
vipsmodel_instance = vipsmodel_subclass()
if models.get(vipsmodel_instance.model_id) is None:
models[vipsmodel_instance.model_id] = vipsmodel_subclass
else:
possible_duplicate = models.get(vipsmodel_instance.model_id)
raise ValueError("ERROR when trying to index VIPS model %s: VIPS model %s has the same ID (%s). Please check your model installations" % (vipsmodel_subclass, possible_duplicate, vipsmodel_instance.model_id))
return models
def get_model_instance(model_id):
global _models
if _models is None:
print("Indexing models")
_models = discover_models()
return _models.get(model_id)()
def get_vips_model_packages():
global _packages
if _packages is None:
discover_models()
return _packages
# USAGE EXAMPLE. REMOVE when U start using the module from elsewhere
model = get_model_instance("REFERENCEM")
print(model.get_model_name())
print(get_vips_model_packages())
Loading