def update_rel_by_cypher(st_node, end_node, rel_type, attribute_dict):
    c_string = "START start_node=node:node_index(uid='%s'),end_node=node:node_index(uid='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % (
        st_node, end_node, rel_type)
    result = graph.run(c_string)
    for item in result:
        rel = item[0]
    print type(rel)
    c_delete_string = "START start_node=node:node_index(uid='%s'),end_node=node:node_index(uid='%s') MATCH (start_node)-[r:%s]->(end_node) RETURN r" % (
        st_node, end_node, rel_type)
    graph.run(c_delete_string)
    for k, v in attribute_dict.iteritems():
        rel[k] = v
    graph.create(rel)
def create_tag(tag_id, attribute_dict=dict()):
    Index = ManualIndexManager(graph)  # manage index
    index_name = "tag_index"
    tag_index = Index.get_or_create_index(Node, index_name)
    exist = tag_index.get("tag", tag_id)

    if exist:
        tag_node = exist[0]
        for k, v in attribute_dict.iteritems():
            tag_node[k] = v
        graph.push(tag_node)
    else:
        tag_node = Node("Tag",
                        tag=tag_id)  # create event node with only one event_id
        for k, v in attribute_dict.iteritems():
            tag_node[k] = v
        graph.create(tag_node)
        tag_index.add("tag", tag_id, tag_node)

    return True
def create_event(event, attribute_dict=dict()):
    Index = ManualIndexManager(graph)  # manage index
    event_index = Index.get_or_create_index(Node, event_index_name)
    exist = event_index.get("event", event)

    if exist:
        event_node = exist[0]
        for k, v in attribute_dict.iteritems():
            event_node[k] = v
        graph.push(event_node)
    else:
        event_node = Node(
            "Event",
            event_id=event)  # create event node with only one event_id
        for k, v in attribute_dict.iteritems():
            event_node[k] = v
        graph.create(event_node)
        event_index.add("event", event, event_node)

    return True
def create_group(group_id, attribute_dict=dict()):
    Index = ManualIndexManager(graph)  # manage index
    group_index = Index.get_or_create_index(Node, group_index_name)
    exist = group_index.get("group", group_id)

    if exist:
        group_node = exist[0]
        for k, v in attribute_dict.iteritems():
            group_node[k] = v
        graph.push(group_node)
    else:
        group_node = Node(
            "Group",
            group=group_id)  # create event node with only one event_id
        for k, v in attribute_dict.iteritems():
            group_node[k] = v
        graph.create(group_node)
        group_index.add("group", group_id, group_node)

    return True
def create_rel_uid2event(uid_list, event_id, rel_type):
    count = 0
    Index = ManualIndexManager(graph)
    node_index = Index.get_index(Node, node_index_name)
    event_index = Index.get_index(Node, event_index_name)

    tx = graph.begin()
    for user in uid_list:
        exist = node_index.get("uid", user)
        if exist:
            node = exist[0]
        else:
            node = Node("User", uid=user)
            graph.create(node)
            node_index.add("uid", user, node)
        event_node = event_index.get("event", event_id)[0]
        rel = Relationship(node, rel_type, event_node)
        tx.create(rel)
        count += 1
        if count % 100 == 0:
            tx.commit()
            print count
            tx = graph.begin()
    tx.commit()
def create_rel_from_uid2group(uid_list, group_id):
    count = 0
    Index = ManualIndexManager(graph)
    node_index = Index.get_index(Node, node_index_name)
    group_index = Index.get_index(Node, group_index_name)

    tx = graph.begin()
    for user in uid_list:
        exist = node_index.get("uid", user)
        if exist:
            node = exist[0]
        else:
            node = Node("User", uid=user)
            graph.create(node)
            node_index.add("uid", user, node)
        group_node = group_index.get("group", group_id)[0]
        rel = Relationship(node, group_rel, group_node)
        tx.create(rel)
        count += 1
        if count % 100 == 0:
            tx.commit()
            print count
            tx = graph.begin()
    tx.commit()