跳转至

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.envKB_DB_PATHKB_LOG_LEVELKB_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_markdownimport_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(osjsonimport_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