简化python3中类型化和约束值对象的创建和使用
typefactor的Python项目详细描述
打字机
TypeFactory处于alpha状态。API、类型和异常可能会发生重大变化。
TypeFactory简化了类型化和约束值对象的创建和使用。在
为什么?在
传递原始值(字符串、int、float等)往往会导致单个应用程序中多个层的代码检查约束,然后随着不同层约束检查的不同而导致不一致和错误。在
通过基于受约束类型将原始数据强制转换为值对象,并使用可选的类型检查:
- 域概念和规则可以封装在值对象的尽可能低的级别
- 代码变得更加清晰,并与领域概念相联系
- 专门用于数据验证的代码量可以减少并集中
- 与坏数据相关的错误可能会减少
- 验证很自然地被推到应用程序边界,留下可以专注于实现域逻辑/业务规则的代码
特点
- 使用约束扩展现有类型
- 与JSON模式约束相匹配的字符串和数字类型的内置约束(例如最小值、多个\u-of、模式等…)
- 为任何类型创建自定义约束
- 内省类型和值以提取和利用它们的约束,例如在创建HTML表单时
- 报告值的所有失败约束的扩展值错误异常
示例
定义类型
fromtypefactoryimportmake_typefromtypefactory.constraintsimportstring,numericId=make_type(str,"Id",[string.Pattern("^[A-Z2-7]{26}$")])Age=make_type(int,"Age",[numeric.Minimum(0),numeric.Maximum(150)])Username=make_type(str,"Username",[string.MinLength(4),string.MaxLength(32),string.Pattern("^[A-Za-z][A-Za-z0-9]{2,30}[A-zA-z]$")])Password=make_type(str,"Password",[string.MinLength(8),string.MaxLength(256)])
使用类型
^{pr2}$例外情况
当类型的输入数据不满足类型约束时,类型抛出ValueErrors。返回所有失败的约束。在
username=Username("123")>>>ValueError:InvalidUsername(123):['Value cannot be less than 4 characters in length','Value must match pattern ^[A-Za-z][A-Za-z0-9]{2,30}[A-zA-z]$']username=Username("1username")>>>ValueError:InvalidUsername(1username):['Value must match pattern ^[A-Za-z][A-Za-z0-9]{2,30}[A-zA-z]$']
类型检查
创建的类型可以与可选的类型检查工具一起使用,以使类型强的协定能够在代码基中传播,从而减少了断言值满足代码中多个级别的约束的需要。在
通常,值将在外部边界(例如传入的web请求或数据库记录)转换为更丰富、受约束的类型,然后在内部使用。在
defregister(id:Id,username:Username,password:Password):...
安装
从PyPI安装:
pip install typefactory
路线图
- 返回所有失败约束的列表的子类ValueError
- 集装箱类型
- 用于从类型创建以下内容的函数:
- 烧瓶URL转换器
- SqlAlchemy自定义类型
- 棉花糖田
- WTForms字段和小部件
- 项目
标签: