diff --git a/piccolo/apps/asgi/commands/new.py b/piccolo/apps/asgi/commands/new.py index f4b0e16e3..df344f10a 100644 --- a/piccolo/apps/asgi/commands/new.py +++ b/piccolo/apps/asgi/commands/new.py @@ -12,7 +12,7 @@ SERVERS = ["uvicorn", "Hypercorn"] ROUTERS = ["starlette", "fastapi", "blacksheep", "litestar"] ROUTER_DEPENDENCIES = { - "litestar": ["litestar==2.0.0a3"], + "fastapi": ["fastapi<0.100.0"], } diff --git a/piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja b/piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja index 62e12c19e..6302972bb 100644 --- a/piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja +++ b/piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja @@ -1,18 +1,27 @@ import typing as t -from piccolo.engine import engine_finder -from piccolo_admin.endpoints import create_admin +from home.endpoints import home +from home.piccolo_app import APP_CONFIG +from home.tables import Task from litestar import Litestar, asgi, delete, get, patch, post -from litestar.static_files import StaticFilesConfig -from litestar.template import TemplateConfig from litestar.contrib.jinja import JinjaTemplateEngine -from litestar.contrib.piccolo_orm import PiccoloORMPlugin from litestar.exceptions import NotFoundException +from litestar.static_files import StaticFilesConfig +from litestar.template import TemplateConfig from litestar.types import Receive, Scope, Send +from piccolo.engine import engine_finder +from piccolo.utils.pydantic import create_pydantic_model +from piccolo_admin.endpoints import create_admin -from home.endpoints import home -from home.piccolo_app import APP_CONFIG -from home.tables import Task +TaskModelIn: t.Any = create_pydantic_model( + table=Task, + model_name="TaskModelIn", +) +TaskModelOut: t.Any = create_pydantic_model( + table=Task, + include_default_columns=True, + model_name="TaskModelOut", +) # mounting Piccolo Admin @@ -22,29 +31,27 @@ async def admin(scope: "Scope", receive: "Receive", send: "Send") -> None: @get("/tasks", tags=["Task"]) -async def tasks() -> t.List[Task]: - tasks = await Task.select().order_by(Task.id, ascending=False) - return tasks +async def tasks() -> t.List[TaskModelOut]: + return await Task.select().order_by(Task.id, ascending=False) @post("/tasks", tags=["Task"]) -async def create_task(data: Task) -> Task: - task = Task(**data.to_dict()) +async def create_task(data: TaskModelIn) -> TaskModelOut: + task = Task(**data.dict()) await task.save() - return task + return task.to_dict() @patch("/tasks/{task_id:int}", tags=["Task"]) -async def update_task(task_id: int, data: Task) -> Task: +async def update_task(task_id: int, data: TaskModelIn) -> TaskModelOut: task = await Task.objects().get(Task.id == task_id) if not task: raise NotFoundException("Task does not exist") - for key, value in data.to_dict().items(): - task.id = task_id + for key, value in data.dict().items(): setattr(task, key, value) await task.save() - return task + return task.to_dict() @delete("/tasks/{task_id:int}", tags=["Task"]) @@ -80,7 +87,6 @@ app = Litestar( update_task, delete_task, ], - plugins=[PiccoloORMPlugin()], template_config=TemplateConfig( directory="home/templates", engine=JinjaTemplateEngine ), diff --git a/piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja b/piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja index b33586da5..e5dfc0661 100644 --- a/piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja +++ b/piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja @@ -10,7 +10,7 @@ ENVIRONMENT = jinja2.Environment( ) -@get(path="/", include_in_schema=False) +@get(path="/", include_in_schema=False, sync_to_thread=False) def home(request: Request) -> Response: template = ENVIRONMENT.get_template("home.html.jinja") content = template.render(title="Piccolo + ASGI") diff --git a/requirements/requirements.txt b/requirements/requirements.txt index f6dbc3d2f..dc6479810 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -4,4 +4,4 @@ Jinja2>=2.11.0 targ>=0.3.7 inflection>=0.5.1 typing-extensions>=4.3.0 -pydantic[email]>=1.6 +pydantic[email]>=1.6,<2.0