88
99BASE_URL = "https://dune.com"
1010GRAPH_URL = 'https://core-hsr.dune.com/v1/graphql'
11+ GRAPH_URL_NEW = 'https://app-api.dune.com/v1/graphql'
1112
1213# --------- Constants --------- #
1314logging .basicConfig (
@@ -34,6 +35,7 @@ def __init__(self, username, password):
3435 self .token = None
3536 self .username = username
3637 self .password = password
38+ self .query_id = None
3739 self .session = Session ()
3840 headers = {
3941 'accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,'
@@ -122,6 +124,35 @@ def query_result_id(self, query_id):
122124 logger .error (response .text )
123125 return None
124126
127+ def query_result_id_v3 (self , query_id ):
128+ """
129+ Fetch the query result id for a query
130+
131+ :param query_id: provide the query_id
132+ :return:
133+ """
134+ self .query_id = query_id
135+ query_data = {"operationName" : "GetResult" , "variables" : {"query_id" : query_id , "parameters" : []},
136+ "query" : "query GetResult($query_id: Int!, $parameters: [Parameter!]!) "
137+ "{\n get_result_v3(query_id: $query_id, parameters: $parameters) "
138+ "{\n job_id\n result_id\n error_id\n __typename\n }\n }\n "
139+ }
140+
141+ self .session .headers .update ({'authorization' : f'Bearer { self .token } ' })
142+
143+ response = self .session .post (GRAPH_URL , json = query_data )
144+ if response .status_code == 200 :
145+ data = response .json ()
146+ logger .debug (data )
147+ if 'errors' in data :
148+ logger .error (data .get ('errors' ))
149+ return None
150+ result_id = data .get ('data' ).get ('get_result_v3' ).get ('result_id' )
151+ return result_id
152+ else :
153+ logger .error (response .text )
154+ return None
155+
125156 def query_result (self , result_id ):
126157 """
127158 Fetch the result for a query
@@ -148,3 +179,28 @@ def query_result(self, result_id):
148179 else :
149180 logger .error (response .text )
150181 return {}
182+
183+ def get_execution_result (self , execution_id ):
184+ query_data = {"operationName" : "GetExecution" ,
185+ "variables" : {"execution_id" : execution_id , "query_id" : self .query_id , "parameters" : []},
186+ "query" : "query GetExecution($execution_id: String!, $query_id: Int!, $parameters: [Parameter!]!)"
187+ " {\n get_execution(\n execution_id: $execution_id\n query_id: $query_id\n "
188+ "parameters: $parameters\n ) {\n execution_queued {\n execution_id\n "
189+ "execution_user_id\n position\n execution_type\n created_at\n "
190+ "__typename\n }\n execution_running {\n execution_id\n "
191+ "execution_user_id\n execution_type\n started_at\n created_at\n "
192+ "__typename\n }\n execution_succeeded {\n execution_id\n "
193+ "runtime_seconds\n generated_at\n columns\n data\n __typename\n }"
194+ "\n execution_failed {\n execution_id\n type\n message\n metadata"
195+ " {\n line\n column\n hint\n __typename\n }\n "
196+ "runtime_seconds\n generated_at\n __typename\n }\n __typename\n }\n }\n " }
197+ self .session .headers .update ({'authorization' : f'Bearer { self .token } ' })
198+
199+ response = self .session .post (GRAPH_URL_NEW , json = query_data )
200+ if response .status_code == 200 :
201+ data = response .json ()
202+ logger .debug (data )
203+ return data
204+ else :
205+ logger .error (response .text )
206+ return {}
0 commit comments