def get_sibling_attrs()

in identity-resolution/notebooks/identity-graph/nepytune/usecase/user_summary.py [0:0]


def get_sibling_attrs(g, transient_id):
    """
    Given transient id, get summary of information we have about it or its sibling nodes.

    We gather:
        * node attributes
        * IP / location information
        * IAB categories of visited websites
    """
    return (
        g.V(transient_id)
            .choose(
                in_("has_identity"),  # check if this transient id has persistent id
                in_("has_identity").
                    project(
                        "identity_group_id", "persistent_id", "attributes", "ip_location", "iab_categories"
                    ).by(in_("member").values("igid"))
                    .by(values("pid"))
                    .by(
                        out("has_identity").valueMap().unfold()
                        .group()
                        .by(Column.keys)
                        .by(select(Column.values).unfold().dedup().fold())
                    )
                    .by(
                        out("has_identity")
                        .out("uses").dedup().valueMap().fold()
                    )
                    .by(
                        out("has_identity")
                        .out("visited")
                        .in_("links_to")
                        .values("categoryCode").dedup().fold()
                    )
                , project(
                    "identity_group_id", "persistent_id", "attributes", "ip_location", "iab_categories"
                ).by(constant(""))
                .by(constant(""))
                .by(
                    valueMap().unfold()
                    .group()
                    .by(Column.keys)
                    .by(select(Column.values).unfold().dedup().fold())
                )
                .by(
                    out("uses").dedup().valueMap().fold()
                )
                .by(
                    out("visited")
                    .in_("links_to")
                    .values("categoryCode").dedup().fold()
                )
            )
        )