数据建模与验证python库

booby-ng的Python项目详细描述


Latest versionDocsLicenseNumber of PyPI downloadsBuild status

这个项目是官方项目的一个分支*具有一些新功能。

Booby是用Python编写的独立数据建模库和验证库Booby正在积极开发中(请访问this blog post以获取更多信息和路线图),并在Apache2 license下获得许可,因此请随时访问contributereport errors and suggestions

用法

请参阅下面的示例代码以了解主要功能。

fromboobyimportModel,fieldsclassToken(Model):key=fields.String()secret=fields.String()classAddress(Model):line_1=fields.String()line_2=fields.String()classUser(Model):login=fields.String(required=True)name=fields.String()email=fields.Email()site=fields.URL()token=fields.Embedded(Token,required=True)addresses=fields.Collection(Address)jack=User(login='jack',name='Jack',email='jack@example.com',url='http://mysite.com',token={'key':'vs7dfxxx','secret':'ds5ds4xxx'},addresses=[{'line_1':'Main Street'},{'line_1':'Main St'}])ifjack.is_valid:printjack.to_json(indent=2)else:printjson.dumps(dict(jack.validation_errors))
{"email":"jack@example.com","url":"http://mysite.com","login":"jack","token":{"secret":"ds5ds4xxx","key":"vs7dfxxx"},"name":"Jack","addresses":[{"line_1":"Main St","line_2":null},{"line_1":"Main Street","line_2":null}]}

高级的

当尝试传递属性作为输入时,PUBY会升高,因为DATTHATA不存在作为属性。当你想传递一个大的JSON并且希望Booby只接受它能理解的参数时,这非常烦人

例如:

fromboobyimportModel,fieldsclassUser(Model):login=fields.String(required=True)name=fields.String()input_info=dict(login="john",name="doe",address="other field")jack=User(**input_info)

此代码引发异常:

> python example.py
Traceback (most recent call last):
  File "/Users/Dani/Projects/apitest/apitest/actions/analyze/console.py", line 39, in launch_analyze_in_console
    postman_parser(json_info)
  File "/Users/Dani/Projects/apitest/apitest/actions/analyze/postman.py", line 52, in postman_parser
    end_points=postman_info.get("item")))
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/models.py", line 108, in __init__
    self._update(kwargs)
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/models.py", line 163, in _update
    self[k]= v
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/models.py", line 150, in __setitem__
    setattr(self, k, v)
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/fields.py", line 317, in __set__
    value= self._resolve(value)
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/fields.py", line 325, in _resolve
    item= self.model(**item)
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/models.py", line 108, in __init__
    self._update(kwargs)
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/models.py", line 163, in _update
    self[k]= v
  File "/Users/Dani/.virtualenvs/apitest/lib/python3.5/site-packages/booby/models.py", line 148, in __setitem__

booby.errors.FieldError: address

如果希望Booby忽略这些不理解的属性,可以定义模型类,添加属性ignore missing

fromboobyimportModel,fieldsclassUser(Model):__ignore_missing__=Truelogin=fields.String(required=True)name=fields.String()input_info=dict(login="john",name="doe",address="other field")jack=User(**input_info)

安装

您可以使用pip或easy_install从pypi安装booby的最后一个稳定版本。

$ pip install booby

您还可以从github安装最新的源代码。

$ pip install -e git+git://github.com/jaimegildesagredo/booby.git#egg=booby

测试

要运行booby测试套件,您应该安装开发需求,然后运行notests。

$ pip install -r test-requirements.txt
$ nosetests tests/unit
$ nosetests tests/integration

更改

Changes

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

推荐PyPI第三方库


热门话题
java线程;创建一个单独的线程来定期执行某些操作   用java将SonarQube升级到5.2失败。util。同时发生的CancellationException:空   在线程对象上调用start时,线程上设置的java优先级无效   java如何在不使用reduce()或last()折叠的情况下获取通量的最后一项   java如何从ArrayList中获取元素?   应用了逻辑的JavaTwitterAPI   在这种情况下,怎样才能不让自己重复?安卓的java   JavaAndroid:线程可运行和处理程序。在run方法中发布问题(Handler.postXX在预期情况下不会按时运行)   java log4j grok与管道故障   使用循环返回命令选项时出现问题/仅运行一个命令(JAVA)   java双重比较问题   使用vertx的JWT公钥/私钥身份验证中的java握手   用Java将WMA和AAC音频转换为MP3   解析字符串java get index   与具有不同数据类型的密钥同名的java JSON