Sphinx 泄露了我的 (mailgun) 密码

Sphinx revealing my (mailgun) password

我有一个简单的功能

import config 

def send_message(mailgunkey=config.MAILGUNKEY):
    """
    send an email
    """

它依赖于我的 config.py 文件中定义的变量。我从我所有机器上的本地文件中读取变量,因为我不想在任何存储库中拥有我的密钥等。但是,我最近养成了使用 Sphinx 的习惯。生成 html 文档时,将对表达式 config.MAILGUNKEY 求值,并在 html 文件中显示实际密钥。是否有停止这种不良行为的选项?

考虑使用这种方法:

import config 

def send_message(mailgunkey=None):
    """
    send an email
    """
    if mailgunkey is None:
        mailgunkey = config.MAILGUNKEY

一般来说,这种方法有一些重要的优势:

  • 让您的用户默认通过 None
  • 允许更改 config.MAILGUNKEY,即使您的模块已经导入;
  • 解决了可变默认参数的问题(不是你的情况,但仍然需要注意)。

在我看来,第二点非常重要,因为我会很惊讶地看到在运行时对配置变量的更改没有任何效果。

另一种选择是模拟包含您的秘密的模块。

这避免了需要更改代码来生成文档。

假设您使用的是autodoc;将以下内容添加到您的 conf.py:

autodoc_mock_imports = ["config","secrets",] 

https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html?highlight=autodoc_mock_imports%20#confval-autodoc_mock_imports

Sphinx 4.0 中添加了 autodoc_preserve_defaults 配置选项。

在conf.py中将此选项设置为True即可解决问题。函数的默认参数值将不会被计算并显​​示在生成的输出中。