1
+ import time
2
+ from typing import Any , Optional
3
+
4
+ from graphdatascience import QueryRunner
5
+ from graphdatascience .arrow_client .authenticated_flight_client import AuthenticatedArrowClient
6
+ from graphdatascience .call_parameters import CallParameters
7
+ from graphdatascience .query_runner .protocol .write_protocols import WriteProtocol
8
+ from graphdatascience .query_runner .termination_flag import TerminationFlagNoop
9
+ from graphdatascience .session .dbms .protocol_resolver import ProtocolVersionResolver
10
+
11
+
12
+ class WriteBackClient :
13
+ def __init__ (self , arrow_client : AuthenticatedArrowClient , query_runner : QueryRunner ):
14
+ self ._arrow_client = arrow_client
15
+ self ._query_runner = query_runner
16
+
17
+ protocol_version = ProtocolVersionResolver (query_runner ).resolve ()
18
+ self ._write_protocol = WriteProtocol .select (protocol_version )
19
+
20
+ # TODO: Add progress logging
21
+ # TODO: Support setting custom writeProperties and relationshipTypes
22
+ def write (self , graph_name : str , job_id : str , concurrency : Optional [int ]) -> int :
23
+ arrow_config = self ._arrow_configuration ()
24
+
25
+ configuration = {}
26
+ if concurrency is not None :
27
+ configuration ["concurrency" ] = concurrency
28
+
29
+ write_back_params = CallParameters (
30
+ graphName = graph_name ,
31
+ jobId = job_id ,
32
+ arrowConfiguration = arrow_config ,
33
+ configuration = configuration ,
34
+ )
35
+
36
+ start_time = time .time ()
37
+
38
+ self ._write_protocol .run_write_back (self ._query_runner , write_back_params , None , TerminationFlagNoop ())
39
+
40
+ return int ((time .time () - start_time ) * 1000 )
41
+
42
+ def _arrow_configuration (self ) -> dict [str , Any ]:
43
+ connection_info = self ._arrow_client .connection_info ()
44
+ token = self ._arrow_client .request_token ()
45
+ if token is None :
46
+ token = "IGNORED"
47
+ arrow_config = {
48
+ "host" : connection_info .host ,
49
+ "port" : connection_info .port ,
50
+ "token" : token ,
51
+ "encrypted" : connection_info .encrypted ,
52
+ }
53
+
54
+ return arrow_config
0 commit comments