utype
项目作者: voidZXL
项目网址: https://utype.io
入驻时间: 2024-01-11
开源许可证: Apache

项目描述

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 项目,你可以加入下面的社区参与交流

百度统计