如何确定sphinx正在处理哪个文档?

时间:2014-07-09 01:14:41

标签: python-sphinx

我正在处理大型文档库并添加另一个有关以编程方式生成的API的文档文件。我想autodoc一些模块的内容,但只有已设置属性的函数表明它们是API端点。 Autodoc还用于记录项目的内部。

我在conf.py中执行此操作:

def skip_non_api_methods(app, what, name, obj, skip, options):
    if not getattr(obj, 'is_api_endpoint', False):
        return True
    return skip

def setup(app):
    app.connect("autodoc-skip-member", skip_non_api_methods)

但是,我只想将skip_non_api_methods()用于 api.rst ,而不是几十个其他文档文件。我挖掘了app对象,但无法找到对正在处理的当前文件的引用。

1 个答案:

答案 0 :(得分:1)

app.env.docname包含当前文档名称,减去扩展名。

上述功能的修订版使其仅适用于'api.rst':

def skip_non_api_methods(app, what, name, obj, skip, options):
    if app.env.docname != 'api':  # only apply this to api.rst
        return skip
    # if is_api_endpoint is True, don't skip (i.e. return False)
    is_api_endpoint = getattr(obj, 'is_api_endpoint', False)
    if is_api_endpoint:
        return False  # don't skip api endpoints
    return True  # skip everything else