kb —— 知识库 CLI(第 2 周小项目)¶
命令行管理学习笔记:添加、列出、按关键词/正则搜索、导出 JSON、从 Markdown 目录批量导入。规格与验收见 plan/week2.md 末节。
运行¶
uv sync # 仓库根目录执行一次(kb 是 workspace 成员)
uv run kb --help
uv run kb add "Python 笔记" -t python -b "正文"
uv run kb list --tag python
uv run kb search "正则.*表达式" --regex
uv run kb export out.json
uv run kb import ./research
uv run pytest projects/kb --cov=kb --cov-report=term-missing
uv run ruff check projects/kb # 本项目额外开了 N / D / SIM 规则
配置:复制 .env.example 为 .env(KB_DB_PATH、KB_LOG_LEVEL、KB_LOG_FILE)。
结构与你要做的事¶
| 文件 | 状态 |
|---|---|
settings.py cli.py __main__.py |
已完整,读懂即可 |
repository.py |
NoteRepository 协议与 InMemoryNoteRepository 已完整(范例);SqliteNoteRepository 的 6 个方法 TODO |
models.py |
字段已给;normalize_tags 校验器 TODO |
service.py |
NoteService 的 7 个方法 TODO |
markdown_import.py |
parse_markdown、import_directory TODO |
logging_config.py |
JsonFormatter 已给;setup_logging TODO |
tests/ |
已完整,conftest.py 里的 fixture 值得读一遍 |
做法:先跑 uv run pytest projects/kb -q 看全红,按 models → repository → service → markdown_import → logging_config 的顺序把测试一组组变绿;骨架里被删掉的 import(os、json、import_directory 等)由你自己加回来。
验收¶
uv run pytest projects/kb --cov=kb全绿且覆盖率 ≥80%uv run ruff check projects/kb零警告;Pylance 零错误- 日志同时进控制台(rich)与
KB_LOG_FILE(JSON、UTF-8) .env未入库、.env.example已入库;≥6 次 Conventional Commits 推送到 cnb.cool
参考答案:exercises/solutions/week2/kb_solution/src/kb/。想把项目重置回骨架:uv run python tools/kb_skeleton.py;想把答案装回来对照运行:uv run python tools/kb_skeleton.py --solution。