taolib.symphony.tracker.linear.normalize#

Linear 响应规范化 — 将原始 GraphQL node 转换为领域模型 Issue。

主要处理: - labels → 小写规范化 - blocked_by → 从 inverseRelations 中提取 type=="blocks" 的关联 issue - priority → 非整数映射为 None - state → 从嵌套的 state.name 提取 - 日期 → ISO 8601 字符串解析为 datetime

Functions#

normalize_issue(→ taolib.symphony.tracker.models.Issue)

将 Linear GraphQL 返回的 issue node 规范化为 Issue

_extract_state(→ str)

从嵌套的 state 对象中提取状态名称。

_extract_labels(→ list[str])

从 labels.nodes 中提取标签名并转为小写。

_extract_blocked_by(→ list[str])

从 inverseRelations.nodes 中提取 type 为 'blocks' 的关联 issue ID。

_parse_priority(→ int | None)

优先级解析:仅整数 1-4 有效,其余映射为 None。

_parse_datetime(→ datetime.datetime | None)

ISO 8601 日期字符串解析,失败返回 None。

Module Contents#

taolib.symphony.tracker.linear.normalize.normalize_issue(node: dict) taolib.symphony.tracker.models.Issue#

将 Linear GraphQL 返回的 issue node 规范化为 Issue

参数:

node -- Linear API 返回的原始 issue 字典, 包含嵌套的 statelabelsinverseRelations 等字段。

返回:

规范化后的 Issue 实例。

taolib.symphony.tracker.linear.normalize._extract_state(node: dict) str#

从嵌套的 state 对象中提取状态名称。

taolib.symphony.tracker.linear.normalize._extract_labels(node: dict) list[str]#

从 labels.nodes 中提取标签名并转为小写。

taolib.symphony.tracker.linear.normalize._extract_blocked_by(node: dict) list[str]#

从 inverseRelations.nodes 中提取 type 为 'blocks' 的关联 issue ID。

Linear 中 inverseRelations 表示"该 issue 被其他 issue 阻塞", 其中 type == "blocks" 意味着关联的 issue 阻塞了当前 issue。

taolib.symphony.tracker.linear.normalize._parse_priority(value: object) int | None#

优先级解析:仅整数 1-4 有效,其余映射为 None。

taolib.symphony.tracker.linear.normalize._parse_datetime(raw: str | None) datetime.datetime | None#

ISO 8601 日期字符串解析,失败返回 None。