1
- import asyncio
2
1
from neo4j import GraphDatabase
3
- from neo4j_uploader ._logger import ModuleLogger
2
+ from neo4j_uploader ._logger import logger
3
+ from typing import Tuple
4
4
5
- def validate_credentials (creds : (str , str , str )):
5
+
6
+ def validate_credentials (creds : Tuple [str , str , str ]):
6
7
host , user , password = creds
7
8
with GraphDatabase .driver (host , auth = (user , password )) as driver :
8
9
driver .verify_connectivity ()
9
10
10
- def upload_query (creds : (str , str , str ), query , params = {}, database : str = "neo4j" ):
11
+
12
+ def upload_query (
13
+ creds : Tuple [str , str , str ],
14
+ query ,
15
+ params = {},
16
+ database : str = "neo4j" ,
17
+ ):
11
18
host , user , password = creds
12
19
with GraphDatabase .driver (host , auth = (user , password )) as driver :
13
- _ , summary , _ = driver .execute_query (query , params , database = database )
20
+ _ , summary , _ = driver .execute_query (query , params , database = database )
14
21
return summary
15
22
16
- def execute_query (creds : (str , str , str ), query , params = {}, database : str = "neo4j" ):
23
+
24
+ def execute_query (
25
+ creds : Tuple [str , str , str ],
26
+ query ,
27
+ params = {},
28
+ database : str = "neo4j" ,
29
+ ):
17
30
host , user , password = creds
18
- ModuleLogger () .debug (f' Using host: { host } , user: { user } to execute query: { query } ' )
31
+ logger .debug (f" Using host: { host } , user: { user } to execute query: { query } " )
19
32
# Returns a tuple of records, summary, keys
20
33
with GraphDatabase .driver (host , auth = (user , password )) as driver :
21
34
return driver .execute_query (query , params , database = database )
22
35
23
- def drop_constraints (creds : (str , str , str ), database : str = "neo4j" ):
24
- query = 'SHOW CONSTRAINTS'
36
+
37
+ def run_query (
38
+ uri : str ,
39
+ username : str ,
40
+ password : str ,
41
+ query : str ,
42
+ params : dict = {},
43
+ database : str = "neo4j" ,
44
+ ):
45
+ with GraphDatabase .driver (uri , auth = (username , password )) as driver :
46
+ return driver .execute_query (query , params , database = database )
47
+
48
+
49
+ def drop_constraints (
50
+ creds : Tuple [str , str , str ],
51
+ database : str = "neo4j" ,
52
+ ):
53
+ query = "SHOW CONSTRAINTS"
25
54
result = execute_query (creds , query , database = database )
26
55
27
- ModuleLogger () .info (f"Drop constraints results: { result } " )
56
+ logger .info (f"Drop constraints results: { result } " )
28
57
29
58
# Have to make a drop constraint request for each individually!
30
59
for record in result .records :
@@ -33,31 +62,42 @@ def drop_constraints(creds: (str, str, str), database: str = "neo4j"):
33
62
drop_query = f"DROP CONSTRAINT { constraint_name } "
34
63
drop_result = execute_query (creds , drop_query , database = database )
35
64
36
- ModuleLogger () .info (f"Drop constraint { constraint_name } results: { drop_result } " )
65
+ logger .info (f"Drop constraint { constraint_name } results: { drop_result } " )
37
66
38
67
# This should now show empty
39
68
result = execute_query (creds , query , database = database )
40
69
41
70
return result
42
71
43
- def reset (creds : (str , str , str ), database : str = "neo4j" ):
44
72
73
+ def reset (
74
+ creds : Tuple [str , str , str ],
75
+ database : str = "neo4j" ,
76
+ ):
45
77
drop_constraints (creds , database )
46
78
47
- # Clears nodes and relationships - but labels remain and can only be cleared via GUI
48
- query = """MATCH (n) DETACH DELETE n"""
49
- records , summary , keys = execute_query (creds , query , database = database )
79
+ deleted_nodes_count = - 1
80
+ while deleted_nodes_count != 0 :
81
+ query = """
82
+ MATCH (n)
83
+ OPTIONAL MATCH (n)-[r]-()
84
+ WITH n, r LIMIT 50000
85
+ DELETE n, r
86
+ RETURN count(n) as deletedNodesCount
87
+ """
88
+ records , summary , keys = execute_query (creds , query , database = database )
89
+ deleted_nodes_count = records [0 ]["deletedNodesCount" ]
50
90
51
- ModuleLogger ().info (f"Reset results: { summary } " )
52
91
return summary
53
92
93
+
54
94
def create_new_node_constraints (
55
- creds : ( str , str , str ) ,
56
- node_key : str ,
57
- database : str = "neo4j"
95
+ creds : Tuple [ str , str , str ] ,
96
+ node_key : str ,
97
+ database : str = "neo4j" ,
58
98
):
59
99
query = f"""CREATE CONSTRAINT node_key IF NOT EXISTS FOR (u:`{ node_key } `)\n REQUIRE u.`node_key` IS UNIQUE"""
60
100
result = execute_query (creds , query , database = database )
61
101
62
- ModuleLogger () .info (f"Create new constraints results: { result } " )
102
+ logger .info (f"Create new constraints results: { result } " )
63
103
return result
0 commit comments