跳转到主要内容

验证和解析库

项目描述

Trafaret

Build status @ Circle CI Gitter Chat Latest release BSD license

支持验证、上下文和aiohttp的终极转换库。

Trafaret是一个严格且强大的库,用于处理外部数据、配置等。它提供了一种简单的方法来检查任何东西,并将其相应地转换为您的需求。

它具有简短的语法和表达任何可以编码的内容的能力

>>> from trafaret.constructor import construct
>>> validator = construct({'a': int, 'b': [str]})
>>> validator({'a': 5, 'b': ['lorem', 'ipsum']})
{'a': 5, 'b': ['lorem', 'ipsum']}

>>> validator({'a': 5, 'b': ['gorky', 9]})
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/mkrivushin/w/trafaret/trafaret/__init__.py", line 204, in __call__
    return self.check(val)
  File "/Users/mkrivushin/w/trafaret/trafaret/__init__.py", line 144, in check
    return self._convert(self.check_and_return(value))
  File "/Users/mkrivushin/w/trafaret/trafaret/__init__.py", line 1105, in check_and_return
    raise DataError(error=errors, trafaret=self)
trafaret.DataError: {'b': DataError({1: DataError(value is not a string)})}

阅读托管在Read The Docs上的文档 http://trafaret.readthedocs.org/en/latest/ 或查看docs/intro.rst 以开始。

Trafaret甚至可以生成Trafaret实例,从json构建转换器,如json模式实现Trafaret Schema

新功能

2.0.2

2.0.0

  • WithRepr – 使用它来返回自定义表示,如<Email>

  • 从字典中移除大量内容,类似于 keys()

  • Trafarets 是不可变的

  • DataError 有新的 code 属性,self.failure 有 code 参数

  • OnError 也有 code 参数

  • 新的 DataError.to_struct 方法以更一致的方式返回错误

  • StringAnyStringBytesFromBytes(encoding=utf-8)

  • IntToIntFloatToFloat

  • ToDecimal

  • Iterable,行为类似于 List,但可以与任何可迭代对象一起工作

  • 新的 DateToDateDateTimeToDateTime trafarets

  • StrBool trafaret 已重命名为 ToBool

  • Visitor trafaret 已删除

  • 测试覆盖率

1.x.x

  • 删除了 convertersconvert=False,以支持 And&

  • 删除了 String 参数 regex,以支持 RegexpRegexpRaw 的使用

  • 新的 OnError 用于自定义错误消息

  • context=something 参数用于 __call__check Trafaret 方法。支持 OrAndForward 等。

  • 新的可自定义方法 transform,类似于 change_and_return,但接受 context= 参数

  • 新的 trafaret_instance.async_check 方法,可用于 await

文档

简单示例中可以做到什么

import datetime
import trafaret as t

date = t.Dict(year=t.Int, month=t.Int, day=t.Int) >> (lambda d: datetime.datetime(**d))
assert date.check({'year': 2012, 'month': 1, 'day': 12}) == datetime.datetime(2012, 1, 12)

使用正则表达式

>>> c = t.RegexpRaw(r'^name=(\w+)$') >> (lambda m: m.group(1))
>>> c.check('name=Jeff')
'Jeff'

重命名字典键

>>> c = t.Dict({(t.Key('uNJ') >> 'user_name'): t.String})
>>> c.check({'uNJ': 'Adam'})
{'user_name': 'Adam'}

箭头日期检查

import arrow

def check_datetime(str):
    try:
        return arrow.get(str).naive
    except arrow.parser.ParserError:
        return t.DataError('value is not in proper date/time format')

是的,你可以编写如此简单的 trafarets。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

trafaret-2.1.1.tar.gz (26.2 kB 查看哈希值)

上传时间

构建分发

trafaret-2.1.1-py3-none-any.whl (28.4 kB 查看哈希值)

上传时间 Python 3

由以下支持