30 lines
917 B
Python
30 lines
917 B
Python
|
import importlib.util
|
||
|
from .base_model import BaseModel
|
||
|
from ..utils.tools import get_class
|
||
|
|
||
|
|
||
|
def get_model(name):
|
||
|
import_paths = [
|
||
|
name,
|
||
|
f"{__name__}.{name}",
|
||
|
f"{__name__}.extractors.{name}", # backward compatibility
|
||
|
f"{__name__}.matchers.{name}", # backward compatibility
|
||
|
]
|
||
|
for path in import_paths:
|
||
|
try:
|
||
|
spec = importlib.util.find_spec(path)
|
||
|
except ModuleNotFoundError:
|
||
|
spec = None
|
||
|
if spec is not None:
|
||
|
try:
|
||
|
return get_class(path, BaseModel)
|
||
|
except AssertionError:
|
||
|
mod = __import__(path, fromlist=[""])
|
||
|
try:
|
||
|
return mod.__main_model__
|
||
|
except AttributeError as exc:
|
||
|
print(exc)
|
||
|
continue
|
||
|
|
||
|
raise RuntimeError(f'Model {name} not found in any of [{" ".join(import_paths)}]')
|