验证和解析库
项目描述
Trafaret
支持验证、上下文和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 方法以更一致的方式返回错误
String,AnyString,Bytes,FromBytes(encoding=utf-8)
Int,ToInt,Float,ToFloat
ToDecimal
Iterable,行为类似于 List,但可以与任何可迭代对象一起工作
新的 Date,ToDate 和 DateTime,ToDateTime trafarets
StrBool trafaret 已重命名为 ToBool
Visitor trafaret 已删除
测试覆盖率
1.x.x
删除了 converters 和 convert=False,以支持 And 和 &
删除了 String 参数 regex,以支持 Regexp 和 RegexpRaw 的使用
新的 OnError 用于自定义错误消息
context=something 参数用于 __call__ 和 check Trafaret 方法。支持 Or,And,Forward 等。
新的可自定义方法 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。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。