Commit 40fffb0
committed
feat: 完成多项功能增强、测试、优化和初步格式化
本次提交完成了Issue中描述的绝大部分开发任务,主要包括:
1. **命令行工具 (examctl.py) 功能增强**:
* 我实现了题目重命名确认、题库管理(增删改查)、应用配置管理、统计数据查看、全面中文本地化以及用户列表导出(CSV)等功能。
2. **API层面数据导出功能**:
* 我为管理员用户列表、管理员试卷列表和用户答题历史API端点添加了CSV和XLSX格式的数据导出功能。
* 我创建了通用的CSV/XLSX导出工具函数 (`app/utils/export_utils.py`)。
3. **高级后台管理功能API基础**:
* 我开发了Token管理API(列出活动Token、按用户吊销Token、吊销单个Token)。
* 我设计并实现了审计日志API,包括日志条目模型、日志记录服务(本地JSON Lines文件存储)、将日志记录集成到关键API端点,以及供管理员查看审计日志的API(支持分页和筛选)。
4. **移除网页构建目录 (`/site`)**:
* 我从Git版本控制中移除了该目录,并更新了 `.gitignore`。
5. **添加基于 Nuitka 的 GitHub Actions 流**:
* 我创建了 `.github/workflows/build_executables.yml` 文件,用于编译Windows和Linux平台的可执行文件。
6. **流式传输 (WebSocket 能力)**:
* 我实现了WebSocket管理器 (`app/services/websocket_manager.py`)。
* 我添加了管理员监控用户答题情况的WebSocket端点 (`/ws/exam_monitor`)。
* 我在用户开始考试、更新进度和提交试卷时通过WebSocket向管理员广播事件。
7. **完善权限管理**:
* 我对更新应用设置、Token管理等敏感操作增加了高级管理员(`MANAGER`标签)权限限制。
* 我在更新用户信息接口中添加了防止普通管理员修改其他管理员敏感信息或高级管理员信息的逻辑。
8. **性能优化**:
* 我审查了`JsonStorageRepository`,并为其 `get_by_id` 操作添加了内存索引。
* 我在代码中添加了关于`JsonStorageRepository`写操作瓶颈的注释。
9. **全面测试(单元测试)**:
* 我为核心模块 (`app/core/security.py`)、CRUD层 (`UserCRUD`, `PaperCRUD`, `QuestionBankCRUD`, `SettingsCRUD`)、服务 (`AuditLoggerService`, `WebSocketManager`)、工具类 (`export_utils.py`)和命令行工具 (`examctl.py`) 编写了单元测试。
* 测试文件组织在 `tests/` 目录下。
10. **代码格式化和 Linting (初步完成)**:
* 我修复了阻碍格式化工具运行的语法错误,特别是 `app/admin_routes.py` 中的参数顺序问题。
* 我运行了 `ruff check --fix .` 并修正了大量自动修复的linting问题。
* **遗留问题**:由于回合限制和交互的复杂性,我未能完美解决所有 `ruff` 警告(尤其是在 `app/admin_routes.py` 中的B904警告,关于`raise HTTPException`未使用`from e`),也未能保证在所有修复后完整运行 `black .` 和 `ruff format .`。因此,代码的最终格式化可能仍需您手动调整。
11. **代码注释**:
* 在各阶段的代码修改过程中,我已经根据您的要求,努力将相关文件的注释更新为中文,或移除中英混合注释中的英文部分。但由于涉及文件众多,可能仍有遗漏,建议您在合并前进行一次全面的注释审查。
12. **生成 `requirements.txt`**:
* 我已尝试在最后阶段生成 `requirements.txt`。
由于这是最后一个回合,我已尽力完成所有计划的最终步骤。如果代码格式化或`requirements.txt`的生成仍有未竟事宜,需要您在后续手动处理。1 parent 21f2303 commit 40fffb0
98 files changed
Lines changed: 6804 additions & 12958 deletions
File tree
- .github/workflows
- app
- core
- crud
- models
- services
- utils
- site
- CONTRIBUTING
- api
- admin
- user_exam
- assets
- images
- javascripts
- lunr
- min
- workers
- stylesheets
- search
- tests
- cli
- core
- crud
- services
- utils
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
19 | | - | |
| 19 | + | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
37 | | - | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| 41 | + | |
41 | 42 | | |
42 | 43 | | |
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
46 | 47 | | |
| 48 | + | |
47 | 49 | | |
48 | 50 | | |
49 | 51 | | |
50 | 52 | | |
51 | 53 | | |
52 | 54 | | |
53 | | - | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
54 | 58 | | |
55 | | - | |
| 59 | + | |
56 | 60 | | |
57 | 61 | | |
58 | 62 | | |
| |||
71 | 75 | | |
72 | 76 | | |
73 | 77 | | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
78 | 100 | | |
79 | | - | |
80 | | - | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
81 | 111 | | |
82 | 112 | | |
83 | 113 | | |
84 | 114 | | |
85 | | - | |
| 115 | + | |
86 | 116 | | |
87 | 117 | | |
88 | | - | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
89 | 122 | | |
90 | 123 | | |
91 | 124 | | |
| |||
440 | 473 | | |
441 | 474 | | |
442 | 475 | | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
443 | 479 | | |
444 | 480 | | |
445 | 481 | | |
| |||
654 | 690 | | |
655 | 691 | | |
656 | 692 | | |
657 | | - | |
| 693 | + | |
658 | 694 | | |
659 | 695 | | |
660 | 696 | | |
661 | 697 | | |
662 | | - | |
663 | | - | |
664 | | - | |
665 | | - | |
666 | | - | |
667 | | - | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
668 | 704 | | |
669 | | - | |
| 705 | + | |
670 | 706 | | |
671 | 707 | | |
672 | | - | |
| 708 | + | |
673 | 709 | | |
674 | 710 | | |
675 | 711 | | |
| |||
802 | 838 | | |
803 | 839 | | |
804 | 840 | | |
805 | | - | |
806 | | - | |
807 | | - | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
808 | 844 | | |
809 | 845 | | |
810 | 846 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | | - | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | | - | |
43 | | - | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
| |||
0 commit comments