用于无模式项目的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 Admob不使用webview   Java Wicket表单:序列化对象类“myClassName”时出错   java googledriveapi更新文件与我的帐户管理员   java简单框架未知xml标记解析   java如何使用主类和用户获取Spark应用程序ID   java如何更改自定义属性的值?   java有没有办法在jMock中找到未使用的期望值?   gradle运行任务的java文档?   java通过使用数组来存储文本文件的行,通过覆盖来删除文本文件中的行   用于表达式语言注入的java利用负载   java IDEStyle程序运行   java在运行时启用/禁用Springws   爪哇芦苇。formatNumber NullPointException   java为什么我的代码无法检测两个动态实体之间的碰撞?