Skip to content

fix(ex): ex tick --date 接受 YYYYMMDD 整数,修复 AttributeError - #56

Merged
handsomejustin merged 1 commit into
handsomejustin:mainfrom
Harveyliu007:main
Aug 28, 2026
Merged

fix(ex): ex tick --date 接受 YYYYMMDD 整数,修复 AttributeError#56
handsomejustin merged 1 commit into
handsomejustin:mainfrom
Harveyliu007:main

Conversation

@Harveyliu007

Copy link
Copy Markdown
Contributor

CLI 侧传入 YYYYMMDD 整数,而 MacExClient.goods_tick_chart() 只接受 datetime.date 对象。cmd_ex.py 中该调用长期带 # type: ignore[arg-type],类型系统也没拦住。

根因

  • cli/cmd_ex.pyex tick--date(int,YYYYMMDD)原样传给 goods_tick_chart(query_date=...)
  • MacExClient / AsyncMacExClientgoods_tick_chartgoods_transaction(共 4 个方法)签名是 query_date: date | None,内部直接 query_date.year 编码 YYYYMMDD,int 必然抛 AttributeError
  • A 股侧 MacClient.get_tick_chart() 早已支持 int(内部转换),ex 侧漏了同类处理

修复

与 A 股 MacClient 的 YYYYMMDD 整数语义对齐:

  1. ex/mac_client.py 新增 _coerce_query_date():int(YYYYMMDD)/ date / None 统一归一为 date
  2. MacExClient / AsyncMacExClientgoods_tick_chartgoods_transaction 签名改为 query_date: int | date | None,内部经 _coerce_query_date 转换(含港股 ex 协议路由分支)
  3. cli/cmd_ex.py 移除掩盖问题的 # type: ignore[arg-type]ex tick --help 补充 --date 用法示例

验证

  • 新增 tests/unit/test_ex_tick_chart_date.py 9 个回归测试:归一化纯函数(int/date/None/前导零)、同步/异步客户端三种输入、美股(74)与港股(31)路由、CLI 端到端(mock 连接层,离线)
  • 实测修复前崩溃的命令:easy-tdx ex tick US_STOCK TSLA --date 20260827 → 正常返回 390 个分时点(21:30 开盘 → 03:59 收盘)
  • 全套单测:1050 passed;ruff / mypy strict 通过

改动文件

文件 说明
src/easy_tdx/ex/mac_client.py 新增 _coerce_query_date;4 个方法支持 int 日期
src/easy_tdx/cli/cmd_ex.py 移除 type ignore,补充示例
tests/unit/test_ex_tick_chart_date.py 新增 9 个回归测试

备注

ex tick--days 选项当前仍未接线(扩展市场单日分时协议无多日查询),本次未改动,可另开 issue 跟进。

@handsomejustin
handsomejustin merged commit 0b349e6 into handsomejustin:main Aug 28, 2026
@handsomejustin

Copy link
Copy Markdown
Owner

感谢 @Harveyliu007 的优质贡献 🎉

这个 PR 已合并并随 v1.20.12 发布。几点特别值得肯定:

  • 根因定位准确:不仅修了表象,还指出 cmd_ex.py# type: ignore[arg-type] 长期掩盖了类型问题,并追溯到 A 股侧 MacClient.get_tick_chart 的 YYYYMMDD 整数语义,ex 侧补齐了对齐
  • 实现干净_coerce_query_date() 纯函数归一 int/date/None,同步/异步共 4 个方法全覆盖,港股路由分支也没漏
  • 测试扎实:13 个回归测试离线覆盖纯函数、sync/async、美股(74)/港股(31)路由和 CLI 端到端
  • 边界清晰:主动交代 --days 未接线的遗留问题,没有顺手夹带

维护者侧已实测验证:ruff / mypy strict 通过,easy-tdx ex tick US_STOCK TSLA --date 20260827 实跑正常返回当日分时。期待更多贡献!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants