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",]
Sphinx 4.0 中添加了 autodoc_preserve_defaults
配置选项。
在conf.py中将此选项设置为True
即可解决问题。函数的默认参数值将不会被计算并显示在生成的输出中。
我有一个简单的功能
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",]
Sphinx 4.0 中添加了 autodoc_preserve_defaults
配置选项。
在conf.py中将此选项设置为True
即可解决问题。函数的默认参数值将不会被计算并显示在生成的输出中。