Source code for ewoksserver.app.routes.workflows.descriptions
from typing import Iterator
from ...backends import json_backend
from ...config import EwoksSettings
from . import backend
_WORKFLOW_KEYWORDS = (
"id",
"label",
"category",
"keywords",
"input_schema",
"ui_schema",
)
[docs]
def workflow_descriptions(
settings: EwoksSettings,
root: json_backend.ResourceUrlType,
keywords: dict | None = None,
) -> Iterator[dict]:
for description in backend.iter_workflow_graphs(settings, root):
if not _include_resource(description.get("keywords", dict()), keywords):
continue
yield {
key: value
for key, value in description.items()
if key in _WORKFLOW_KEYWORDS
}
def _include_resource(res_keywords: dict, keywords: dict | None = None) -> bool:
if keywords is None:
return True
return all(res_keywords.get(key) == value for key, value in keywords.items())