in neptune-python-utils/neptune_python_utils/batch_utils.py [0:0]
def upsert_vertex(t, row, **kwargs):
mappings = kwargs['mappings']
label = kwargs['label'] if 'label' in kwargs else mappings.get_label(row)
on_upsert = kwargs.get('on_upsert', None)
#updateSingleCardinalityProperties
#updateAllProperties
#replaceAllProperties
create_traversal = __.addV(label)
updateable_items = []
for key, value in row.items():
mapping = mappings.mapping_for(key)
if mapping.is_id_token():
create_traversal = create_traversal.property(id, value)
elif not mapping.is_token():
if not on_upsert:
create_traversal = create_traversal.property(mapping.name, mapping.convert(value))
elif on_upsert == 'updateSingleCardinalityProperties':
if mapping.cardinality == 'single':
updateable_items.append((key, value))
else:
create_traversal = create_traversal.property(get_cardinality(mapping.cardinality), mapping.name, mapping.convert(value))
elif on_upsert == 'updateAllProperties':
updateable_items.append((key, value))
elif on_upsert == 'replaceAllProperties':
pass
t = t.V(mappings.get_id(row)).fold().coalesce(__.unfold(), create_traversal)
if updateable_items:
for key, value in updateable_items:
mapping = mappings.mapping_for(key)
t = t.property(get_cardinality(mapping.cardinality), mapping.name, mapping.convert(value))
return t