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