meta: add method to list modules of a given class

New Index.list_modules_for_class method that will list the names
of all the modules of a certain class, like 'Stage' or 'Assembler'.
This commit is contained in:
Christian Kellner 2020-05-28 16:12:18 +02:00 committed by David Rheinsberg
parent 2d5ec8edad
commit dd00c4f478

View file

@ -25,7 +25,7 @@ import copy
import os import os
import json import json
from collections import deque from collections import deque
from typing import Dict, Iterable, Optional from typing import Dict, Iterable, List, Optional
import jsonschema import jsonschema
@ -365,6 +365,18 @@ class Index:
self._module_info = {} self._module_info = {}
self._schemata = {} self._schemata = {}
def list_modules_for_class(self, klass: str) -> List[str]:
"""List all available modules for the given `klass`"""
module_path = ModuleInfo.module_class_to_directory(klass)
if not module_path:
raise ValueError(f"Unsupported nodule class: {klass}")
path = os.path.join(self.path, module_path)
modules = filter(lambda f: os.path.isfile(f"{path}/{f}"),
os.listdir(path))
return list(modules)
def get_module_info(self, klass, name) -> Optional[ModuleInfo]: def get_module_info(self, klass, name) -> Optional[ModuleInfo]:
"""Obtain `ModuleInfo` for a given stage or assembler""" """Obtain `ModuleInfo` for a given stage or assembler"""