def get_transformation(location: str) -> Transformation:
# TODO allow use of contributed transformations
if ':' in location:
module_path, transformation_name = location.split(':')
else:
module_path, transformation_name = location, None
if not module_path.endswith('.py'):
module_path += '.py'
module_path = (Path.cwd() / module_path).resolve()
dbg(f'Transformation module path: {module_path}')
dbg('Loading module.')
module_spec = importlib.util.spec_from_file_location('transformation_file', module_path)
_module = importlib.util.module_from_spec(module_spec)
module_spec.loader.exec_module(_module)
dbg('Inspecting module.')
transformation_objects = {k: v for k, v in vars(_module).items()
if isinstance(v, Transformation)}
if transformation_name is None:
if 'main' in transformation_objects:
dbg("Selected symbol 'main' from module as transformation.")
return transformation_objects['main']
else:
name, instance = next((k, v) for k, v in transformation_objects.items())
dbg(f"Selected symbol '{name}' from module as transformation.")
return instance
for instance in transformation_objects.values():
if instance.name == transformation_name:
dbg(f"Selected transformation named '{transformation_name}' from module "
f"as transformation.")
return instance
dbg(f"Selected symbol '{transformation_name}' from module as transformation.")
return transformation_objects[transformation_name]
评论列表
文章目录