跳转到主要内容

Traitlets Python配置系统

项目描述

Traitlets

Tests Documentation Status Tidelift

主页 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'
}

验证和强制转换

每种特性类型(例如IntUnicodeDict等)可能有自己的验证或强制转换逻辑。此外,我们可以注册自定义交叉验证器,这些验证器可能依赖于其他属性的状态。例如

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 (161.6 kB 查看哈希值)

上传时间

构建分布

traitlets-5.14.3-py3-none-any.whl (85.4 kB 查看哈希值)

上传时间 Python 3

由以下机构支持