Skip to content

spreadsheet_datasource

freecad.datamanager_wb.spreadsheets.spreadsheet_datasource

Spreadsheet-backed TabDataSource for the Aliases tab.

Adapts spreadsheet alias queries/mutations to the generic TabController.

SpreadsheetDataSource(*, ctx=None)

Adapter that exposes spreadsheet aliases through the TabDataSource protocol.

Source code in freecad/datamanager_wb/spreadsheets/spreadsheet_datasource.py
def __init__(self, *, ctx: FreeCadContext | None = None) -> None:
    self._ctx = ctx

get_child_refs(selected_parents)

Return alias refs for the selected spreadsheets.

Source code in freecad/datamanager_wb/spreadsheets/spreadsheet_datasource.py
def get_child_refs(self, selected_parents: list[str]) -> list[ParentChildRef]:
    """Return alias refs for the selected spreadsheets."""
    items: list[ParentChildRef] = []
    for sheet_name in selected_parents:
        for alias_name in getSpreadsheetAliasNames(sheet_name, ctx=self._ctx):
            items.append(ParentChildRef(parent=sheet_name, child=alias_name))
    items.sort(key=lambda ref: ref.text)
    return items

get_expression_items(selected_children)

Return expression items referencing the selected aliases.

Source code in freecad/datamanager_wb/spreadsheets/spreadsheet_datasource.py
def get_expression_items(
    self, selected_children: list[ParentChildRef] | list[str]
) -> tuple[list[ExpressionItem], dict[str, int]]:
    """Return expression items referencing the selected aliases."""
    counts: dict[str, int] = {}
    expression_items: list[ExpressionItem] = []
    for ref in _normalize_alias_refs(selected_children):
        refs = getSpreadsheetAliasReferences(ref.parent, ref.child, ctx=self._ctx)
        counts[ref.text] = len(refs)
        for lhs, rhs in refs.items():
            expression_items.append(
                _to_expression_item(parent=ref.parent, alias=ref.child, lhs=lhs, rhs=rhs)
            )

    expression_items.sort(key=lambda item: item.display_text)
    return expression_items, counts

get_expression_reference_counts(selected_children)

Return expression reference counts for the selected aliases.

Source code in freecad/datamanager_wb/spreadsheets/spreadsheet_datasource.py
def get_expression_reference_counts(
    self, selected_children: list[ParentChildRef] | list[str]
) -> dict[str, int]:
    """Return expression reference counts for the selected aliases."""
    counts: dict[str, int] = {}
    for ref in _normalize_alias_refs(selected_children):
        refs = getSpreadsheetAliasReferences(ref.parent, ref.child, ctx=self._ctx)
        counts[ref.text] = len(refs)
    return counts

get_sorted_parents(*, exclude_copy_on_change=False)

Return sorted spreadsheet names.

Source code in freecad/datamanager_wb/spreadsheets/spreadsheet_datasource.py
def get_sorted_parents(self, *, exclude_copy_on_change: bool = False) -> list[str]:
    """Return sorted spreadsheet names."""
    return sorted(getSpreadsheets(exclude_copy_on_change=exclude_copy_on_change, ctx=self._ctx))

remove_unused_children(selected_children)

Remove selected aliases that have no expression references.

Source code in freecad/datamanager_wb/spreadsheets/spreadsheet_datasource.py
def remove_unused_children(
    self, selected_children: list[ParentChildRef] | list[str]
) -> RemoveUnusedResult:
    """Remove selected aliases that have no expression references."""
    removed: list[str] = []
    still_used: list[str] = []
    failed: list[str] = []

    for ref in _normalize_alias_refs(selected_children):
        refs = getSpreadsheetAliasReferences(ref.parent, ref.child, ctx=self._ctx)
        if refs:
            still_used.append(ref.text)
            continue

        ok = removeSpreadsheetAlias(ref.parent, ref.child, ctx=self._ctx)
        if ok:
            removed.append(ref.text)
        else:
            failed.append(ref.text)

    return RemoveUnusedResult(removed=removed, still_used=still_used, failed=failed)