Buckets:
| """ | |
| Projects API Router | |
| """ | |
| from fastapi import APIRouter, HTTPException | |
| from pydantic import BaseModel | |
| from typing import List, Optional | |
| from datetime import datetime | |
| import uuid | |
| router = APIRouter() | |
| projects_db = {} | |
| class ProjectCreate(BaseModel): | |
| name: str | |
| description: Optional[str] = None | |
| class Project(BaseModel): | |
| id: str | |
| name: str | |
| description: Optional[str] = None | |
| created_at: datetime | |
| updated_at: datetime | |
| class ProjectSummary(BaseModel): | |
| id: str | |
| name: str | |
| description: Optional[str] = None | |
| created_at: datetime | |
| async def create_project(project: ProjectCreate): | |
| project_id = str(uuid.uuid4()) | |
| now = datetime.utcnow() | |
| new_project = { | |
| "id": project_id, | |
| "name": project.name, | |
| "description": project.description, | |
| "created_at": now, | |
| "updated_at": now | |
| } | |
| projects_db[project_id] = new_project | |
| return Project(**new_project) | |
| async def list_projects(): | |
| return [ProjectSummary(**p) for p in projects_db.values()] | |
| async def get_project(project_id: str): | |
| if project_id not in projects_db: | |
| raise HTTPException(status_code=404, detail="Project not found") | |
| return Project(**projects_db[project_id]) | |
| async def delete_project(project_id: str): | |
| if project_id not in projects_db: | |
| raise HTTPException(status_code=404, detail="Project not found") | |
| del projects_db[project_id] | |
| return {"message": "Project deleted"} | |
Xet Storage Details
- Size:
- 1.64 kB
- Xet hash:
- 510e0dfbf46d4d57d47ddb6a2370b8d39ef1830352e0ec63f8ebab153d8f0a95
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.