跳转到主要内容

用于定义数据模式的zope.interface扩展

项目描述

zope.schema

Latest Version Supported Python versions Tests Status Documentation Status Code Coverage

Schemas扩展了接口的概念,以详细描述属性(但不是方法)。每个模式都是一个接口,并指定对象的公共字段。一个字段大致对应于Python对象的属性。但字段提供了至少一个标题和描述的空间。它还可以约束其值并提供验证方法。此外,您可以可选地指定其值是否为只读或非必需等特征。

有关更多信息,请参阅https://zopeschema.readthedocs.io/

变更

7.0.1 (2023-01-02)

  • 修复当未安装zope.i18nmessageid时的回退问题(7.0.0版本中引入的回归)。

7.0.0 (2023-01-01)

  • 添加对Python 3.11的支持。

  • 停止支持Python 2.7、3.5、3.6。

  • 删除zope.schema._compat模块。

  • 修复Python 3.11上的测试弃用警告。(#112

6.2.1 (2022-09-14)

  • 修复过大的整数测试值,这些值会在较新版本的Python上破坏测试。(#115

6.2.0 (2021-10-18)

  • 添加对Python 3.10的支持。

6.1.1 (2021-10-13)

  • 修复6.1.0中引入的不兼容性:如果未提供,则布尔字段构造函数隐式设置为False。虽然这在大多数常见情况下是期望的行为,但它破坏了特殊案例。请参阅问题104(向下滚动,它大约在重新打开处)。

6.1.0 (2021-02-09)

  • 修复IField.required默认不强制。请参阅问题104

6.0.1 (2021-01-25)

  • 将分支覆盖率提高到100%。

  • 添加对Python 3.9的支持。

  • 通过具有作为IFieldUpdatedEvent接口声明的object属性来修复FieldUpdateEvent实现。

6.0.0 (2020-03-21)

  • 需要zope.interface 5.0。

  • 确保所有字段的解析顺序一致且合理。特别是,布尔字段现在在IFromUnicode之前正确实现了IBool。请参阅问题80

  • 添加对Python 3.8的支持。

  • 取消对Python 3.4的支持。

5.0.1 (2020-03-06)

  • 修复:将Text.unicode_normalization = 'NFC'作为默认值,因为有些正在持久化架构字段。仅在__init__中设置该属性会破坏旧对象的加载。请参阅问题88

5.0 (2020-03-06)

  • IDecimal属性minmaxdefault设置为Decimal类型而不是Number类型。请参阅问题88

  • Text字段启用Unicode规范化。默认为NFC规范化。有效形式为‘NFC’、‘NFKC’、‘NFD’和‘NFKD’。要禁用规范化,在调用Text字段的__init__时将unicode_normalization设置为FalseNone。请参阅问题86

4.9.3 (2018-10-12)

  • 修复了在具有标题的“子字段”时getDoc()结果中的ReST错误。

4.9.2 (2018-10-11)

  • 确保IObject.validate_invariants的标题是Unicode字符串。

4.9.1 (2018-10-05)

  • 修复了SimpleTerm的非ASCII字节值令牌。

4.9.0 (2018-09-24)

  • 使NativeStringNativeStringLine成为实现新界面的独立类型,这些界面是INativeStringINativeStringLine。以前这些只是对Text(在Python 3上)或Bytes(在Python 2上)的别名。

  • 当存在value_typekey_type时,修复Field.getDoc()。以前它可能会产生产生Sphinx警告的ReST。请参阅问题76

  • 使DottedName接受每个分段的引导下划线。

  • 添加了接受点分名称一个分段的PythonIdentifier,例如Python变量或类。

4.8.0 (2018-09-19)

  • 将接口IFromBytes添加到由数字和字节字段、URIDottedNameId实现的接口中。

  • 修复将None作为描述传递给字段构造函数的问题。请参阅问题69

4.7.0 (2018-09-11)

  • 使WrongType具有一个expected_type字段。

  • 添加了从WrongTypeSchemaNotProvided派生的异常NotAnInterface,并由Object的构造函数以及当InterfaceField验证失败时引发。

  • SchemaNotProvided一个schema字段。

  • WrongContainedType一个errors列表。

  • 为“太短”、“太长”、“太大”和“太小”字段设置一个边界字段,并分别使用常见的超类“长度越界”、“可排序越界”,这两个类都继承自“越界”。

4.6.2 (2018-09-10)

  • 修复检查字段约束的问题,如果约束抛出“ValidationError”,则设置“field”和“value”属性。参见问题66

4.6.1 (2018-09-10)

  • 修复“Field”构造函数,再次允许使用“MessageID”值作为“description”。这是在修复问题60时引入的回归。参见问题63

4.6.0 (2018-09-07)

  • 支持Python 3.7。

  • 默认情况下,对象实例在验证时通过调用其模式对象的“validateInvariants”方法来收集使用“@invariant”装饰的函数的错误。可以通过将“validate_invariants=False”传递给“Object”构造函数来禁用此功能。参见问题10

  • 在Python 3中可以对“ValidationError”进行排序。

  • “DottedName”和“Id”在Python 2和3中一致地处理非ASCII Unicode值,通过分别在“fromUnicode”中引发“InvalidDottedName”和“InvalidId”。以前,在Python 2中会引发“UnicodeEncodeError”,而在Python 3中会引发描述性异常。

  • 在Python 3中,“Field”实例是可散列的,并使用一个定义的散列算法,该算法与所有Python版本上的等价性匹配。以前,在Python 2中,字段基于其身份进行散列,这违反了等价对象应具有相等散列的规则,现在它们是这样的。由于具有相等散列并不意味着对象相等,因此预计这不会引起兼容性问题。参见问题36

  • 当且仅当它们的“.interface”相等时,“Field”实例才相等。在实践中,这意味着两个不同的模式中相同属性的字段不相等,散列也不同,并且都可以是同一个“dict”或“set”的成员。在此版本之前,当散列基于身份但仅在Python 2上工作时,这就是典型行为。(不是模式成员的“Field”对象如果具有相同的属性和接口,则继续比较和散列相等。)参见问题40

  • 可排序字段,包括“Int”、“Float”、“Decimal”、“Timedelta”、“Date”和“Time”,现在可以有一个“missing_value”,而无需指定具体的“min”和“max”值(它们必须仍然指定一个“default”值)。参见问题9

  • “Choice”、“SimpleVocabulary”和“SimpleTerm”都可以优雅地处理使用非ASCII字符的Unicode令牌值,通过使用“backslashreplace”错误处理程序对其进行编码。参见问题15PR 6

  • 所有《ValidationError》实例都有一个《field》和《value》属性,这些属性被设置为引发异常的字段和未通过验证的值。

  • 《Float》、《Int》和《Decimal》字段为无法解析的文本书面值引发《ValidationError》子类。这些子类也继承自《ValueError》以实现向后兼容。

  • 添加了一个新的异常《SchemaNotCorrectlyImplemented》,它是《WrongContainedType》的子类,由《Object》字段引发。它包含一个字典(《schema_errors》),将无效的架构属性映射到相应的异常,以及一个列表(《invariant_errors》),包含验证不变性时引发的异常。请参阅问题16

  • 添加了新的字段《Mapping》和《MutableMapping》,对应于同名集合抽象基类;现在《Dict》扩展并特化为《MutableMapping》以仅接受《dict》实例。

  • 添加了新的字段《Sequence》和《MutableSequence》,对应于同名集合抽象基类;《Tuple》现在扩展自《Sequence》,而《List》现在扩展自《MutableSequence》。

  • 添加了新的字段《Collection》,实现了《ICollection》。这是《Sequence》的基类。之前它被称为《AbstractCollection》且不是公开的。它可以被继承以在类级别添加《value_type》、《_type》和《unique》属性,从而使构造函数调用更加简单。请参阅问题23

  • 使《Object》遵守由子类定义的《schema》属性,从而简化构造函数调用。请参阅问题23

  • 添加了代表Python数值塔的字段和接口。按通用性递减的顺序,它们是《Number》、《Complex》、《Real》、《Rational》和《Integral》。《Int》类扩展自《Integral》,《Float》类扩展自《Real》,而《Decimal》类扩展自《Number》。请参阅问题49

  • 使《Iterable》和《Container》正确实现《IIterable》和《IContainer》。

  • 使《SimpleVocabulary.fromItems》接受三元组以允许指定术语的标题。请参阅问题18

  • 使《TreeVocabulary.fromDict》仅在提供了标题时才创建《ITitledTokenizedTerms》。请参阅问题18

  • 确保当无法找到命名词汇表时,"选择"字段能够可靠地触发一个《ValidationError》;为了向后兼容,这也会引发一个《ValueError》。之前这仅在默认的《VocabularyRegistry》被使用时有效,当其被zope.vocabularyregistry替换时则无效。参见问题55

  • "SimpleVocabulary"和"SimpleTerm"现在具有基于值的相等性和哈希方法。

  • 在尝试验证特定属性之前,将一个《Object》字段的架构的所有字段绑定到顶级待验证值。之前只有《IChoice》字段被绑定。参见问题17

  • 共享《Object》字段验证和《zope.schema.getValidationErrors》的内部逻辑。参见问题57

  • 使《Field.getDoc()`》返回有关字段属性(如其必需和只读状态)的更多信息。子类可以使用新的方法《Field.getExtraDocLines()`》添加更多信息。这用于在使用repoze.sphinx.autointerface生成Sphinx文档时。参见问题60

4.5.0 (2017-07-10)

  • 停止支持Python 2.6、3.2和3.3。

  • 添加对Python 3.5和3.6的支持。

  • 停止使用“setup.py test”。使用zope.testrunner。

4.4.2 (2014-09-04)

  • 修正最小/最大字段描述:最大值包含在内,而不是排除。

4.4.1 (2014-03-19)

  • 添加对Python 3.4的支持。

4.4.0 (2014-01-22)

  • 在字段属性上添加一个事件,以通知字段已被更新。此事件允许根据事件、上下文和字段定义订阅者。事件还包含旧值和新值。(也请参阅定义字段事件处理器的包《zope.schemaevent》)

4.3.3 (2014-01-06)

  • PEP 8清理。

  • 如果字段的defaultFactory返回字段的missing_value,则不引发RequiredMissing。

  • 将《bootstrap.py》更新到版本2.2。

  • 添加在渲染《SimpleVocabulary》时吞咽《ValueError》的功能,允许词汇项可能重复的情况(例如,由于用户输入)。

  • 将字段名包含在《ConstraintNotSatisfied》中。

4.3.2 (2013-02-24)

  • 修复Python 2.6的支持。 (在最后发布前忘记运行包含所有环境的tox。)

4.3.1 (2013-02-24)

  • 确保在将字节值转换为term token时,在生成过程中忽略所有错误,不会失败。 (另一个选项是将值转换为十六进制,但这会破坏太多的测试。)

4.3.0 (2013-02-24)

  • 修复Python 3中将字节值错误地转换为tokens的bug。

  • 添加《zope.schema.fieldproperty.createFieldProperties()`》函数,该函数将架构字段映射到《FieldProperty》实例。

4.2.2 (2012-11-21)

  • 添加对Python 3.3的支持。

4.2.1 (2012-11-09)

  • 修复没有defaultFactory属性的字段的默认属性。

4.2.0 (2012-05-12)

  • 通过tox自动化构建Sphinx HTML文档和运行doctest片段。

  • 停止对Python 3.1的显式支持。

  • 引入NativeString和NativeStringLine,在Python 2中等于Bytes和BytesLine,在Python 3中等于Text和TextLine。

  • 将IURI从Bytes字符串更改为“原生”字符串。这是一个向后不兼容的更改,仅影响Python 3。

  • 将单元测试覆盖率提升到100%。

  • 将doctests从包中移出,并将其作为正常的Sphinx文档连接起来。

  • 添加对PyPy的显式支持。

  • 添加使用《tox》和《jenkins》进行持续集成支持。

  • 放弃对外部《six》的依赖,转而使用大幅缩减的《zope.schema._compat》模块。

  • 确保在nose环境下运行时测试通过。

  • 添加setup.py dev别名(运行setup.py develop并安装nosecoverage)。

  • 添加setup.py docs别名(安装Sphinx及其依赖)。

4.1.1 (2012-03-23)

  • 删除MANIFEST.in中的尾部斜杠,它会导致Winbot崩溃。

4.1.0 (2012-03-23)

  • 添加TreeVocabulary以支持嵌套的树状词汇。

  • 修复了包含具有ICountextSourceBinder源的Choice的schema中字段验证损坏的问题。在这种情况下,由于字段未绑定且源绑定器未返回真正的词汇,词汇不可迭代。添加了简单的IContextSourceBinder验证测试。但仍然缺少使用具有IContextSourceBinder的Choice的schema的对象字段的测试。

4.0.1 (2011-11-14)

  • 修复了DottedNamefromUnicode方法中的错误,该方法在给定unicode时会导致验证失败。从4.0.0版本引入。

4.0.0 (2011-11-09)

  • 修复了过时的unittest方法。

  • 移植到Python 3。这添加了对six的依赖,并移除了对Python 2.5的支持。

3.8.1 (2011-09-23)

  • 修复了损坏的对象字段验证。先前版本使用对象字段值上的易变属性,这会导致在安全代理对象上出现ForbiddenAttribute错误。

3.8.0 (2011-03-18)

  • 为所有字段实现了一个defaultFactory属性。它是一个可调用的函数,可以用来计算默认值。最简单的情况是

    Date(defaultFactory=datetime.date.today)

    如果工厂需要上下文来计算合理的默认值,则必须提供IContextAwareDefaultFactory,如下所示

    @provider(IContextAwareDefaultFactory)
    def today(context):
        return context.today()
    
    Date(defaultFactory=today)

3.7.1 (2010-12-25)

  • 重命名用于验证具有对象字段的schema中的验证令牌,以避免无限递归:__schema_being_validated变成了_v_schema_being_validated,这是一个易变属性,以避免持久性,因此避免了读写冲突。

  • 不允许在DottedName中存在“[]^`”。请参阅https://bugs.launchpad.net/zope.schema/+bug/191236

3.7.0 (2010-09-12)

  • 改进了当术语令牌或值重复时的错误消息。

  • 修复了buildout,以便运行测试。

3.6.4 (2010-06-08)

  • 修复了指定接口schema的对象字段的schema验证。

3.6.3 (2010-04-30)

  • 优先使用标准库的doctest模块而不是zope.testing模块。

3.6.2 (2010-04-30)

  • 在验证指向循环的对象字段时避免最大递归。

  • 使对zope.i18nmessageid的依赖项可选。

3.6.1 (2010-01-05)

  • 允许“setup.py test”至少运行通过bin/test可运行的测试子集(227个用于setup.py test,而258个用于bin/test)。

  • 使zope.schema._bootstrapfields.ValidatedProperty描述符在Jython下工作。

  • 使“setup.py test”测试在Jython上通过。

3.6.0 (2009-12-22)

  • 优先使用zope.testing.doctest而不是doctestunit。

  • 扩展验证错误以包含字段名称。

  • 添加使用Field.get和Field.set方法而不是直接在实例__dict__上存储的FieldProperty类。

3.5.4 (2009-03-25)

  • 当提供作为源的IContextSourceBinder对象时,不允许为Choice字段尝试验证默认值。请参阅https://bugs.launchpad.net/zope3/+bug/340416

  • DottedName字段添加接口。

  • IChoice接口添加vocabularyName属性,将“vocabulary”属性描述改为更合理,使其成为zope.schema.Field而不是普通的zope.interface.Attribute

  • 使Bool的IBool接口比IFromUnicode更重要,因此为IBool注册的适配器比为IFromUnicode注册的适配器具有优先级。

3.5.3 (2009-03-10)

  • 将“Make Choice”和“Bool”字段实现为“IFromUnicode”接口,因为它们确实提供了“fromUnicode”方法。

  • 将包的邮件列表地址更改为“zope-dev at zope.org”,因为“zope3-dev at zope.org”现在已停用。

  • 修复包的文档格式。更改包的描述。

  • 添加构建Sphinx生成的文档的buildout部分。

  • 删除与zpkg相关的文件。

3.5.2 (2009-02-04)

  • 使验证测试与Python 2.5兼容(希望不会破坏Python 2.4)

  • 添加一个名为“__all__”的包属性以公开文档。

3.5.1 (2009-01-31)

  • 停止使用旧的旧集合类型。

  • 使测试与Python 2.4兼容并静默。

  • 修复ValidationError中的“__cmp__”方法。根据现有的“__cmp__”实现显示一些副作用。请参阅validation.txt

  • 使ValidationError及其子类的“repr”更合理。这可能需要您调整doctests以适应新样式,但现在它对于开发人员的调试来说更有意义。

3.5.0a2(2008-12-11)

  • 将zope.testing移动到“test”extras_require,因为它对zope.schema本身不是必需的。

  • 更改SET_TYPES元组中类的顺序,该元组在先前的版本中引入,以与3.4中的顺序一致(SetType,set),因为第三方代码可能依赖于该顺序。一个例子是z3c.form的转换器。

3.5.0a1(2008-10-10)

  • 将doctests添加到长描述中。

  • 当在Python 2.6下运行时,删除已弃用的“sets”模块的使用。

  • 当在Python 2.6下运行时,删除虚假的doctest失败。

  • 添加对Jython的引导支持。

  • 添加用于模式验证的帮助方法:getValidationErrorsgetSchemaValidationErrors

  • zope.schema现在在Python2.5上工作

3.4.0 (2007-09-28)

添加在对象字段设置值之前触发的BeforeObjectAssignedEvent。

3.3.0 (2007-03-15)

对应于Zope 3.3.0版本中作为Zope 3.3.0发行版一部分提供的zope.schema包的版本。

3.2.1 (2006-03-26)

对应于Zope 3.2.1版本中作为Zope 3.2.1发行版一部分提供的zope.schema包的版本。

修复缺少导入“VocabularyRegistryError”。请参阅http://www.zope.org/Collectors/Zope3-dev/544

3.2.0 (2006-01-05)

对应于Zope 3.2.0版本中作为Zope 3.2.0发行版一部分提供的zope.schema包的版本。

添加“iterable”源以替换词汇表,这些词汇表现在已弃用,并计划在Zope 3.3中删除。

3.1.0 (2005-10-03)

对应于Zope 3.1.0版本中作为Zope 3.1.0发行版一部分提供的zope.schema包的版本。

允许“Choice”字段接受“vocabulary”或“source”参数(源是更简单的实现)。

添加“TimeDelta”和“ASCIILine”字段类型。

3.0.0 (2004-11-07)

对应于Zope X3.0.0版本中作为Zope X3.0.0发行版一部分提供的zope.schema包的版本。

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面