用于无模式项目的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
由于外键约束,java数据库插入失败   java在对失败的测试用例截图时出错,并且它没有附加到扩展报告中   java FragmentPagerAdapter总是从第一页开始   java内存泄漏,当我将数据从一个树存储库复制到另一个ext js 4.1时   java确保带有特定注释的字段是“私有的”   Java如何将UTC毫秒转换为UTC日期   开源Java:Solaris上的AWT   java为什么BufferedReader只读取第一行?   执行数据库查询时,java JTable不会刷新   java 7中的下划线和二进制文字。!!!??   java使用STaX将xml转换为另一个xml需要很多时间   hadoop如何使用JavaAPI从hbase中的表中选择特定列   使用JLabel的java拖放   用于“绘制”pdf文件的pdf生成Java库   java getResourceAsStream返回null?   java在目标帧中打开窗口   滚动对象时,java鼠标光标不会改变   java有人能解释二进制搜索树中的递归delete()并帮我转换它吗