数据建模与验证python库
booby-ng的Python项目详细描述
这个项目是官方项目的一个分支*具有一些新功能。
Booby是用Python编写的独立数据建模库和验证库Booby正在积极开发中(请访问this blog post以获取更多信息和路线图),并在Apache2 license下获得许可,因此请随时访问contribute和report 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