meta: ability to specify capabilities for stages

Add new stage metadata `CAPABILITIES` where stages can request
additional capabilities that are not in the default set.
Currently this is not used by any stage since the default set
contains the sum of all needed capabilities.
This commit is contained in:
Christian Kellner 2022-04-22 17:40:40 +02:00 committed by Tom Gundersen
parent bdcc9ea218
commit d14e5f3ee8
2 changed files with 15 additions and 3 deletions

View file

@ -296,6 +296,7 @@ class ModuleInfo:
self.info = info["info"]
self.desc = info["desc"]
self.opts = info["schema"]
self.caps = info["caps"]
def _load_opts(self, version, fallback=None):
raw = self.opts[version]
@ -388,9 +389,16 @@ class ModuleInfo:
detail = fullname, lineno, e.colno, line
raise SyntaxError(msg, detail) from None
@classmethod
def _parse_caps(cls, _klass, _name, node):
if not node:
return set()
return {e.s for e in node.value.elts}
@classmethod
def load(cls, root, klass, name) -> Optional["ModuleInfo"]:
names = ["SCHEMA", "SCHEMA_2"]
names = ["SCHEMA", "SCHEMA_2", "CAPABILITIES"]
def filter_type(lst, target):
return [x for x in lst if isinstance(x, target)]
@ -425,13 +433,17 @@ class ModuleInfo:
def parse_schema(node):
return cls._parse_schema(klass, name, node)
def parse_caps(node):
return cls._parse_caps(klass, name, node)
info = {
'schema': {
"1": parse_schema(values.get("SCHEMA")),
"2": parse_schema(values.get("SCHEMA_2")),
},
'desc': doclist[0],
'info': "\n".join(doclist[1:])
'info': "\n".join(doclist[1:]),
'caps': parse_caps(values.get("CAPABILITIES"))
}
return cls(klass, name, path, info)