from fastapi import FastAPI, HTTPException from pydantic import BaseModel, Field from uuid import UUID, uuid4 class Task(BaseModel): id : UUID = Field(default_factory = uuid4) name : str description : str done: bool = False tasks_db = [] def find_task(_id): for idx, task in enumerate(tasks_db): if task.id == _id: return idx, task app = FastAPI() @app.get('/') def index(): return {'msg': 'hello, world'} # Add new task to database @app.put('/add_task') def add_task(task : Task): tasks_db.append(task) return {'msg': 'Task created', 'task': task} # Get all tasks from database @app.get('/tasks') def get_tasks(): return {'tasks': tasks_db} # Get one task by id @app.get('/task/{_id}') def get_task(_id: UUID): task = find_task(_id)[1] if task: return {'task': task} return HTTPException(status_code = 404, detail = 'This task is not found :(') # Update task by id @app.put('/update_task/{_id}') def update_task(_id : UUID, updatedtask : Task): task = find_task(_id) if task: task_idx = task[0] tasks_db[task_idx] = updatedtask return {'msg': 'Task updated', 'task': updatedtask} return HTTPException(status_code = 404, detail = 'This task is not found :(') # Delete task @app.delete('/delete_task/{_id}') def delete_task(_id : UUID): task = find_task(_id)[1] tasks_db.remove(task) return {'msg': f'task {task.name} deleted ;)'}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter