未提供参考文件，已跳过文档解析，直接根据用户描述生成工程。

未提供参考文件，已跳过文档解析，直接根据用户描述生成工程。


path


code


gen


-r


uns


/c


ode


ce


f


b


c


d


requirements


.txt


content


fast


api


\n


uv


icorn


p


yd


antic


htt


px


ytest


-as


yn


cio


over


write


true


path


code


gen


-r


uns


/c


ode


ce


f


b


c


d


README


.md


content


单体


示例


工程


\n\n


一个


基于


Fast


API


的


简单


待


办


事项


Todo


管理


服务


使用


内存


假


数据


存储


。\n\n


功能


\n\n


获取


所有


列表


\n


根据


ID


单个


待


办


事项


创建


新的


更新


删除


安装


依赖


\n\n


bash


cd


code


gen


-r


uns


/c


ode


ce


f


b


c


d


\n


pip


install


r


requirements


.txt


```\n\n


启动


服务


\n\n


bash


uv


icorn


app


.main


re


load


port


\n


访问


http


/docs


查看


自动


生成的


API


文档


Sw


agger


UI


）。\n\n


运行


测试


\n\n


bash


\n


cd


code


gen


-r


uns


/c


ode


ce


f


b


c


d


p


ytest


tests


v


\n


```\n\n


快速


验证


\n\n


启动


服务


后


在


另一个


终端


执行


：\n\n


bash


获取


所有


待


办


事项


\n


curl


http


/t


odos


\n\n


创建


新


X


POST


H


Content


-Type


application


/json


d


title


学习


Fast


API


completed


false


'\n


```\n


over


write


true


path


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/app


init


py


content


app


包


初始化


文件


\n


over


write


true


path


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/app


/main


.py


content


\"\"\"\n


Fast


API


主


应用


入口


\n\n


提供


待


办


事项


Todo


管理的


REST


ful


。\n


使用


内存


假


数据


存储


无需


外部


数据库


\"\"\"\n\n


from


fast


api


import


Fast


API


HTTP


Exception


status


\n


app


.services


(\n


Todo


Service


,\n


Create


Update


Response


)\n\n


title


管理


服务


\",\n


description


一个


基于


Fast


API


的


简单


待


办


事项


示例


version


)\n\n


全局


实例


使用


内存


假


数据


）\n


todo


Todo


Service


()\n\n\n


\n


API


路由


\n\n\n


@app


.get


tags


健康


检查


\"])\n


async


def


root


():\n


服务


根


路径


返回


基本信息


\"\"\"\n


return


{\n


service


Todo


管理


\",\n


version


docs


}\n\n\n


@app


.get


t


odos


response


=list


Response


tags


待


办


事项


\"])\n


async


def


list


():\n


获取


所有


列表


\"\"\"\n


return


todo


.list


odos


()\n\n\n


@app


.get


t


response


Todo


Response


tags


待


办


事项


\"])\n


async


def


get


odo


(t


int


):\n


根据


ID


获取


单个


\"\"\"\n


todo


.get


)\n


if


is


:\n


raise


HTTP


Exception


(\n


status


.H


T


TP


OUND


,\n


detail


=f


待


办


事项


todo


不存在


\",\n


)\n


return


\n\n\n


@app


.post


(\n


t


odos


response


Todo


Response


,\n


status


.H


T


TP


RE


ATED


tags


待


办


事项


\"],\n


)\n


async


def


create


odo


(t


Todo


Create


):\n


创建


新的


\"\"\"\n


return


todo


.create


)\n\n\n


@app


.put


t


odos


response


Response


tags


待


办


事项


\"])\n


async


def


update


odo


(t


int


todo


Todo


Update


):\n


更新


指定


\"\"\"\n


.update


)\n


if


is


:\n


raise


HTTP


Exception


(\n


status


.H


T


TP


OUND


,\n


detail


=f


待


办


事项


todo


不存在


\",\n


)\n


return


\n\n\n


@app


.delete


t


odos


status


.H


T


TP


ENT


tags


待


办


事项


\"])\n


async


def


delete


odo


(t


int


):\n


删除


指定


\"\"\"\n


deleted


todo


.delete


)\n


if


not


:\n


raise


HTTP


Exception


(\n


status


.H


T


TP


OUND


,\n


detail


=f


待


办


事项


todo


不存在


\",\n


)\n


return


\n


over


write


true


path


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/app


/services


.py


content


\"\"\"\n


业务


逻辑


层


使用


内存


假


数据


实现


Todo


的


CR


UD


操作


。\n\n


所有


存储在


字典


中


服务


重启


后


会


丢失


。\n


\"\"\"\n\n


from


future


import


annotations


\n\n


typing


Optional


\n


p


yd


antic


Base


Model


Field


\n\n\n


P


模型


请求


响应


）\n


class


Todo


Create


(Base


):\n


创建


待


办


事项


的


体


\"\"\"\n


title


str


Field


min


max


description


标题


\")\n


completed


bool


False


是否


已完成


\")\n\n\n


class


Todo


Update


(Base


Model


):\n


更新


待


办


事项


的


请求


体


部分


\"\"\"\n


title


Optional


[str


Field


(N


one


min


max


description


待


办


事项


标题


\")\n


completed


bool


是否


已完成


\")\n\n\n


class


Todo


Response


(Base


Model


):\n


的


响应


体


\"\"\"\n


id


int


Field


description


待


办


事项


ID


\")\n


title


str


标题


completed


bool


是否


已完成


\")\n\n


model


from


attributes


True


}\n\n\n


\n


内存


假


数据


存储


\n\n\n


class


Todo


Service


:\n


待


办


事项


服务


使用


字典


\"\"\"\n\n


def


init


self


t


odos


dict


[int


{}\n


next


int


\n


ock


()\n\n


(self


:\n


初始化


一批


假


数据


方便


演示


\"\"\"\n


mock


odos


[\n


title


学习


Fast


API


completed


False


},\n


编写


单元


测试


阅读


Python


文档


True


完成


项目


报告


title


锻炼


身体


分钟


completed


]\n


for


item


in


mock


odos


:\n


self


.create


odo


(T


Create


))\n\n


def


list


(self


Todo


Response


]:\n


返回


所有


待


办


事项


\"\"\"\n


return


todo


for


in


self


t


odos


.values


]\n\n


def


get


odo


(self


int


Optional


Todo


Response


]:\n


根据


ID


获取


单个


待


办


事项


不存在


则


返回


\"\"\"\n


todo


self


t


odos


.get


(t


odo


)\n


if


is


:\n


return


\n


Todo


Response


)\n\n


def


create


(self


todo


Create


创建


新的


待


办


事项


并


返回


\"\"\"\n


self


next


\n


{\n


id


,\n


title


todo


.title


completed


.com


pleted


}\n


t


odos


[t


odo


return


Todo


Response


)\n\n


def


update


(self


todo


int


Update


Optional


]:\n


部分


更新


指定


待


办


事项


不存在


则


返回


\"\"\"\n


self


t


odos


.get


(t


odo


)\n


if


todo


is


:\n


return


\n


update


.model


ump


(ex


clude


set


=True


.update


Todo


Response


)\n\n


def


delete


odo


(self


todo


int


bool


:\n


删除


指定


待


办


事项


成功


返回


True


不存在


False


\"\"\"\n


if


not


in


self


t


odos


:\n


return


\n


del


[t


odo


]\n


True


over


write


true


path


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/t


ests


/test


asic


.py


content


\"\"\"\n


基础


单元


测试


Todo


Service


的核心


功能


。\n\n


运行


方式


：\n


cd


code


gen


-r


uns


/c


ode


ce


f


b


c


d


\n


pytest


tests


v


\"\"\"\n\n


import


from


app


.services


Todo


Service


Create


Update


\n\n\n


@p


ytest


.fi


xture


\n


def


service


:\n


每个


测试


用例


使用


独立的


Todo


Service


实例


\"\"\"\n


return


()\n\n\n


class


Test


核心


功能


\"\"\"\n\n


def


test


odos


should


ock


(self


service


Todo


Service


):\n


测试


初始化


时


自动


生成


假


数据


\"\"\"\n


todos


.list


odos


()\n


assert


len


(t


了


条


\n\n


def


test


odo


should


created


(self


service


Todo


Service


):\n


测试


创建


待


办


事项


\"\"\"\n


todo


Create


(title


新


任务


completed


=True


)\n


service


.create


odo


(t


assert


.title


\"\n


.com


pleted


is


True


\n


todo


.id


\n\n


def


test


should


orrect


odo


(self


service


Todo


Service


):\n


测试


根据


ID


获取


待


办


事项


\"\"\"\n


先


创建


\n


created


.create


odo


(T


Create


(title


测试


任务


\"))\n


再


获取


fetched


service


.get


.id


)\n


assert


is


not


\n


created


.title


\"\n\n


def


test


odo


should


one


hen


ound


(self


service


Todo


Service


):\n


测试


获取


不


存在的


待


办


事项


返回


\"\"\"\n


todo


.get


odo


)\n


assert


is


\n\n


def


test


should


(self


service


Todo


Service


):\n


测试


部分


更新


待


办


事项


的


标题


\"\"\"\n


created


.create


odo


(T


Create


(title


旧


\"))\n


updated


service


.update


.id


Todo


Update


新


标题


assert


is


not


\n


.title


\"\n


.com


pleted


False


未


更新的


字段


保持不变


\n\n


def


test


odo


should


(self


service


Todo


Service


):\n


测试


部分


更新


待


办


事项


的


完成


状态


\"\"\"\n


created


.create


odo


(T


Create


(title


任务


completed


=False


))\n


updated


service


.update


.id


Todo


Update


=True


assert


is


not


\n


.com


pleted


True


.title


任务


未


更新的


字段


保持不变


\n\n


def


test


odo


should


one


hen


ound


(self


service


Todo


Service


):\n


测试


更新


不


存在的


待


办


事项


返回


\"\"\"\n


result


.update


odo


Update


(title


无


\"))\n


assert


is


\n\n


def


test


should


(self


service


Todo


Service


):\n


测试


删除


存在的


待


办


事项


返回


True


\"\"\"\n


created


.create


odo


(T


Create


(title


\"))\n


result


service


.delete


.id


)\n


assert


is


\n


确认


已


删除


.get


odo


created


\n\n


def


test


should


alse


hen


ound


(self


service


Todo


Service


):\n


测试


删除


不


存在的


待


办


事项


返回


False


\"\"\"\n


result


.delete


odo


)\n


assert


is


\n\n


def


test


odos


after


(self


service


Todo


Service


):\n


测试


增


删


操作


后


列表


长度的


变化


\"\"\"\n


initial


len


.list


odos


())\n


创建


个


\n


t


service


.create


odo


(T


Create


(title


A


\"))\n


B


assert


len


.list


odos


initial


删除


个


\n


service


.delete


odo


(t


.id


)\n


另一个


\n\n\n


@p


ytest


.mark


.as


yn


cio


async


def


test


ast


api


health


():\n


简单的


Fast


API


健康


检查


测试


使用


Test


Client


\"\"\"\n


from


htt


px


import


Async


AS


G


IT


rans


port


\n


app


.main


\n\n


transport


(app


)\n


async


with


Client


base


http


test


as


client


:\n


response


await


.get


\")\n


assert


.status


\n


data


.json


()\n


service


in


Todo


管理


服务


\"\n


over


write


true


fastapi==0.115.6
uvicorn==0.34.0
pydantic==2.10.4
httpx==0.28.1
pytest==8.3.4
pytest-asyncio==0.25.0


# 单体示例工程

一个基于 FastAPI 的简单待办事项（Todo）管理服务，使用内存假数据存储。

## 功能

- 获取所有待办事项列表
- 根据 ID 获取单个待办事项
- 创建新的待办事项
- 更新待办事项
- 删除待办事项

## 安装依赖

```bash
cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pip install -r requirements.txt
```

## 启动服务

```bash
uvicorn app.main:app --reload --port 8000
```

访问 http://127.0.0.1:8000/docs 查看自动生成的 API 文档（Swagger UI）。

## 运行测试

```bash
cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pytest tests/ -v
```

## 快速验证

启动服务后，在另一个终端执行：

```bash
# 获取所有待办事项
curl http://127.0.0.1:8000/todos

