Traitlets Python配置系统
项目描述
Traitlets
主页 | https://github.com/ipython/traitlets |
pypi-repo | https://pypi.ac.cn/project/traitlets/ |
docs | https://traitlets.readthedocs.io/ |
license | 修改后的BSD许可证 |
Traitlets是一个纯Python库,它使
- 能够对Python对象的属性(类型属性称为“特性和”进行严格类型检查;
- 动态计算默认值;
- 在尝试更改属性时自动验证和强制类型转换属性;
- 注册接收属性值更改时的通知;
- 从文件或从命令行参数读取配置值 - 在traitlets之上添加了一个独特的层,因此您可以在不使用配置机制的情况下使用traitlets。
其实施依赖于描述符模式,并且是traits库的轻量级纯Python替代品。
Traitlets为IPython和Jupyter的配置系统以及IPython交互小部件的声明性API提供动力。
安装
对于本地安装,请确保已安装pip并运行
pip install traitlets
对于开发安装,克隆此存储库,切换到traitlets
根目录,然后运行pip
git clone https://github.com/ipython/traitlets.git
cd traitlets
pip install -e .
运行测试
pip install "traitlets[test]"
py.test traitlets
代码格式
traitlets
已采用自动代码格式化,因此您不需要太担心代码风格。只要您的代码有效,pre-commit钩子就会处理它的外观。
要本地安装pre-commit
,请运行以下命令:
pip install pre-commit
pre-commit install
您可以在任何时间手动调用预提交钩子,方法如下:
pre-commit run
这将运行代码的自动格式化,并告知您任何它无法自动修复的错误。您还可以安装black集成到您的文本编辑器中,以自动格式化代码。
如果您在设置预提交钩子之前已经使用pre-commit install
提交了文件,您可以使用pre-commit run --all-files
修复所有内容。之后,您需要自行提交修复的提交。
默认情况下,某些钩子仅在CI上运行,但您可以通过运行带有--hook-stage manual
参数来调用它们。
用法
任何具有特性属性的类都必须从HasTraits
继承。有关可用特性类型及其属性的列表,请参阅文档中的特性类型部分。
动态默认值
要动态计算默认值,请使用@default({traitname})
装饰您的类的某个方法。此方法将在实例上调用,并应返回默认值。在此示例中,_username_default
方法被装饰为@default('username')
import getpass
from traitlets import HasTraits, Unicode, default
class Identity(HasTraits):
username = Unicode()
@default('username')
def _username_default(self):
return getpass.getuser()
特性属性变化时的回调
当特性发生变化时,应用程序可以执行附加操作来跟踪此特性变化。
要在特性属性更改时执行某些操作,请使用traitlets.observe()
装饰方法。该方法将带有一个参数调用,该参数是一个包含所有者、新值、旧值、更改特性的名称和事件类型的字典。
在此示例中,_num_changed
方法被装饰为@observe(`num`)
from traitlets import HasTraits, Integer, observe
class TraitletsExample(HasTraits):
num = Integer(5, help="a number").tag(config=True)
@observe('num')
def _num_changed(self, change):
print("{name} changed from {old} to {new}".format(**change))
并且当调用时传递以下字典
{
'owner': object, # The HasTraits instance
'new': 6, # The new value
'old': 5, # The old value
'name': "foo", # The name of the changed trait
'type': 'change', # The event type of the notification, usually 'change'
}
验证和强制转换
每种特性类型(例如Int
、Unicode
、Dict
等)可能有自己的验证或强制转换逻辑。此外,我们可以注册自定义交叉验证器,这些验证器可能依赖于其他属性的状态。例如
from traitlets import HasTraits, TraitError, Int, Bool, validate
class Parity(HasTraits):
value = Int()
parity = Int()
@validate('value')
def _valid_value(self, proposal):
if proposal['value'] % 2 != self.parity:
raise TraitError('value and parity should be consistent')
return proposal['value']
@validate('parity')
def _valid_parity(self, proposal):
parity = proposal['value']
if parity not in [0, 1]:
raise TraitError('parity should be 0 or 1')
if self.value % 2 != parity:
raise TraitError('value and parity should be consistent')
return proposal['value']
parity_check = Parity(value=2)
# Changing required parity and value together while holding cross validation
with parity_check.hold_trait_notifications():
parity_check.value = 1
parity_check.parity = 1
然而,我们建议自定义交叉验证器不要修改HasTraits实例的状态。
关于IPython开发团队
IPython开发团队是指IPython项目的所有贡献者。这包括所有IPython子项目。
协调GitHub上开发的内核团队可以在此处找到:https://github.com/jupyter/。
我们的版权政策
IPython使用共享版权模型。每个贡献者对其对IPython的贡献保持版权。但请注意,这些贡献通常是仅更改存储库。因此,IPython源代码的整体版权不属于任何个人或机构。相反,它是整个IPython开发团队的集体版权。如果个别贡献者希望记录他们在特定更改/贡献上的具体版权,他们应在将更改提交到IPython存储库之一的提交消息中注明他们的版权。
考虑到这一点,以下横幅应用于任何源代码文件,以表示版权和许可条款
# Copyright (c) IPython Development Team.
# Distributed under the terms of the Modified BSD License.
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
traitlets-5.14.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7 |
|
MD5 | f6e6529cca4cbe3299e3f07ce24d3fdc |
|
BLAKE2b-256 | eb7972064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574 |
traitlets-5.14.3-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f |
|
MD5 | 38dd65501ff11b109942b2c9569ba8e2 |
|
BLAKE2b-256 | 00c08f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c |