Skip to content

capturegraph.data.containers.utilities.filter #

filter - Filter List Elements by Predicate or Type#

Filter elements from a List based on a predicate function or type.

Example
from capturegraph.data import filter, CaptureTarget, ExifPath

target = CaptureTarget(Path("./MyCapture"))

# Filter by predicate
high_rated = filter(sessions, lambda s: s.rating > 3)

# Filter by type (no predicate = filter for non-Missing values)
images = filter(all_values, ExifPath)

filter(data, predicate=None) #

Filter elements by a predicate function or type.

Parameters:

Name Type Description Default
data List[T]

The List to filter.

required
predicate Callable[[T], bool] | type | None

One of: - A callable that returns True for elements to keep - A type to filter for (keeps only instances of that type) - None to filter out MissingType values (equivalent to compact)

None

Returns:

Type Description
List[T]

List containing only elements that match the predicate/type.

Example
# Filter by predicate function
filter(sessions, lambda s: s.rating > 3)
# List([session1, session4, ...])

# Filter by type
filter(all_values, ExifPath)
# List([ExifPath(...), ExifPath(...), ...])

# Filter out Missing values (predicate=None)
filter(List([1, Missing, 2, Missing, 3]))
# List([1, 2, 3])
Source code in capturegraph-lib/capturegraph/data/containers/utilities/filter.py
def filter[T](
    data: List[T], predicate: Callable[[T], bool] | type | None = None
) -> List[T]:
    """Filter elements by a predicate function or type.

    Args:
        data: The List to filter.
        predicate: One of:
            - A callable that returns True for elements to keep
            - A type to filter for (keeps only instances of that type)
            - None to filter out MissingType values (equivalent to compact)

    Returns:
        List containing only elements that match the predicate/type.

    Example:
        ```python
        # Filter by predicate function
        filter(sessions, lambda s: s.rating > 3)
        # List([session1, session4, ...])

        # Filter by type
        filter(all_values, ExifPath)
        # List([ExifPath(...), ExifPath(...), ...])

        # Filter out Missing values (predicate=None)
        filter(List([1, Missing, 2, Missing, 3]))
        # List([1, 2, 3])
        ```
    """
    if predicate is None:
        # Default: filter out MissingType values
        return List([item for item in data if not is_missing(item)])

    if isinstance(predicate, type):
        # Filter by type
        target_type = predicate
        return List([item for item in data if isinstance(item, target_type)])

    # Filter by predicate function
    return List([item for item in data if predicate(item)])