in src/lambda.d/inference/func/inferenceApi.py [0:0]
def insert_new_transaction_vertex_and_edge(self, tr_dict, connectted_node_dict, target_id, vertex_type = 'Transaction'):
"""Load transaction data, insert transaction object and related domain objects into GraphDB as vertex,
with their properties as values, and insert their relation as edges.
Example:
>>> insert_new_transaction_vertex_and_edge(tr_dict, connectted_node_dict, target_id, vertex_type = 'Transaction')
"""
def insert_attr(graph_conn, attr_val_dict, target_id, node_id, vertex_type):
if (not g.V().has(id,node_id).hasNext()):
logger.info(f'Insert_Vertex: {node_id}.')
g.inject(attr_val_dict).unfold().as_(vertex_type).\
addV(vertex_type).as_('v').property(id,node_id).\
sideEffect(__.select(vertex_type).unfold().as_('kv').select('v').\
property(Cardinality.single, __.select('kv').by(Column.keys),
__.select('kv').by(Column.values)
)
).iterate()
else:
logger.debug(f'Ignore inserting existing Vertex with id {node_id}')
# Insert_edge
to_node = g.V().has(id,node_id).next()
edgeId = target_id+'-'+node_id
if(not g.E().has(id,edgeId).hasNext()):
logger.info(f'Insert_Edge: {target_id} --> {node_id}.')
g.V().has(id,target_id).addE('CATEGORY').to(to_node).property(id,edgeId).iterate()
else:
logger.debug(f'Ignore inserting existing edge with id {edgeId}')
conn = self.gremlin_utils.remote_connection()
g = self.gremlin_utils.traversal_source(connection=conn)
if (not g.V().has(id, target_id).hasNext()):
logger.info(f'Insert_Vertex: {target_id}.')
g.inject(tr_dict).unfold().as_(vertex_type).\
addV(vertex_type).as_('v').property(id,target_id).\
sideEffect(__.select(vertex_type).unfold().as_('kv').select('v').\
property(Cardinality.single, __.select('kv').by(Column.keys),
__.select('kv').by(Column.values)
)
).iterate()
cols = {'val' + str(i + 1): '0.0' for i in range(390)}
for node_k, node_v in connectted_node_dict[0].items():
node_id = node_k + '-' + str(node_v)
empty_node_dict = {}
empty_node_dict[attr_version_key] = json.dumps(cols)
empty_node_dict = [empty_node_dict]
insert_attr(g, empty_node_dict, target_id, node_id, vertex_type = node_k)
conn.close()