Source code for retentioneering.eventstream.helpers.truncate_paths_helper
from __future__ import annotations
from typing import Literal, Optional
from retentioneering.backend.tracker import track
from ..types import EventstreamType
class TruncatePathsHelperMixin:
[docs] @track( # type: ignore
tracking_info={"event_name": "helper"},
scope="truncate_paths",
event_value="combine",
allowed_params=[
"drop_before",
"drop_after",
"occurrence_before",
"occurrence_after",
"shift_before",
"shift_after",
],
)
def truncate_paths(
self,
drop_before: Optional[str] = None,
drop_after: Optional[str] = None,
occurrence_before: Literal["first", "last"] = "first",
occurrence_after: Literal["first", "last"] = "first",
shift_before: int = 0,
shift_after: int = 0,
) -> EventstreamType:
"""
A method of ``Eventstream`` class that truncates each user's path based on the
specified event(s) and selected parameters.
Parameters
----------
See parameters description
:py:class:`.TruncatePaths`
Returns
-------
Eventstream
Input ``eventstream`` with truncated paths.
"""
# avoid circular import
from retentioneering.data_processors_lib import (
TruncatePaths,
TruncatePathsParams,
)
from retentioneering.preprocessing_graph import PreprocessingGraph
from retentioneering.preprocessing_graph.nodes import EventsNode
p = PreprocessingGraph(source_stream=self) # type: ignore
params = {
"drop_before": drop_before,
"drop_after": drop_after,
"occurrence_before": occurrence_before,
"occurrence_after": occurrence_after,
"shift_before": shift_before,
"shift_after": shift_after,
}
node = EventsNode(processor=TruncatePaths(params=TruncatePathsParams(**params))) # type: ignore
p.add_node(node=node, parents=[p.root])
result = p.combine(node)
del p
return result