| 21 | |
| 22 | @self_signed_app.post("/v1/algo/{username}/{algoname}") |
| 23 | async def process_algo_req(request: Request, username, algoname, output: Optional[str] = None): |
| 24 | metadata = {"request_id": "req-55c0480d-6af3-4a21-990a-5c51d29f5725", "duration": 0.000306774} |
| 25 | content_type = request.headers['Content-Type'] |
| 26 | auth = request.headers.get('Authorization', None) |
| 27 | if auth is None: |
| 28 | return {"error": {"message": "authorization required"}} |
| 29 | request = await request.body() |
| 30 | if output and output == "void": |
| 31 | return {"async": "abcd123", "request_id": "req-55c0480d-6af3-4a21-990a-5c51d29f5725"} |
| 32 | elif output and output == "raw": |
| 33 | return Response(request.decode(), status_code=200) |
| 34 | elif algoname == "500": |
| 35 | return Response("Internal Server Error", status_code=500) |
| 36 | elif algoname == "raise_exception": |
| 37 | return {"error": {"message": "This is an exception"}} |
| 38 | else: |
| 39 | if content_type != "application/octet-stream": |
| 40 | request = request.decode('utf-8') |
| 41 | if content_type == "text/plain": |
| 42 | metadata['content_type'] = "text" |
| 43 | elif content_type == "application/json": |
| 44 | request = json.loads(request) |
| 45 | metadata['content_type'] = "json" |
| 46 | else: |
| 47 | metadata['content_type'] = "binary" |
| 48 | request = base64.b64encode(request) |
| 49 | output = {"result": request, "metadata": metadata} |
| 50 | return output |
| 51 | |
| 52 | |
| 53 | @self_signed_app.post("/v1/algo/{username}/{algoname}/{githash}") |