taolib.symphony.tracker.linear#
Linear 子包 — Linear API 客户端实现。
Submodules#
Classes#
Linear API 客户端,基于 gql + httpx 异步传输。 |
Package Contents#
- class taolib.symphony.tracker.linear.LinearClient(config: taolib.symphony.tracker.models.TrackerConfig)#
Bases:
taolib.symphony.tracker.base.TrackerClientLinear API 客户端,基于 gql + httpx 异步传输。
- 参数:
config -- Tracker 配置,包含 endpoint、api_key、project_slug 等。
- _client#
- _config#
- async fetch_candidate_issues() list[taolib.symphony.tracker.models.Issue]#
获取候选 issue 列表(分页)。
按 project slug + 配置中的 active_states 过滤, 每页取
_PAGE_SIZE条,自动翻页直到遍历完成。
- async fetch_issues_by_states(states: list[str]) list[taolib.symphony.tracker.models.Issue]#
按指定状态集合过滤 issue(分页)。
主要用于终态清理:启动时扫描 Done / Cancelled 等终态 的工作区残留。
- 参数:
states -- 状态名称列表。
- async fetch_issue_states_by_ids(issue_ids: list[str]) list[taolib.symphony.tracker.models.Issue]#
根据 ID 列表批量获取 issue 的当前状态(分批)。
将 ID 列表按
_PAGE_SIZE分批查询,每批独立发起请求, 最终按原始请求顺序排列返回结果。- 参数:
issue_ids -- Issue UUID 列表。
- async _paginated_query(query: object, variables: dict, field_name: str) list[dict]#
通用分页查询逻辑。
自动跟踪
endCursor,循环翻页直到hasNextPage为 False。- 参数:
query -- gql 编译后的 AST 查询文档。
variables -- GraphQL 变量字典。
field_name -- 响应
data中对应的字段名(如"issues")。
- 返回:
所有页的 node 字典合并列表。
- 抛出:
LinearMissingCursorError -- hasNextPage=True 但 endCursor 缺失。
- async _execute_query(query: object, variables: dict, field_name: str, *, paginated: bool) tuple[list[dict], dict]#
执行单次 GraphQL 查询并提取结果。
- 参数:
query -- gql AST 查询文档。
variables -- GraphQL 变量。
field_name -- 响应 data 中的字段名。
paginated -- 是否为分页查询(需要提取 pageInfo)。
- 返回:
(nodes, page_info)元组。 非分页查询的page_info为空字典。- 抛出:
LinearAPIRequestError -- 网络/传输错误。
LinearAPIStatusError -- 非 200 响应。
LinearGraphQLError -- GraphQL errors 字段非空。