如何在python-sphinx conf.py中动态移除可追溯关系
我正在使用一个叫做 traceability 的插件,它是为 python-sphinx 设计的:sphinx traceability plugin
我的测试有以下的 .rst 文档:
@rst
.. item:: TST-Example
:applicable_to: PRD-ALL
@endrst
我想把 PRD-ALL
转换成一个预定义产品的列表,比如 PRD-A PRD-B
。所以我在考虑把这个逻辑加到插件提供的 traceability_callback_per_item
回调函数里面:
def traceability_callback_per_item(name, collection):
item = collection.get_item(name)
if name.startswith('TST-'):
applicable_to = list(item.iter_targets('applicable_to'))
if 'PRD-ALL' in applicable_to:
collection.add_relation(item.identifier, 'applicable_to', 'PRD-A')
collection.add_relation(item.identifier, 'applicable_to', 'PRD-B')
# remove PRD-ALL from 'applicable_to' relation:
# HOW?
我试过:
item.remove_targets('PRD-ALL', explicit=True, implicit=True, relations=['applicable_to'])
但是我得到了一个警告:
WARNING: No automatic reverse relation: TST-Example applicable_to PRD-ALL
这个警告导致构建失败,因为它是故意用 -W
选项运行的。
有什么想法吗?
1 个回答
0
最后我找到了解决办法,可能不是最“正确”的方式,但确实有效:
# remove TST --> PRD relation
item.remove_targets('PRD-ALL', explicit=True, implicit=True,
relations=['applicable_to'])
# remove PRD --> TST relation
prod_item = collection.get_item('PRD-ALL')
prod_item.remove_targets(item.identifier, explicit=True, implicit=True,
relations=['covered_by'])
请注意,covered_by
是在 traceability_relations
这个全局变量中指定的:
traceability_relationships = {
# ...
'applicable_to': 'covered_by'
}