本文档记录项目的代码质量标准、工具链及近期优化,遵循行业最佳实践。
| 命令 | 说明 |
|---|---|
make lint |
Ruff 语法/风格检查 |
make format |
Ruff 自动格式化 |
make type-check |
Mypy 类型检查 |
make security-scan |
Bandit 安全扫描 |
make check |
lint + type-check |
make pre-commit-run |
运行全部 pre-commit 钩子 |
make test |
运行测试套件 |
- exceptions.py:为所有异常类的
__init__参数添加完整类型注解 - 提升 IDE 补全与静态类型检查准确性
- bt_api.py:
init_logger()添加-> object返回类型及 docstring
- log_message.py:
_get_project_logs_dir()中的except Exception增加as e与 debug 日志 - 便于排查包导入失败时的 fallback 路径
- 新增
bandit[toml]为 dev 依赖 - 新增
make security-scan目标 pyproject.toml配置[tool.bandit]排除 CTP/tests
- functions/update_data/:
download_swap_history_bar_from_binance.py、download_funding_rate_from_binance.py、download_bars_from_okex.py、download_spot_history_bar_from_okx.py、download_spot_history_bar_from_binance.py、update_exchange_symbol_info.py:所有requests.get/post添加timeout=30 - functions/utils.py:
get_public_ip()中requests.get添加timeout=10 - 消除网络请求无限等待风险,符合安全最佳实践
- config_loader.py:新增
get_exchange_config_path(filename)辅助函数 - containers/exchanges/:
binance_exchange_data.py、okx_exchange_data.py、kraken_exchange_data.py、bitfinex_exchange_data.py配置路径迁移至 pathlib - functions/log_message.py:
_get_project_logs_dir()、SpdLogManager中os.path迁移至pathlib.Path - 提升可读性与跨平台兼容性
- S113 Kraken:
live_kraken/request_base.py中req_lib.post()显式传入timeout=参数,消除 Ruff S113 静态检测误报 - pathlib 扩展迁移:
bitflyer、bitrue、bitunix、latoken、bigone、bithumb、satoshitango、mercado_bitcoin、zebpay、coincheck、kucoin、ib_web等 exchange_data 统一使用get_exchange_config_path() - PERF 性能优化:
pancakeswap_pool.py使用列表推导替代filter_by_tvl/filter_by_volume循环;anomaly_detector.py、ensemble_model.py中_dict_to_features使用列表推导;exchange_health.py、advanced_websocket_manager.py使用列表推导 - logging_system:
extra.update(kwargs)替代循环赋值 - S110/S112 异常日志:
live_ib_web_feed.pyportfolio 端点失败时记录 debug 日志;monitoring/metrics.py中 metric.collect 失败时记录 debug 日志
- S110/S112 异常日志:
my_websocket_app.py代理解析、WebSocket 重启失败时增加logger.debug;monitoring/config.py清理资源失败时记录 debug 日志;monitoring/elk.pyLogstash 发送失败时记录 debug;monitoring/prometheus.py服务循环异常时记录 debug;audit_logger.py解析/读取失败时记录 debug - PERF401 性能优化:
pancakeswap_exchange_data.py稳定币与交易对使用list.extend替代循环 append;live_cryptocom/request_base.py使用parts.extend()替代循环;live_dydx/spot.pyK 线归一化使用列表推导 - S113 requests timeout:
tests/containers/symbols/test_binance_symbol.py、tests/containers/bars/test_ok_request_bar.py中requests.get添加timeout=30
- 行宽:100 字符
- 类型:公共 API 使用类型注解,优先 3.11+ 语法
- 异常:使用
bt_api_py.exceptions中的自定义异常 - 文档:Google 风格 docstring
- 命名:类 PascalCase,函数 snake_case,常量 UPPER_SNAKE_CASE
| 项目 | 说明 | 参考 |
|---|---|---|
| S110/S112 | try-except 中增加 logger.debug() |
✅ 已修复核心模块(my_websocket、monitoring、audit_logger) |
| S113 | requests 调用添加 timeout= |
✅ 已修复(含 Kraken、tests) |
| PERF401/402/403 | 用列表/字典推导替代循环 | ✅ 已优化 pancakeswap、cryptocom、dydx 等 |
| pathlib 迁移 | os.path → pathlib.Path |
✅ exchange_data 已全部迁移 |
- 已启用
disallow_untyped_defs:bt_api_py.exceptions、bt_api_py.event_bus - 后续扩展计划:按模块逐步启用,建议顺序
registry→bt_api→logging_*→containers子模块
- fail_under:已从 60 提升至 80
- 若
make test-cov未达标,需补充单元测试;过渡期可临时降至 70