yueli 896bbd8eeb fix(audit): 修复 _collect_snapshot 关系守卫失效导致的审计丢失
hasattr(attr, 'property') 对 inspect(obj).attrs 产出的 AttributeState
恒为 False,这个守卫从未生效过 —— 关系属性一律被 getattr() 取了值。

lazy='dynamic' 的关系(如 SysWarehouseLocation.children)拿到的是
AppenderQuery,_serialize_value 对非基础类型原样放行,最终 json.dumps
兜底走 str(query) → query.session → Session.flush(),而此刻正在 flush 中,
抛 InvalidRequestError("Session is already flushing"),整条审计被 except 吞掉。

后果:
- sys_warehouse_location 的新建/删除审计长期为 0 条
  (UPDATE 走 attr.history 而非 getattr,所以不受影响,症状是间歇性的)
- 批量生成 3050 个节点时逐行抛 3050 次异常:请求 873ms → 修复后 349ms

改为按 inspect(cls).relationships 的名字排除;before_update_listener
里的同一处坏守卫一并修正。

另把 warehouse 登记进 AGGREGATE_PATH_MARKERS:库位批量生成一次可产出
3000+ 节点,未登记时一次点击写 3000+ 条审计,登记后只留一条带 targets
清单的记录。
2026-09-29 12:03:43 +08:00
2026-09-28 15:29:46 +08:00
2026-04-28 16:07:11 +08:00
2026-04-28 16:07:11 +08:00
2026-04-28 16:07:11 +08:00
Description
No description provided
89 MiB
Languages
Python 70.2%
CSS 14.9%
Vue 7.6%
HTML 4.2%
TypeScript 3.1%