在my pylatest sphinx
extension中,
我定义了自定义rst指令test_action
和自定义sphinx构建器
xmlexport
这样当我用默认的sphinxhtml构建一个sphinx项目时
builder(通过make html
),将test_action
指令转换为
{builder>只包含一个div
html标记中,无需任何其他处理。在
为此,test_action
指令生成自定义doctree节点
当
xmlexport
builder被使用,或者与{
我通过检查使用哪个构建器并添加转换类来实现这一点 因此:
def pylatest_transform_handler(app):
if isinstance(app.builder, builders.XmlExportBuilder):
...
else:
# pylatest transforms for human readable html output,
# translates pylatest nodes into nice sections or tables
app.add_transform(transforms.TestActionsTableTransform)
在处理^{
这个方法可以工作,但是有一个问题:当使用html
builder时,doctree
在_build/doctree/
中缓存的与之后缓存的不同
xmlexport
生成器运行。这意味着当我在
执行make xmlexport
,生成失败,因为sphinx使用了错误的doctree。在
所以我的问题是:如何确保sphinx doctree缓存 当不同的构建器互相使用时会重新生成,但当 同一个生成器又被使用了?在
这里的问题是我使用的是event
builder-inited
,这不适合这种特殊用法。在这将导致转换在initialization phase of sphinx build期间执行,并且由于doctree构建是在初始化之后的一致性检查阶段之后保存的,因此转换的效果存储在doctree构建文件中。在
当我从
add_transform
切换到add_post_transform
的时候 相反,在doctree-resolved
事件上,它开始按我的需要工作:doctree已保存 到文件中是相同的(因为文件不受转换的影响),并且转换发生在稍后的写入阶段。在相关问题 更多 >
编程相关推荐