def get_page_df()

in src/dfcx_scrapi/tools/search_util.py [0:0]


    def get_page_df(self, flow_df: pd.DataFrame):
        """Gets pages dataframe for an agent.

        Args:
          flow_df: flow dataframe from get_flow_df().

        Returns:
          page dataframe with columns:
            flow_name,
            page_name,
            routes,
            event_handlers,
            route_groups,
            parameters,
            entry_fulfillment
        """
        page_df = (
            flow_df[["flow_name", "flow_id"]]
            .assign(page_obj=flow_df.flow_id.apply(self.pages.list_pages))
            .explode("page_obj", ignore_index=True)
        )

        # Handle edge case where Flow exists without Pages
        page_df = page_df[~page_df.page_obj.isna()]

        page_df = page_df.assign(
            page_name=lambda df: df.page_obj.apply(
                attrgetter("display_name")
            ),
            entry_fulfillment=lambda df: df.page_obj.apply(
                attrgetter("entry_fulfillment")
            ),
            parameters=lambda df: df.page_obj.apply(
                attrgetter("form.parameters")
            ),
            route_groups=lambda df: df.page_obj.apply(
                attrgetter("transition_route_groups")
            ),
            routes=lambda df: df.page_obj.apply(
                attrgetter("transition_routes")
            ),
            event_handlers=lambda df: df.page_obj.apply(
                attrgetter("event_handlers")
            ))

        page_df = page_df.drop(columns="page_obj")

        # add in the start pages (flow objects)
        page_df = pd.concat(
            [page_df, flow_df.assign(page_name="START_PAGE")], ignore_index=True
        ).drop(columns="flow_id")

        return page_df