我想使用 Sphinx 来记录我的 Zope 2 产品,并且使用 autodoc 功能会很好,它可以从我的模块中的文档字符串中提取信息。现在在 Zope 中,不幸的是,文档字符串被用来指定一个可以通过 http-requests 访问的方法。因此,所有不应通过 http 访问的方法都没有文档字符串。
有没有办法以 Sphinx 识别但 Zope 不识别的方式编写文档字符串?
或者:有没有办法改变 Zope 文档字符串的行为?
我想使用 Sphinx 来记录我的 Zope 2 产品,并且使用 autodoc 功能会很好,它可以从我的模块中的文档字符串中提取信息。现在在 Zope 中,不幸的是,文档字符串被用来指定一个可以通过 http-requests 访问的方法。因此,所有不应通过 http 访问的方法都没有文档字符串。
有没有办法以 Sphinx 识别但 Zope 不识别的方式编写文档字符串?
或者:有没有办法改变 Zope 文档字符串的行为?
我可以看到 3 种方法来做到这一点,但没有一个(无 :-) 正是你想要的,除了依靠重型机械。
以 开头的方法_
未发布,因此您可以这样做:
class MyClass:
def _method(self):
"I have a docstring, but I won't be published"
return 'done'
您可以将角色设置为ACCESS_PRIVATE
from AccessControl.SecurityInfo import ACCESS_PRIVATE
class MyClass:
myMethod__roles__ = ACCESS_PRIVATE
def myMethod(self):
"I look like I'm published, but I'm not"
return 'done'
在我看来,最接近您想要实现的目标,但请注意该行为与缺少文档字符串不同:如果在没有文档字符串的情况下调用该方法,则结果是NotFound
异常,而在这种ACCESS_PRIVATE
情况下,结果是未经授权的例外。
您可以通过实现自己的来替换遍历方法(我认为)IBrowserPublisher
。默认实现DefaultPublishTraverse
在ZPublisher/BaseRequest.py
. 然后,您必须通过复制和调整它来制作自己的,以便它使用另一个标志而不是 docstring 进行发布。