forked from datasaur-ai/api-client-example
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexport.py
More file actions
66 lines (55 loc) · 2.08 KB
/
export.py
File metadata and controls
66 lines (55 loc) · 2.08 KB
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
55
56
57
58
59
60
61
62
63
64
65
import requests
from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session
from urllib.parse import urlparse
import os
import json
import sys
import re
import time
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
baseUrl = sys.argv[1]
client_id = sys.argv[2]
client_secret = sys.argv[3]
projectId = sys.argv[4]
exportFileName = sys.argv[5]
exportFormat = sys.argv[6]
outputDir = sys.argv[7]
url = baseUrl + "/graphql"
client = BackendApplicationClient(client_id=client_id)
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(token_url= baseUrl + '/api/oauth/token', client_id=client_id,
client_secret=client_secret)
with open('export.json', 'r') as file:
payloadString = file.read()
payload = json.loads(payloadString)
payload["variables"]["input"]["fileName"] = exportFileName
payload["variables"]["input"]["projectIds"] = [ projectId ]
payload["variables"]["input"]["format"] = exportFormat
headers = {
'Authorization': 'Bearer ' + token['access_token'],
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data = json.dumps(payload))
if 'json' in response.headers['content-type']:
jsonResponse = json.loads(response.text.encode('utf8'))
print(json.dumps(jsonResponse, indent=1))
if len(jsonResponse["data"]["result"]["fileUrl"]) > 0:
fileUrl = jsonResponse["data"]["result"]["fileUrl"]
os.makedirs(outputDir, exist_ok=True)
while True:
time.sleep(1)
fileResponse = requests.request("GET", fileUrl)
if fileResponse.status_code == 200:
fileResponseUrl = urlparse(fileUrl)
fileName = os.path.basename(fileResponseUrl.path)
outputFile = outputDir + '/' + fileName
open(outputFile, 'wb').write(fileResponse.content)
print("Success downloading the file. Output file:" + outputFile)
break;
elif fileResponse.status_code == 404:
print("Waiting for the file.")
elif fileResponse.status_code == 403 or fileResponse.status_code >=500:
print("Stop waiting because error.")
else:
print(response)