Upload 3 files
Browse files- .gitattributes +1 -0
- ffmpeg +3 -0
- qili.py +128 -0
- sample.wav +0 -0
.gitattributes
CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
ffmpeg filter=lfs diff=lfs merge=lfs -text
|
ffmpeg
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:51bbdd978250ff7239d213940ff2c92ea56e7d768e8db98d9cbc4079d82e42dc
|
3 |
+
size 78999296
|
qili.py
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import sys
|
3 |
+
import uuid
|
4 |
+
import json
|
5 |
+
import requests
|
6 |
+
import traceback
|
7 |
+
|
8 |
+
from importlib import import_module
|
9 |
+
|
10 |
+
sys.path.append(os.getcwd())
|
11 |
+
|
12 |
+
conf=None
|
13 |
+
def makeConfReady():
|
14 |
+
global conf
|
15 |
+
if conf is None:
|
16 |
+
conf=import_module("qili-conf").conf
|
17 |
+
|
18 |
+
def fetch(request, timeout=60000):
|
19 |
+
try:
|
20 |
+
makeConfReady()
|
21 |
+
with requests.Session() as session:
|
22 |
+
response = session.post(
|
23 |
+
conf["api"],
|
24 |
+
headers={
|
25 |
+
'Content-Type': 'application/json',
|
26 |
+
'x-application-id': conf["apiKey"],
|
27 |
+
"x-session-token":conf["token"]
|
28 |
+
},
|
29 |
+
data=request if isinstance(request, str) else json.dumps(request),
|
30 |
+
timeout=timeout / 1000
|
31 |
+
)
|
32 |
+
response.raise_for_status()
|
33 |
+
|
34 |
+
# Parse JSON response
|
35 |
+
response_data = response.json()
|
36 |
+
|
37 |
+
if 'data' not in response_data:
|
38 |
+
raise ValueError(response_data.get('message') or response_data.get('statusText') or 'Unknown error')
|
39 |
+
|
40 |
+
if 'errors' in response_data:
|
41 |
+
raise ValueError(response_data['errors'])
|
42 |
+
|
43 |
+
return response_data['data']
|
44 |
+
|
45 |
+
except requests.exceptions.Timeout:
|
46 |
+
raise TimeoutError('Timeout from qili service')
|
47 |
+
|
48 |
+
|
49 |
+
def upload_bytes(bytes, key=None, ext=".wav"):
|
50 |
+
makeConfReady()
|
51 |
+
try:
|
52 |
+
if key is None:
|
53 |
+
key=f"_temp_/1/{str(uuid.uuid4())}{ext}"
|
54 |
+
data = fetch({
|
55 |
+
"query": '''
|
56 |
+
query($key:String!){
|
57 |
+
file_upload_token(key:$key){
|
58 |
+
token
|
59 |
+
key
|
60 |
+
}
|
61 |
+
}
|
62 |
+
''',
|
63 |
+
"variables": {
|
64 |
+
"key": key
|
65 |
+
}
|
66 |
+
})
|
67 |
+
data=data["file_upload_token"]
|
68 |
+
files={"file":(os.path.basename(key), bytes)}
|
69 |
+
response = requests.post(conf["api"], files=files, data=data)
|
70 |
+
if response.ok:
|
71 |
+
data = response.json()
|
72 |
+
return data.get("data", {}).get("file_create", {}).get("url")
|
73 |
+
else:
|
74 |
+
raise Exception(f"{response.status_code} - {response.reason}, {response.text}")
|
75 |
+
except Exception as e:
|
76 |
+
traceback.print_exc()
|
77 |
+
return str(e)
|
78 |
+
|
79 |
+
|
80 |
+
def upload(files, root_key=None):
|
81 |
+
makeConfReady()
|
82 |
+
if not isinstance(files, list):
|
83 |
+
shouldReturnString=True
|
84 |
+
files = [files]
|
85 |
+
|
86 |
+
if(root_key==None):
|
87 |
+
root_key="_temp_/1/" + str(uuid.uuid4())
|
88 |
+
|
89 |
+
try:
|
90 |
+
keys, queries, variables = [], [], {}
|
91 |
+
|
92 |
+
for i, file in enumerate(files):
|
93 |
+
k = f"key{i}"
|
94 |
+
keys.append(k)
|
95 |
+
queries.append(f"""
|
96 |
+
token{i}:file_upload_token(key:${k}){{
|
97 |
+
token
|
98 |
+
key
|
99 |
+
}}
|
100 |
+
""")
|
101 |
+
variables[k] = f"{root_key}{os.path.basename(file)}"
|
102 |
+
|
103 |
+
keys=','.join([f'${k}:String!' for k in keys])
|
104 |
+
queries='\n'.join(queries)
|
105 |
+
|
106 |
+
query = f"""query({ keys }){{ { queries } }}"""
|
107 |
+
|
108 |
+
data = fetch({"query": query, "variables": variables})
|
109 |
+
|
110 |
+
tokens = list(data.values())
|
111 |
+
urls = []
|
112 |
+
|
113 |
+
for i, file in enumerate(files):
|
114 |
+
form = {"file": open(file, "rb")}
|
115 |
+
response = requests.post(conf["api"], files=form, data=tokens[i])
|
116 |
+
|
117 |
+
if response.ok:
|
118 |
+
data = response.json()
|
119 |
+
urls.append(data.get("data", {}).get("file_create", {}).get("url"))
|
120 |
+
else:
|
121 |
+
raise Exception(f"{response.status_code} - {response.reason}, {response.text}")
|
122 |
+
|
123 |
+
if shouldReturnString:
|
124 |
+
urls[0]
|
125 |
+
return list(filter(None, urls))
|
126 |
+
except Exception as e:
|
127 |
+
traceback.print_exc()
|
128 |
+
return str(e)
|
sample.wav
ADDED
Binary file (379 kB). View file
|
|