utype
项目描述
utype 是一个基于 Python 类型注解的数据类型声明与解析库,能够在运行时根据你的声明对类与函数的参数进行解析转化,保障你的 Python 代码的运行时类型安全项目介绍
utype 是一个基于 Python 类型注解的数据类型声明与解析库,能够在运行时根据你的声明对类与函数的参数进行解析转化,保障你的 Python 代码的运行时类型安全
核心特性 * 基于 Python 类型注解在运行时对类型,数据结构,函数参数与结果等进行解析转化 * 支持类型约束,类型的逻辑运算等,以声明更复杂的解析条件 * 高度可扩展,所有类型的转化函数都可以注册,覆盖与扩展,并提供高度灵活的解析选项
安装
pip install -U utype
用法示例
类型与约束 utype 支持方便地为类型施加约束,你可以使用常用的约束条件(比如大小,长度,正则等)构造约束类型
from utype import Rule, exc
class PositiveInt(int, Rule):
gt = 0
assert PositiveInt(b'3') == 3
try:
PositiveInt(-0.5)
except exc.ParseError as e:
print(e)
"""
Constraint: <gt>: 0 violated
"""
解析 JSON 数据 utype 支持将字典或 JSON 数据转化为类实例
from utype import Schema, Field, exc
from datetime import datetime
class UserSchema(Schema):
username: str = Field(regex='[0-9a-zA-Z]{3,20}')
signup_time: datetime
# 1. 正常输入
data = {'username': 'bob', 'signup_time': '2022-10-11 10:11:12'}
print(UserSchema(**data))
#> UserSchema(username='bob', signup_time=datetime.datetime(2022, 10, 11, 10, 11, 12))
# 2. 异常输入
try:
UserSchema(username='@invalid', signup_time='2022-10-11 10:11:12')
except exc.ParseError as e:
print(e)
"""
parse item: ['username'] failed:
Constraint: <regex>: '[0-9a-zA-Z]{3,20}' violated
"""
类型的逻辑运算 utype 支持使用 Python 原生的逻辑运算符对类型与数据结构进行逻辑运算
from utype import Schema, Field
from typing import Tuple
class User(Schema):
name: str = Field(max_length=10)
age: int
one_of_user = User ^ Tuple[str, int]
print(one_of_user({'name': 'test', 'age': '1'}))
# > User(name='test', age=1)
print(one_of_user([b'test', '1']))
# > ('test', 1)
应用案例
UtilMeta Python 框架 UtilMeta 是一个面向服务端应用的渐进式元框架,基于 Python 类型注解标准高效构建声明式接口,支持使用主流 Python 框架作为运行时实现或渐进式迁移
社区
utype 是一个 UtilMeta 项目,你可以加入下面的社区参与交流