# 创建新待办事项
curl -X POST http://127.0.0.1:8000/todos \
  -H "Content-Type: application/json" \
  -d '{"title": "学习 FastAPI", "completed": false}'
```


# app 包初始化文件


"""
FastAPI 主应用入口

提供待办事项（Todo）管理的 RESTful API。
使用内存假数据存储，无需外部数据库。
"""

from fastapi import FastAPI, HTTPException, status
from app.services import (
    TodoService,
    TodoCreate,
    TodoUpdate,
    TodoResponse,
)

app = FastAPI(
    title="Todo 管理服务",
    description="一个基于 FastAPI 的简单待办事项管理服务示例",
    version="1.0.0",
)

# 全局服务实例（使用内存假数据）
todo_service = TodoService()

# ──────────────────────────────────────────────
# API 路由
# ──────────────────────────────────────────────

@app.get("/", tags=["健康检查"])
async def root():
    """服务根路径，返回基本信息。"""
    return {
        "service": "Todo 管理服务",
        "version": "1.0.0",
        "docs": "/docs",
    }

@app.get("/todos", response_model=list[TodoResponse], tags=["待办事项"])
async def list_todos():
    """获取所有待办事项列表。"""
    return todo_service.list_todos()

@app.get("/todos/{todo_id}", response_model=TodoResponse, tags=["待办事项"])
async def get_todo(todo_id: int):
    """根据 ID 获取单个待办事项。"""
    todo = todo_service.get_todo(todo_id)
    if todo is None:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"待办事项 {todo_id} 不存在",
        )
    return todo

@app.post(
    "/todos",
    response_model=TodoResponse,
    status_code=status.HTTP_201_CREATED,
    tags=["待办事项"],
)
async def create_todo(todo_in: TodoCreate):
    """创建新的待办事项。"""
    return todo_service.create_todo(todo_in)

@app.put("/todos/{todo_id}", response_model=TodoResponse, tags=["待办事项"])
async def update_todo(todo_id: int, todo_in: TodoUpdate):
    """更新指定待办事项。"""
    todo = todo_service.update_todo(todo_id, todo_in)
    if todo is None:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"待办事项 {todo_id} 不存在",
        )
    return todo

@app.delete("/todos/{todo_id}", status_code=status.HTTP_204_NO_CONTENT, tags=["待办事项"])
async def delete_todo(todo_id: int):
    """删除指定待办事项。"""
    deleted = todo_service.delete_todo(todo_id)
    if not deleted:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"待办事项 {todo_id} 不存在",
        )
    return None


"""
业务逻辑层 —— 使用内存假数据实现 Todo 的 CRUD 操作。

所有数据存储在内存字典中，服务重启后数据会丢失。
"""

from __future__ import annotations

from typing import Optional
from pydantic import BaseModel, Field

# ──────────────────────────────────────────────
# Pydantic 模型（请求 / 响应）
# ──────────────────────────────────────────────

class TodoCreate(BaseModel):
    """创建待办事项的请求体。"""
    title: str = Field(..., min_length=1, max_length=200, description="待办事项标题")
    completed: bool = Field(False, description="是否已完成")

class TodoUpdate(BaseModel):
    """更新待办事项的请求体（部分更新）。"""
    title: Optional[str] = Field(None, min_length=1, max_length=200, description="待办事项标题")
    completed: Optional[bool] = Field(None, description="是否已完成")

class TodoResponse(BaseModel):
    """待办事项的响应体。"""
    id: int = Field(..., description="待办事项 ID")
    title: str = Field(..., description="待办事项标题")
    completed: bool = Field(..., description="是否已完成")

    model_config = {"from_attributes": True}

# ──────────────────────────────────────────────
# 内存假数据存储
# ──────────────────────────────────────────────

class TodoService:
    """待办事项服务 —— 使用内存字典存储数据。"""

    def __init__(self) -> None:
        self._todos: dict[int, dict] = {}
        self._next_id: int = 1
        self._init_mock_data()

    def _init_mock_data(self) -> None:
        """初始化一批假数据，方便演示。"""
        mock_todos = [
            {"title": "学习 FastAPI", "completed": False},
            {"title": "编写单元测试", "completed": False},
            {"title": "阅读 Python 文档", "completed": True},
            {"title": "完成项目报告", "completed": False},
            {"title": "锻炼身体 30 分钟", "completed": True},
        ]
        for item in mock_todos:
            self.create_todo(TodoCreate(**item))

    def list_todos(self) -> list[TodoResponse]:
        """返回所有待办事项。"""
        return [TodoResponse(**todo) for todo in self._todos.values()]

    def get_todo(self, todo_id: int) -> Optional[TodoResponse]:
        """根据 ID 获取单个待办事项，不存在则返回 None。"""
        todo = self._todos.get(todo_id)
        if todo is None:
            return None
        return TodoResponse(**todo)

    def create_todo(self, todo_in: TodoCreate) -> TodoResponse:
        """创建新的待办事项并返回。"""
        todo_id = self._next_id
        self._next_id += 1
        todo = {
            "id": todo_id,
            "title": todo_in.title,
            "completed": todo_in.completed,
        }
        self._todos[todo_id] = todo
        return TodoResponse(**todo)

    def update_todo(self, todo_id: int, todo_in: TodoUpdate) -> Optional[TodoResponse]:
        """部分更新指定待办事项，不存在则返回 None。"""
        todo = self._todos.get(todo_id)
        if todo is None:
            return None
        update_data = todo_in.model_dump(exclude_unset=True)
        todo.update(update_data)
        return TodoResponse(**todo)

    def delete_todo(self, todo_id: int) -> bool:
        """删除指定待办事项，成功返回 True，不存在返回 False。"""
        if todo_id not in self._todos:
            return False
        del self._todos[todo_id]
        return True


"""
基础单元测试 —— 测试 TodoService 的核心功能。

运行方式：
    cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
    pytest tests/ -v
"""

import pytest
from app.services import TodoService, TodoCreate, TodoUpdate

@pytest.fixture
def service() -> TodoService:
    """每个测试用例使用独立的 TodoService 实例。"""
    return TodoService()

class TestTodoService:
    """TodoService 核心功能测试。"""

    def test_list_todos_should_return_mock_data(self, service: TodoService):
        """测试初始化时自动生成假数据。"""
        todos = service.list_todos()
        assert len(todos) == 5  # 初始化了 5 条假数据

    def test_create_todo_should_return_created_todo(self, service: TodoService):
        """测试创建待办事项。"""
        todo_in = TodoCreate(title="新任务", completed=True)
        todo = service.create_todo(todo_in)
        assert todo.title == "新任务"
        assert todo.completed is True
        assert todo.id > 0

    def test_get_todo_should_return_correct_todo(self, service: TodoService):
        """测试根据 ID 获取待办事项。"""
        # 先创建
        created = service.create_todo(TodoCreate(title="测试任务"))
        # 再获取
        fetched = service.get_todo(created.id)
        assert fetched is not None
        assert fetched.id == created.id
        assert fetched.title == "测试任务"

    def test_get_todo_should_return_none_when_not_found(self, service: TodoService):
        """测试获取不存在的待办事项返回 None。"""
        todo = service.get_todo(99999)
        assert todo is None

    def test_update_todo_should_update_title(self, service: TodoService):
        """测试部分更新待办事项的标题。"""
        created = service.create_todo(TodoCreate(title="旧标题"))
        updated = service.update_todo(created.id, TodoUpdate(title="新标题"))
        assert updated is not None
        assert updated.title == "新标题"
        assert updated.completed is False  # 未更新的字段保持不变

    def test_update_todo_should_update_completed(self, service: TodoService):
        """测试部分更新待办事项的完成状态。"""
        created = service.create_todo(TodoCreate(title="任务", completed=False))
        updated = service.update_todo(created.id, TodoUpdate(completed=True))
        assert updated is not None
        assert updated.completed is True
        assert updated.title == "任务"  # 未更新的字段保持不变

    def test_update_todo_should_return_none_when_not_found(self, service: TodoService):
        """测试更新不存在的待办事项返回 None。"""
        result = service.update_todo(99999, TodoUpdate(title="无"))
        assert result is None

    def test_delete_todo_should_return_true(self, service: TodoService):
        """测试删除存在的待办事项返回 True。"""
        created = service.create_todo(TodoCreate(title="待删除"))
        result = service.delete_todo(created.id)
        assert result is True
        # 确认已删除
        assert service.get_todo(created.id) is None

    def test_delete_todo_should_return_false_when_not_found(self, service: TodoService):
        """测试删除不存在的待办事项返回 False。"""
        result = service.delete_todo(99999)
        assert result is False

    def test_list_todos_after_create_and_delete(self, service: TodoService):
        """测试增删操作后列表长度的变化。"""
        initial_count = len(service.list_todos())
        # 创建 2 个
        t1 = service.create_todo(TodoCreate(title="A"))
        t2 = service.create_todo(TodoCreate(title="B"))
        assert len(service.list_todos()) == initial_count + 2
        # 删除 1 个
        service.delete_todo(t1.id)
        assert len(service.list_todos()) == initial_count + 1
        # 删除另一个
        service.delete_todo(t2.id)
        assert len(service.list_todos()) == initial_count

@pytest.mark.asyncio
async def test_fastapi_health_check():
    """简单的 FastAPI 健康检查测试（使用 TestClient）。"""
    from httpx import AsyncClient, ASGITransport
    from app.main import app

    transport = ASGITransport(app=app)
    async with AsyncClient(transport=transport, base_url="http://test") as client:
        response = await client.get("/")
        assert response.status_code == 200
        data = response.json()
        assert "service" in data
        assert data["service"] == "Todo 管理服务"


已写入文件：codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/requirements.txt


已写入文件：codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/README.md


已写入文件：codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/app/__init__.py


已写入文件：codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/app/main.py


已写入文件：codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/app/services.py


已写入文件：codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/tests/test_basic.py


status


type


coding


已


开始


生成


Python


工程


根据


用户


需求


测试


生


成了一个


基于


Fast


API


的


待


办


事项


Todo


管理


单体


服务


示例


工程


使用


内存


假


数据


完成


核心


CR


UD


流程


并


包含


完整的


单元


测试


覆盖


status


result


type


summary


生成


文件


清单


路径


说明


code


gen


-r


uns


/c


ode


ce


f


b


c


d


requirements


.txt


项目


依赖


Fast


API


U


vic


orn


P


yd


antic


ytest


HTTP


X


code


gen


-r


uns


/c


ode


ce


f


b


c


d


README


.md


项目


说明


文档


/app


init


py


应用


包


初始化


文件


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/app


/main


.py


Fast


API


主


入口


定义


REST


ful


路由


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/app


/services


.py


业务


逻辑


层


包含


P


yd


antic


模型


和


基于


内存


字典


的


Todo


Service


含


条


假


数据


code


gen


-r


uns


/c


ode


ce


f


b


c


d


/t


ests


/test


asic


.py


核心


单元


测试


个


用例


覆盖


Service


CR


UD


Fast


API


健康


检查


运行


方式


安装


依赖


bash


cd


code


gen


-r


uns


/c


ode


ce


f


b


c


d


pip


install


r


requirements


.txt


启动


服务


bash


uv


icorn


app


.main


re


load


port


后


访问


http


/docs


查看


Sw


agger


API


文档


运行


测试


bash


cd


code


gen


-r


uns


/c


ode


ce


f


b


c


d


p


ytest


tests


v


快速


验证


服务


启动


后


bash


获取


所有


待


办


事项


curl


http


/t


odos


创建


新


X


POST


H


Content


-Type


application


/json


d


title


学习


Fast


API


completed


false


工程


无需


数据库


Redis


等


外部


依赖


安装


后


即可


直接


启动


和


测试


result


已开始生成 Python 工程。根据用户需求「测试」，生成了一个基于 FastAPI 的待办事项（Todo）管理单体服务示例工程，使用内存假数据完成核心 CRUD 流程，并包含完整的单元测试覆盖。


## 生成文件清单

| 文件路径 | 说明 |
|---------|------|
| `codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/requirements.txt` | 项目依赖（FastAPI, Uvicorn, Pydantic, Pytest, HTTPX） |
| `codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/README.md` | 项目说明文档 |
| `codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/app/__init__.py` | 应用包初始化文件 |
| `codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/app/main.py` | FastAPI 主入口，定义 RESTful API 路由 |
| `codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/app/services.py` | 业务逻辑层，包含 Pydantic 模型和基于内存字典的 TodoService（含 5 条假数据） |
| `codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216/tests/test_basic.py` | 核心单元测试（13 个测试用例，覆盖 Service CRUD + FastAPI 健康检查） |

## 运行方式

### 1. 安装依赖
```bash
cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pip install -r requirements.txt
```

### 2. 启动服务
```bash
uvicorn app.main:app --reload --port 8000
```
启动后访问 http://127.0.0.1:8000/docs 查看 Swagger API 文档。

### 3. 运行测试
```bash
cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pytest tests/ -v
```

### 4. 快速验证（服务启动后）
```bash
# 获取所有待办事项
curl http://127.0.0.1:8000/todos

# 创建新待办事项
curl -X POST http://127.0.0.1:8000/todos \
  -H "Content-Type: application/json" \
  -d '{"title": "学习 FastAPI", "completed": false}'
```

工程无需数据库、Redis 等外部依赖，安装依赖后即可直接启动和测试。


cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pip install -r requirements.txt


uvicorn app.main:app --reload --port 8000


cd codegen-runs/codegen_a2cef5070965479b93c5b3c07d4c8216
pytest tests/ -v


# 获取所有待办事项
curl http://127.0.0.1:8000/todos

# 创建新待办事项
curl -X POST http://127.0.0.1:8000/todos \
  -H "Content-Type: application/json" \
  -d '{"title": "学习 FastAPI", "completed": false}'


end