1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
import uuid
import string
from random import choice
import db_controller as dbc
def rand_id():
return str(uuid.uuid4())
def rand_label(length=8):
"""
return random label
"""
char_set = string.ascii_lowercase + string.ascii_uppercase + string.digits
return ''.join([choice(string.ascii_lowercase)] + [choice(char_set) for _ in range(length - 1)])
def flush_db(db_ctl):
"""
complete DB flush: remove all nodes & links
"""
db_ctl.exec_cypher_query('match (n) optional match (n)-[r]-() delete n,r')
def gen_rand_data(db_ctl, lim_n=128, lim_r=256, prob_link_create=0.3):
"""
generate random DB data
@return: tuple consisting of the random node,link labels generated
"""
assert 2 <= lim_n
n_label = rand_label()
r_label = rand_label()
q_arr = ['with 0 as _', # TODO clean: foreach triggers SyntaxException: otherwise
'foreach (rid in range(0,%d)' % (lim_n - 1),
'|',
'create (:%s {id:rid, n_attr_0:toInt(%d * rand())}))' % (n_label, lim_n)
]
q = ' '.join(q_arr)
op = dbc.DBO_cypher_query(q)
db_ctl.exec_op(op)
q_arr = ['match (s:%s),(d:%s)' % (n_label, n_label),
'with s,d',
'limit %d' % (lim_r - 1),
'where rand() < %.2f' % (prob_link_create),
'create (s)-[:%s {l_attr_0:toInt(%d * rand())}]->(d)' % (r_label, lim_r)]
q = ' '.join(q_arr)
op = dbc.DBO_cypher_query(q)
db_ctl.exec_op(op)
return (n_label, r_label)
|