Skip to content

filters

Functions and registry for filter functionality.

EX_ITEMS = 'show.exchange.items.filter' module-attribute ๐Ÿ”—

Show ExchangeItems wrapped in [E1,...] and separated by ',' - filter in Capella.

FEX_EX_ITEMS = 'show.functional.exchanges.exchange.items.filter' module-attribute ๐Ÿ”—

Show the name of FunctionalExchange and its ExchangeItems wrapped in [E1,...] and separated by ',' - filter in Capella.

FEX_OR_EX_ITEMS = 'capellambse_context_diagrams-show.functional.exchanges.or.exchange.items.filter' module-attribute ๐Ÿ”—

Show either FunctionalExchange name or its ExchangeItems wrapped in [E1,...] and separated by ',' - Custom filter, not available in Capella.

FILTER_LABEL_ADJUSTERS: dict[str, cabc.Callable[[common.GenericElement, str | None], str]] = {EX_ITEMS: lambda obj, _: exchange_items(obj), FEX_EX_ITEMS: exchange_name_and_items, FEX_OR_EX_ITEMS: lambda obj, label: exchange_items(obj) if getattr(obj, 'exchange_items', '') else label or obj.name, NO_UUID: uuid_filter, SYSTEM_EX_RELABEL: relabel_system_exchange} module-attribute ๐Ÿ”—

Label adjuster registry.

LABEL_CONVERSION: t.Final[dict[str, str]] = {'AbstractCapabilityExtend': 'extends', 'AbstractCapabilityGeneralization': 'specializes', 'AbstractCapabilityInclude': 'includes', 'CapabilityExploitation': 'exploits', 'CapabilityInvolvement': 'involves', 'EntityOperationalCapabilityInvolvement': 'involves', 'MissionInvolvement': 'involves'} module-attribute ๐Ÿ”—

A map that for relabelling specific ModelObject types.

NO_UUID = 'capellambse_context_diagrams-hide.uuids.filter' module-attribute ๐Ÿ”—

Filter out UUIDs from label text.

RENDER_ADJUSTERS: dict[str, cabc.Callable[[bool, common.GenericElement, dict[str, t.Any]], None]] = {'sorted_exchangedItems': sort_exchange_items_label} module-attribute ๐Ÿ”—

Available custom render parameter-solvers registry.

SYSTEM_EX_RELABEL = 'capellambse_context_diagrams-relabel.system.analysis.exchange' module-attribute ๐Ÿ”—

Relabel exchanges from the SystemAnalysis layer. E.g. ยซ i ยป is converted to includes or involves, based on the type.

UUID_PTRN = re.compile('\\s*\\([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\\)') module-attribute ๐Ÿ”—

Regular expression pattern for UUIDs of ModelObjects.

exchange_items(obj) ๐Ÿ”—

Return obj's ExchangeItems wrapped in [E1,...] and separated by ','.

Source code in capellambse_context_diagrams/filters.py
53
54
55
56
57
58
59
60
def exchange_items(obj: common.GenericElement) -> str:
    """Return `obj`'s `ExchangeItem`s wrapped in [E1,...] and separated
    by ','.
    """
    stringifier = importlib.import_module(
        "capellambse.aird._filters.global"
    )._stringify_exchange_items
    return stringifier(obj, obj._model._loader)

exchange_name_and_items(obj, label=None) ๐Ÿ”—

Return obj's name and ExchangeItems if there are any.

Source code in capellambse_context_diagrams/filters.py
63
64
65
66
67
68
69
70
def exchange_name_and_items(
    obj: common.GenericElement, label: str | None = None
) -> str:
    """Return `obj`'s name and `ExchangeItem`s if there are any."""
    label = label or obj.name
    if ex_items := exchange_items(obj):
        label += " " + ex_items
    return label

relabel_system_exchange(obj, label) ๐Ÿ”—

Return converted label from obj, a system exchanges.

Source code in capellambse_context_diagrams/filters.py
80
81
82
83
84
85
86
87
def relabel_system_exchange(
    obj: common.GenericElement, label: str | None
) -> str:
    """Return converted label from obj, a system exchanges."""
    label_map = LABEL_CONVERSION
    if patch := label_map.get(type(obj).__name__):
        return f"ยซ {patch} ยป"
    return label or obj.name

sort_exchange_items_label(value, exchange, adjustments) ๐Ÿ”—

Sort the exchange items in the exchange label if value is true.

Source code in capellambse_context_diagrams/filters.py
106
107
108
109
110
111
112
113
114
115
116
117
def sort_exchange_items_label(
    value: bool,
    exchange: common.GenericElement,
    adjustments: dict[str, t.Any],
) -> None:
    """Sort the exchange items in the exchange label if value is true."""
    global_filters = importlib.import_module(
        "capellambse.aird._filters.global"
    )
    adjustments["labels_text"] = global_filters._stringify_exchange_items(
        exchange, exchange._model._loader, value
    )

uuid_filter(obj, label=None) ๐Ÿ”—

Return obj's name or obj if string w/o UUIDs in it.

Source code in capellambse_context_diagrams/filters.py
73
74
75
76
77
def uuid_filter(obj: common.GenericElement, label: str | None = None) -> str:
    """Return `obj`'s name or `obj` if string w/o UUIDs in it."""
    filtered_label = label if label is not None else obj.name
    assert isinstance(filtered_label, str)
    return UUID_PTRN.sub("", filtered_label)