Files
cutThenThink/tests/test_browse_view.py
congsh c4a77f8aa4 feat: 实现CutThenThink P0阶段核心功能
项目初始化
- 创建完整项目结构(src/, data/, docs/, examples/, tests/)
- 配置requirements.txt依赖
- 创建.gitignore

P0基础框架
- 数据库模型:Record模型,6种分类类型
- 配置管理:YAML配置,支持AI/OCR/云存储/UI配置
- OCR模块:PaddleOCR本地识别,支持云端扩展
- AI模块:支持OpenAI/Claude/通义/Ollama,6种分类
- 存储模块:完整CRUD,搜索,统计,导入导出
- 主窗口框架:侧边栏导航,米白配色方案
- 图片处理:截图/剪贴板/文件选择/图片预览
- 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制
- 分类浏览:卡片网格展示,分类筛选,搜索,详情查看

技术栈
- PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK
- 共47个Python文件,4000+行代码

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 18:21:31 +08:00

214 lines
6.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
测试浏览视图功能
创建测试数据并启动浏览视图进行验证
"""
import sys
from datetime import datetime
from pathlib import Path
from PyQt6.QtWidgets import QApplication
from PyQt6.QtCore import Qt
# 添加项目路径
sys.path.insert(0, str(Path(__file__).parent.parent))
from src.models.database import init_database, Record, RecordCategory, get_db
from src.gui.widgets.browse_view import BrowseView
def create_test_data():
"""创建测试数据"""
print("正在创建测试数据...")
# 初始化数据库
db_path = "sqlite:////home/congsh/CodeSpace/ClaudeSpace/CutThenThink/data/cutnthink.db"
init_database(db_path)
session = get_db()
# 检查是否已有数据
existing_count = session.query(Record).count()
if existing_count > 0:
print(f"数据库中已有 {existing_count} 条记录,跳过创建测试数据")
session.close()
return
# 创建测试记录
test_records = [
{
"image_path": "/tmp/test_todo_1.png",
"ocr_text": "完成项目报告\n需要在周五之前提交季度报告给老板",
"category": RecordCategory.TODO,
"ai_result": """# 任务分析
这是一个待办事项,需要在周五之前完成。
## 行动建议
1. 整理季度数据和成果
2. 撰写报告草稿
3. 请同事审阅
4. 最终修改并提交
**截止时间**: 本周五""",
"tags": ["工作", "报告"],
"notes": "重要优先级高"
},
{
"image_path": "/tmp/test_note_1.png",
"ocr_text": "Python学习笔记\n\n1. 列表推导式: [x*2 for x in range(10)]\n2. 装饰器: @property\n3. 生成器: yield",
"category": RecordCategory.NOTE,
"ai_result": """# Python笔记摘要
这份笔记涵盖了三个重要的Python概念
- 列表推导式: 简洁的列表创建方式
- 装饰器: 修改函数行为的工具
- 生成器: 内存友好的迭代器
**建议**: 可以添加更多实际例子加深理解。""",
"tags": ["编程", "Python"],
"notes": "需要复习装饰器部分"
},
{
"image_path": "/tmp/test_idea_1.png",
"ocr_text": "产品创意:智能日程助手\n\n功能:\n- 自动识别会议邀请\n- 智能安排时间\n- 提醒重要事项",
"category": RecordCategory.IDEA,
"ai_result": """# 创意评估
这是一个很好的产品方向!
## 优势
- 解决实际痛点
- 技术可行性高
## 建议
1. 先做MVP验证核心功能
2. 考虑与现有日历应用集成
3. 加入AI推荐功能
**推荐指数**: ⭐⭐⭐⭐⭐""",
"tags": ["产品", "创意"],
"notes": "可以作为下一个项目"
},
{
"image_path": "/tmp/test_ref_1.png",
"ocr_text": "Django REST Framework 官方文档\n\nhttps://www.django-rest-framework.org/\n\nViewSets和Routers的使用",
"category": RecordCategory.REF,
"ai_result": """# 学习资源
Django REST Framework 是构建Web API的强大工具。
## 核心概念
- **Serializers**: 数据序列化和验证
- **ViewSets**: 视图逻辑组织
- **Routers**: URL自动生成
## 建议学习路径
1. 快速入门教程
2. 序列化器深入
3. 认证和权限""",
"tags": ["文档", "Django"],
"notes": "需要深入学习认证部分"
},
{
"image_path": "/tmp/test_funny_1.png",
"ocr_text": "程序员段子\n\n程序员最讨厌的四件事:\n1. 写注释\n2. 写文档\n3. 别人不写注释\n4. 别人不写文档",
"category": RecordCategory.FUNNY,
"ai_result": """# 😄 经典段子
这是一个程序员圈子里很火的段子!
## 为什么好笑
- 说出了程序员的心声
- 既矛盾又真实
- 自嘲式幽默
## 启示
代码质量很重要,但也不能忽视文档工作啊~ 😅""",
"tags": ["幽默", "程序员"],
"notes": "太真实了"
},
{
"image_path": "/tmp/test_text_1.png",
"ocr_text": "这是一段普通的文本内容,用于测试纯文本类型的记录。\n\n可以包含各种文字信息,比如会议记录、聊天记录等。",
"category": RecordCategory.TEXT,
"ai_result": None,
"tags": ["测试"],
"notes": "测试用文本记录"
},
# TODO类型更多测试数据
{
"image_path": "/tmp/test_todo_2.png",
"ocr_text": "买咖啡 ☕\n\n- 意式浓缩豆\n- 拿铁咖啡豆\n- 滤纸",
"category": RecordCategory.TODO,
"ai_result": "# 购物清单\n\n记得去超市买咖啡用品!",
"tags": ["购物", "咖啡"],
"notes": "周末去买"
},
# NOTE类型更多测试数据
{
"image_path": "/tmp/test_note_2.png",
"ocr_text": "会议记录 - 产品评审\n\n日期: 2024-01-15\n\n讨论内容:\n1. 新功能开发计划\n2. 用户反馈处理\n3. 下季度规划",
"category": RecordCategory.NOTE,
"ai_result": """# 会议要点
## 产品评审会议
**日期**: 2024-01-15
### 决策事项
1. 新功能开发优先级已确定
2. 用户反馈需要建立跟进机制
3. 下季度开始筹备规划会议
### 行动项
- [ ] 整理会议纪要
- [ ] 跟进各个部门负责人""",
"tags": ["会议", "工作"],
"notes": "重要会议"
},
]
# 添加记录到数据库
for i, data in enumerate(test_records):
record = Record(
image_path=data["image_path"],
ocr_text=data["ocr_text"],
category=data["category"],
ai_result=data.get("ai_result"),
tags=data.get("tags"),
notes=data.get("notes"),
created_at=datetime.now(),
)
session.add(record)
print(f"已创建测试记录 {i+1}/{len(test_records)}: {data['category']}")
session.commit()
print(f"\n成功创建 {len(test_records)} 条测试记录")
session.close()
def main():
"""主函数"""
# 创建应用
app = QApplication(sys.argv)
app.setApplicationName("CutThenThink 浏览视图测试")
# 创建测试数据
create_test_data()
# 创建并显示浏览视图
view = BrowseView()
view.setWindowTitle("浏览视图测试")
view.resize(1200, 800)
view.show()
# 运行应用
sys.exit(app.exec())
if __name__ == "__main__":
main()