用于无模式项目的dict模式帮助程序
morpheus的Python项目详细描述
morpheus帮助您为基于dict的类定义模式,并且 执行验证、迁移和生成文档。它试图 使这项通常不执行的任务变得轻松、无痛。
设计目标
可读。就像类定义顶部的docstring一样,一个 模式定义应该是可读和可理解的。
透明。您知道如何使用dict。你应该能够 继续使用听写。你应该可以输入睡眠或者离开它 你的代码应该仍然有效。
^ {STR 1 } $灵活。< /强>您可以选择使用哪一个后端(SQLalChany,SQLite), 所以morpheus操作本地python指令,而不是 触摸您的数据存储。
功能
- 使用pythonic习语的直观模式定义
- 可选的模式验证和检查是全局控制的,或根据 类
- 从旧架构自动或按需迁移到当前架构 一个
- 为开发人员和用户生成架构文档
- 模式的枯燥定义。做一次。在一个地方做。使用它 任何地方(文档、数据存储和代码)
- 不需要依赖项
- 用一行启用/禁用它
- 通过dict的所有python测试(包括json和pickle 序列化)
- 无痛,无痛,简单易行!
安装
$ pip install morpheus
用法
下面是基于dict类的模式定义的一个简单示例。
# Let's import MorpheusDict as dict in our modulefrommorpheusimportMorpheusDictasdict# Note: Comment this last line out to completely disable morpheus. No code# changes needed.## Let's limit the keys allowed on our dict-based class by adding a __schema__# entry#classFoo(dict):__schema__=['id','name','state']## Now let's make sure this really works#try:Foo(sneaky='git blame someone for this!')exceptAttributeErrorasexc:print"Thank you, Morpheus! You caught an error: %s"%exc# Prints:## Thank you, Morpheus! You caught an error: 'sneaky' is not a permitted# attribute for a 'Foo'#
下面是一个更复杂的例子,演示了多个模式, 验证和迁移。
frommorpheusimportMorpheusDict,Schema,DefnclassFoo(dict):__schema__=Schema(id=Defn(int,required=True),statoos=basestring,state=as_of(0.7).is_replaced_by('statoos'))printFoo({'id':1,'state':'DEPRECATED'})# Prints:## {'id': 1, 'statoos': 'DEPRECATED'}#Foo({})# Generates ValidationError("Missing required key 'id'")
性能
要测试性能,请运行python tests/test_performance.py
当前性能比本机dict慢约14倍。
与以下实现相比:
- 简单:1392.72517321%(从0.0004到0.006)
- 子类:1358.45980888%(从0.0004到0.006)
- 映射:439.377796719%(从0.001到0.006)
- 列表:10094.0655908%(从0.0005到0.05)
- 复合体:7229.4047619%(从0.0008到0.06)
贡献
Ziad Sawalha(Ziadsawalha)是 莫菲斯。拉取请求总是受欢迎的。
提交请求前,请确保已添加/更新 适当的测试(以及所有现有的测试仍然通过您的测试) 更改),并且您的编码风格遵循PEP8,不会导致 抱怨的话。
从标记生成的RST文档:
::
pandoc –from=markdown –to=rst –output=README.rst README.md
法律
Ziad Sawalha版权所有2013。
根据apache许可证2.0版(以下简称“许可证”)授权;您可以 除非符合许可证,否则不要使用此文件。你可以获得 在
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。