{ "info": { "author": "Peter Facka", "author_email": "pfacka@binaryparadise.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3" ], "description": "dict2colander\n=============\n\n*Convert python dict (YAML, JSON) to colander schema.*\n\n`Colander `_\nis library, which enables you to validate and convert YAML, JSON\nand HTML form data. Colander schema as it is could be defined only\nin Python declaratively for example like this:\n\n\n\n.. code-block:: python\n\n import colander\n \n class Person(colander.MappingSchema):\n name = colander.SchemaNode(colander.String())\n age = colander.SchemaNode(colander.Int(),\n validator=colander.Range(0, 200))\n \n @colander.instantiate()\n class phones(colander.SequenceSchema):\n \n @colander.instantiate()\n class phone(colander.MappingSchema):\n location = colander.SchemaNode(colander.String(),\n validator=colander.OneOf(['home', 'work']))\n number = colander.SchemaNode(colander.String())\n\nWith dict2colander you can define the same colander schema in\ndictionary and convert it to colader.MappingSchema object.\n\nInstalation\n-----------\n\nYou can install dict2colander from\n`Python Package Index `_\nlike this:\n\n\n\n.. code-block:: shell\n\n pip install dict2colander\n\nUsage\n-----\n\n\n\n.. code-block:: python\n\n from dict2colander import dict2colander\n \n schema_dict = {\n 'type': 'Mapping',\n 'name': 'person',\n 'subnodes': [\n {'type': 'String', 'name': 'name'},\n \n {'type': 'Integer', 'name': 'age',\n 'validators':\n {'Range': {'args': ('0', '200')}}},\n \n {'type': 'Sequence',\n 'name': 'phones',\n 'subnodes': [\n \n {'type': 'Mapping', 'name': 'phone',\n 'subnodes': [\n \n {'type': 'String', 'name': 'location',\n 'validators':\n {'OneOf': {'args': (['home', 'work'],)}}},\n \n {'type': 'String', 'name': 'number'}\n \n ]}]},\n ]\n }\n \n schema = dict2colander(schema_dict)\n data = {\n 'name': 'keith',\n 'age': '20',\n 'friends':[('1', 'jim'),('2', 'bob'), ('3', 'joe'), ('4', 'fred')],\n 'phones':[{'location':'home', 'number':'555-1212'},\n {'location':'work', 'number':'555-8989'},],\n }\n \n serialized_data = schema.deserialize(data)\n print serialized_data\n\nDict2colander is intended to make possible to read colander schemas\nfrom YAML or JSON format. So here is schema from previous example\nwritten in YAML:\n\n\n\n.. code-block:: yaml\n\n ---\n name: person\n type: Mapping\n \n subnodes:\n - name: name\n type: String\n \n - name: age\n type: Integer\n validators:\n Range:\n args: ['0', '200']\n \n - name: phones\n type: Sequence\n subnodes: \n - name: phone\n type: Mapping\n subnodes:\n - name: location\n type: String\n validators:\n OneOf:\n args: [[home, work]]\n \n - name: number\n type: String\n\nNote that *Range* validator has arguments defined as *Strings* not\n*Integers* although that field *age* is of type *Integer*.\n\nHere are data to deserialize in YAML format from first example:\n\n\n\n.. code-block:: yaml\n\n ---\n name: keith\n age: 20\n friends:\n - [1, jim]\n - [2, bob]\n - [3, joe]\n - [4, fred]\n \n phones:\n - location: home\n number: 555-1212\n \n - location: work\n number: 555-8989\n\nHere is example how YAML data are deserialized with schema defined\nin YAML document.\n\n\n\n.. code-block:: python\n\n import yaml\n import dict2colander\n \n def deserialize(yaml_doc, yaml_schema):\n mapping_schema = dict2colander.dict2colander(yaml_schema)\n return mapping_schema.deserialize(yaml_doc)\n \n f = open('doc.yaml')\n doc = yaml.load(f)\n f.close()\n \n f = open('schema.yaml')\n schema = yaml.load(f)\n f.close()\n \n dict_doc = deserialize(doc, schema)\n print dict_doc", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/pfacka/dict2colander", "keywords": "schema validation dictionary Colander YAML JSON", "license": "MIT Licence (http://opensource.org/licenses/MIT)", "maintainer": null, "maintainer_email": null, "name": "dict2colander", "package_url": "https://pypi.org/project/dict2colander/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/dict2colander/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/pfacka/dict2colander" }, "release_url": "https://pypi.org/project/dict2colander/0.2/", "requires_dist": null, "requires_python": null, "summary": "Dictionary to Colander schema conversion library", "version": "0.2" }, "last_serial": 1007562, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "840c433736f54881ef8416af86e97af9", "sha256": "b7aca697c3f6f0bc8dc718f6a6cc883e3d350b2aada3df581916b2168e484f8f" }, "downloads": -1, "filename": "dict2colander-0.1.0-py2.7.egg", "has_sig": false, "md5_digest": "840c433736f54881ef8416af86e97af9", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 11662, "upload_time": "2013-04-22T16:06:05", "url": "https://files.pythonhosted.org/packages/24/d0/69d7a6bce43a38e2a90bcc2a9ed8dcecf1272d65490a8eac96bba0e0926b/dict2colander-0.1.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "33e5f9c5ba5827b80c2bff22291908b9", "sha256": "260bea4496df0118a5f87abbaaad04db45d87bc9b4ec22d4452165e7f7c49c67" }, "downloads": -1, "filename": "dict2colander-0.1.tar.gz", "has_sig": false, "md5_digest": "33e5f9c5ba5827b80c2bff22291908b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5167, "upload_time": "2013-04-22T16:05:40", "url": "https://files.pythonhosted.org/packages/fb/62/87b147d5eebb1bc6020f16362788b798f7c74be88ebcd2656234143e607e/dict2colander-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "1ae1bfcc42d706932e40992b9292a4de", "sha256": "6f668d60896991dcd271465b755f00ffd6f87f81e0d4d054be62a16c086978c7" }, "downloads": -1, "filename": "dict2colander-0.2.tar.gz", "has_sig": false, "md5_digest": "1ae1bfcc42d706932e40992b9292a4de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7398, "upload_time": "2014-02-21T14:49:38", "url": "https://files.pythonhosted.org/packages/aa/7e/5ed2ba3dc2f06457b76d4bc8c93559179472bf87e6982f9a9e5cea30e84e/dict2colander-0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1ae1bfcc42d706932e40992b9292a4de", "sha256": "6f668d60896991dcd271465b755f00ffd6f87f81e0d4d054be62a16c086978c7" }, "downloads": -1, "filename": "dict2colander-0.2.tar.gz", "has_sig": false, "md5_digest": "1ae1bfcc42d706932e40992b9292a4de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7398, "upload_time": "2014-02-21T14:49:38", "url": "https://files.pythonhosted.org/packages/aa/7e/5ed2ba3dc2f06457b76d4bc8c93559179472bf87e6982f9a9e5cea30e84e/dict2colander-0.2.tar.gz" } ] }