Spaces:
Running on Zero
Running on Zero
Separate job keys from private HF hosting authentication
Browse files- RELEASE_MANIFEST.json +2 -2
- client.js +1 -1
- delivery.py +10 -11
RELEASE_MANIFEST.json
CHANGED
|
@@ -10,8 +10,8 @@
|
|
| 10 |
"assets/formula_template.json": "80f745df82bb7be45af52785fd582460bcddc63c5a4e1d8375d85b3122db4c6b",
|
| 11 |
"bin/altd-sim": "2f2f2144ae14b0ef599ca8510f95712da00243c6875881491d384b394e7499f7",
|
| 12 |
"bin/extract_saved_track": "3a7733c45b4301a786fcbfe92660a1c484749272da5f608d62f34878bd4ff31a",
|
| 13 |
-
"client.js": "
|
| 14 |
-
"delivery.py": "
|
| 15 |
"index.html": "cf4c0670c81184f8ea2726041457ae3cecc6c79b9030a41fe545b1bc503f0a47",
|
| 16 |
"requirements.txt": "dbdedd8a6f30e16dc41bc3e210c1a936f679655420075f8f89bdd40bdd03f91b",
|
| 17 |
"server.py": "df0f3d22c55653de9216da2443d17cd098cf5552f66a0fafb742160b5b29eefe",
|
|
|
|
| 10 |
"assets/formula_template.json": "80f745df82bb7be45af52785fd582460bcddc63c5a4e1d8375d85b3122db4c6b",
|
| 11 |
"bin/altd-sim": "2f2f2144ae14b0ef599ca8510f95712da00243c6875881491d384b394e7499f7",
|
| 12 |
"bin/extract_saved_track": "3a7733c45b4301a786fcbfe92660a1c484749272da5f608d62f34878bd4ff31a",
|
| 13 |
+
"client.js": "c80281f2ab24c4efcb6801885cad6a70cb426512c0979397d90e920352ec8dec",
|
| 14 |
+
"delivery.py": "4f5a4e45df92e5cbfdef6eb449ede9ba26217fe24da376fafddae5cbbb73847a",
|
| 15 |
"index.html": "cf4c0670c81184f8ea2726041457ae3cecc6c79b9030a41fe545b1bc503f0a47",
|
| 16 |
"requirements.txt": "dbdedd8a6f30e16dc41bc3e210c1a936f679655420075f8f89bdd40bdd03f91b",
|
| 17 |
"server.py": "df0f3d22c55653de9216da2443d17cd098cf5552f66a0fafb742160b5b29eefe",
|
client.js
CHANGED
|
@@ -33,7 +33,7 @@ async function encoded(file) {
|
|
| 33 |
let text=''; for (let i=0;i<bytes.length;i+=8192) text+=String.fromCharCode(...bytes.subarray(i,i+8192));
|
| 34 |
return btoa(text);
|
| 35 |
}
|
| 36 |
-
const headers = () => ({
|
| 37 |
$('run').onclick = async () => {
|
| 38 |
localResult=null;
|
| 39 |
const started=performance.now();
|
|
|
|
| 33 |
let text=''; for (let i=0;i<bytes.length;i+=8192) text+=String.fromCharCode(...bytes.subarray(i,i+8192));
|
| 34 |
return btoa(text);
|
| 35 |
}
|
| 36 |
+
const headers = () => ({'X-Job-Key':job.key});
|
| 37 |
$('run').onclick = async () => {
|
| 38 |
localResult=null;
|
| 39 |
const started=performance.now();
|
delivery.py
CHANGED
|
@@ -119,10 +119,9 @@ def create_api(store=None):
|
|
| 119 |
response.headers['X-Content-Type-Options']='nosniff'
|
| 120 |
return response
|
| 121 |
|
| 122 |
-
def key(
|
| 123 |
-
if not
|
| 124 |
raise HTTPException(404,'Job unavailable')
|
| 125 |
-
value = authorization[7:]
|
| 126 |
if not value.isascii() or len(value)>128: raise HTTPException(404,'Job unavailable')
|
| 127 |
return value
|
| 128 |
|
|
@@ -131,21 +130,21 @@ def create_api(store=None):
|
|
| 131 |
except Unavailable: raise HTTPException(404,'Job unavailable') from None
|
| 132 |
|
| 133 |
@app.get('/api/jobs/{ident}')
|
| 134 |
-
def status(ident:str,
|
| 135 |
-
return call(store.status,ident,key(
|
| 136 |
|
| 137 |
@app.post('/api/jobs/{ident}/download')
|
| 138 |
-
def download(ident:str,
|
| 139 |
-
data,receipt = call(store.download,ident,key(
|
| 140 |
return Response(data,media_type='application/octet-stream',headers={
|
| 141 |
'Content-Disposition':'attachment; filename="candidate.evolution"',
|
| 142 |
'X-Delivery-Receipt':receipt})
|
| 143 |
|
| 144 |
@app.post('/api/jobs/{ident}/ack')
|
| 145 |
-
def ack(ident:str,body:Acknowledgment,
|
| 146 |
-
return call(store.acknowledge,ident,key(
|
| 147 |
|
| 148 |
@app.delete('/api/jobs/{ident}')
|
| 149 |
-
def delete(ident:str,
|
| 150 |
-
return call(store.delete,ident,key(
|
| 151 |
return app
|
|
|
|
| 119 |
response.headers['X-Content-Type-Options']='nosniff'
|
| 120 |
return response
|
| 121 |
|
| 122 |
+
def key(value):
|
| 123 |
+
if not value:
|
| 124 |
raise HTTPException(404,'Job unavailable')
|
|
|
|
| 125 |
if not value.isascii() or len(value)>128: raise HTTPException(404,'Job unavailable')
|
| 126 |
return value
|
| 127 |
|
|
|
|
| 130 |
except Unavailable: raise HTTPException(404,'Job unavailable') from None
|
| 131 |
|
| 132 |
@app.get('/api/jobs/{ident}')
|
| 133 |
+
def status(ident:str,x_job_key:str|None=Header(default=None)):
|
| 134 |
+
return call(store.status,ident,key(x_job_key))
|
| 135 |
|
| 136 |
@app.post('/api/jobs/{ident}/download')
|
| 137 |
+
def download(ident:str,x_job_key:str|None=Header(default=None)):
|
| 138 |
+
data,receipt = call(store.download,ident,key(x_job_key))
|
| 139 |
return Response(data,media_type='application/octet-stream',headers={
|
| 140 |
'Content-Disposition':'attachment; filename="candidate.evolution"',
|
| 141 |
'X-Delivery-Receipt':receipt})
|
| 142 |
|
| 143 |
@app.post('/api/jobs/{ident}/ack')
|
| 144 |
+
def ack(ident:str,body:Acknowledgment,x_job_key:str|None=Header(default=None)):
|
| 145 |
+
return call(store.acknowledge,ident,key(x_job_key),body.receipt)
|
| 146 |
|
| 147 |
@app.delete('/api/jobs/{ident}')
|
| 148 |
+
def delete(ident:str,x_job_key:str|None=Header(default=None)):
|
| 149 |
+
return call(store.delete,ident,key(x_job_key))
|
| 150 |
return app
|