Source code for sycamore.functions.elements
import functools
from typing import Any, Callable, Optional
from sycamore.data import Document, Element
[docs]
def reorder_elements(
document: Document,
*,
comparator: Optional[Callable[[Element, Element], int]] = None,
key: Optional[Callable[[Element], Any]] = None,
) -> Document:
"""Reorders the elements. Must supply comparator or key.
Args:
document: Document for which the elements need to be re-ordered
comparator: A comparator function
key: A key as per sorted()
Returns:
Document with elements re-ordered
"""
if key:
assert not comparator, "passed both comparator and key"
else:
assert comparator, "passed neither comparator nor key"
key = functools.cmp_to_key(comparator)
elements = document.elements
elements.sort(key=key)
document.elements = elements
return document
[docs]
def filter_elements(document: Document, filter_function: Callable[[Element], bool]) -> list[Element]:
"""Filters the elements.
Args:
document: Document for which the elements need to be filtered
filter_function: A filter function
Returns:
List of filtered elements
"""
elements = document.elements
return list(filter(filter_function, elements))