From 7f0413f8a36d34bc0e5c7bec3e45afb3f146f1f0 Mon Sep 17 00:00:00 2001 From: Shroominic Date: Thu, 18 Jul 2024 04:20:00 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20fix=20api+remote=20box=20sync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/codeboxapi/api.py | 29 ++++++++++++++++++----------- src/codeboxapi/remote.py | 4 ++-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/codeboxapi/api.py b/src/codeboxapi/api.py index e7bea65..df3d8a3 100644 --- a/src/codeboxapi/api.py +++ b/src/codeboxapi/api.py @@ -2,10 +2,11 @@ from contextlib import asynccontextmanager from datetime import datetime, timedelta from os import getenv -from typing import Annotated, AsyncGenerator, Literal +from typing import AsyncGenerator, Literal -from fastapi import Body, Depends, FastAPI, HTTPException, UploadFile +from fastapi import Depends, FastAPI, HTTPException, UploadFile from fastapi.responses import StreamingResponse +from pydantic import BaseModel from .local import LocalBox from .utils import CodeBoxFile @@ -41,19 +42,21 @@ async def healthcheck() -> dict[str, str]: return {"status": "ok"} +class ExecBody(BaseModel): + code: str + kernel: Literal["ipython", "bash"] = "ipython" + timeout: int | None = None + cwd: str | None = None + + @app.post("/exec") async def exec( - code: Annotated[str, Body()], - kernel: Literal["ipython", "bash"] = "ipython", - timeout: int | None = None, - cwd: str | None = None, - codebox: LocalBox = Depends(get_codebox), + exec: ExecBody, codebox: LocalBox = Depends(get_codebox) ) -> StreamingResponse: - print("code", code) - async def event_stream() -> AsyncGenerator[str, None]: - async for chunk in codebox.astream_exec(code, kernel, timeout, cwd): - print("chunk", chunk) + async for chunk in codebox.astream_exec( + exec.code, exec.kernel, exec.timeout, exec.cwd + ): yield chunk.__str__() return StreamingResponse(event_stream()) @@ -83,3 +86,7 @@ def serve(): import uvicorn uvicorn.run(app, host="0.0.0.0", port=getenv("CODEBOX_PORT", 8069)) + + +if __name__ == "__main__": + serve() diff --git a/src/codeboxapi/remote.py b/src/codeboxapi/remote.py index 722e438..a9a7754 100644 --- a/src/codeboxapi/remote.py +++ b/src/codeboxapi/remote.py @@ -49,7 +49,7 @@ def stream_exec( method="POST", url="/stream", timeout=timeout, - params={"code": code, "kernel": kernel, "cwd": cwd}, + json={"code": code, "kernel": kernel, "cwd": cwd}, ) as response: for chunk in response.iter_text(): yield ExecChunk.decode(chunk) @@ -66,7 +66,7 @@ async def astream_exec( method="POST", url="/stream", timeout=timeout, - params={"code": code, "kernel": kernel, "cwd": cwd}, + json={"code": code, "kernel": kernel, "cwd": cwd}, ) as response: async for chunk in response.aiter_text(): yield ExecChunk.decode(chunk)