{ "info": { "author": "Gabriel Weich", "author_email": "gabrielweich.dev@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": "# Gesiel - Simple and Flexible Schema Definition\n\n\n\nGesiel allows the definition of powerful schemas in python.\n\n - No dependencies.\n - Plain python objects.\n - It works.\n\n\n### Simple Usage\n```python\nfrom gesiel import fields, Schema\nfrom gesiel.validators import Length, Email\n\nclass Person(Schema):\n name = fields.String()\n age = fields.Int(required=True)\n email = fields.String(validators=[Email()])\n dead = fields.Bool(default=False)\n description = fields.String(validators=[Length(5, 150)])\n\np = Person.from_dict({'name': 'Gesiel', 'age': 29, 'email':'gesiel@email.com'})\np.description = 'Test description'\nassert p.to_dict() == {\n 'name': 'Gesiel',\n 'age': 29,\n 'email': 'gesiel@email.com',\n 'dead': False,\n 'description': 'Test description'\n}\n```\n\n\n\n### Custom fields\n```python\nclass Code(Int):\n def load(self, value):\n code = super(Code, self).load(value)\n return code*2\n\nclass Person(Schema):\n code = Code()\n\nassert Person.from_dict({'code': \"25\"}).code == 50\n```\n\n### Validators\n```python\nfrom gesiel.exceptions import InvalidSchema, ValidationError\n\ndef validate_name(name):\n if name[0] != \"f\":\n raise ValidationError('Name does not starts with f')\n\nclass Person(Schema):\n name = fields.String(validators=[Length(2, 6), validate_name])\n\nwith pytest.raises(InvalidSchema):\n Person.from_dict({'name': \"gesiel\"})\n\nwith pytest.raises(InvalidSchema):\n Person.from_dict({'name': \"g\"})\n\nassert Person.from_dict({'name': \"fesiel\"}).name == \"fesiel\"\n```\n\n\n\n### Skip None\n```python\nclass Person(Schema):\n name = fields.String(required=True)\n age = fields.Int()\n\np = Person.from_dict({'name': None, 'age':23})\nassert p.to_dict() == {'name': None, 'age': 23}\nassert p.to_dict(skip_none=True) == {'age': 23}\n\nwith pytest.raises(InvalidSchema, match='Missing required field'):\n Person.from_dict({'name': None}, skip_none=True)\n```\n\n\n### Post load\n```python\nclass Person(Schema):\n name = fields.String()\n lastname = fields.String()\n\n def post_load(self, context):\n context['full_name'] = context['name'] + \" \" + context['lastname']\n return context\n\n\nassert Person.from_dict({'name': 'Gesiel', 'lastname': 'Souza'}).full_name == 'Gesiel Souza'\n```\n\n\n### Custom language\n```python\nfrom gesiel.messages import Messages, Config, EnglishLanguage\n\nc = Config({Messages.MISSING_REQUIRED_FIELD: 'Campo obrigat\u00f3rio'})\n\nclass Person(Schema):\n name = fields.String(required=True)\n\nwith pytest.raises(InvalidSchema, match='Campo obrigat\u00f3rio') as e:\n Person.from_dict({})\n\nc.language = EnglishLanguage\nwith pytest.raises(InvalidSchema, match='Missing required field') as e:\n Person.from_dict({})\n```\n\n\n### Merge\n```python\nclass Person(Schema):\n name = fields.String()\n last_name = fields.String()\n age = fields.Int()\n dead = fields.Bool(default=False)\n\nassert Person.from_dict({'name': None, 'age': 20, 'last_name': None}).merge({'age': 35, 'last_name': 'Souza', 'dead': None}, skip_none=True).to_dict() == {'name': None, 'age': 35, 'last_name': 'Souza', 'dead': False}\n\n```\n\n## Important:\n - Still in alpha.\n - Full docs are in progress.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gabrielweich/gesiel", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "gesiel", "package_url": "https://pypi.org/project/gesiel/", "platform": "", "project_url": "https://pypi.org/project/gesiel/", "project_urls": { "Homepage": "https://github.com/gabrielweich/gesiel" }, "release_url": "https://pypi.org/project/gesiel/0.1.9/", "requires_dist": null, "requires_python": "", "summary": "Simple and flexible schema definition.", "version": "0.1.9" }, "last_serial": 4875476, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "8616a6ce83f93395a999c80d39d30625", "sha256": "bb6a72480c6e4e77d3198b85f8bf5e392aefc81184a14db4e96a35eb6663d01e" }, "downloads": -1, "filename": "gesiel-0.1.0.tar.gz", "has_sig": false, "md5_digest": "8616a6ce83f93395a999c80d39d30625", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2716, "upload_time": "2019-02-22T19:18:06", "url": "https://files.pythonhosted.org/packages/31/05/75163d4f7d8039afac479cf52a1cc438db93f32d8086eb6cee2a81605889/gesiel-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "232f17535913fe39dd5da239d4b969e7", "sha256": "20514dffa3f018f4c6333b21446c948765cba3c4bf26b4a7cc1260eae24eea1c" }, "downloads": -1, "filename": "gesiel-0.1.1.tar.gz", "has_sig": false, "md5_digest": "232f17535913fe39dd5da239d4b969e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2818, "upload_time": "2019-02-23T12:29:06", "url": "https://files.pythonhosted.org/packages/40/2e/86173623027911379039ded6008c80f153c6a6f790667ff3a57f027b6a07/gesiel-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "9b6b4b775d4b28e2eb8dd005f3440216", "sha256": "2f2aaa2b639c25b2f58e08b2dac481b9cc61315673c6fa5880ed774906a6779d" }, "downloads": -1, "filename": "gesiel-0.1.2.tar.gz", "has_sig": false, "md5_digest": "9b6b4b775d4b28e2eb8dd005f3440216", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2842, "upload_time": "2019-02-25T13:47:18", "url": "https://files.pythonhosted.org/packages/d5/b9/bbbeb7bcddae3b83f0ddcd0349ab11ef73ad77d650d0423acd9bb98777fd/gesiel-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "174a0d8d7da5763ae05e6bfa86e7cca1", "sha256": "ec6736523397837e8091541888f7e0a442fff3e5bd3048f062995c0f2dcef7cf" }, "downloads": -1, "filename": "gesiel-0.1.3.tar.gz", "has_sig": false, "md5_digest": "174a0d8d7da5763ae05e6bfa86e7cca1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2885, "upload_time": "2019-02-26T12:21:03", "url": "https://files.pythonhosted.org/packages/d6/c0/96405c37b59b2e8f566d0a374670b1e38eb8bb670a5d7051864349ec3fa6/gesiel-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "35666e7043d7682aaac2be1024f16b8c", "sha256": "05d10737eb209571a3a021d13a61d4c9a1cf5b0115d90036f0f4e41570de6713" }, "downloads": -1, "filename": "gesiel-0.1.4.tar.gz", "has_sig": false, "md5_digest": "35666e7043d7682aaac2be1024f16b8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4081, "upload_time": "2019-02-26T13:11:15", "url": "https://files.pythonhosted.org/packages/18/46/b3e77beff557cb6832983f969f37725b45849c99889c7653c3e13312603b/gesiel-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "153b77f6995c56a4494eab85aca39bf4", "sha256": "b5c7ce251633257c9c1d82038e0a9895a0e8a5de3114c1fe3fea0bda196ce547" }, "downloads": -1, "filename": "gesiel-0.1.5.tar.gz", "has_sig": false, "md5_digest": "153b77f6995c56a4494eab85aca39bf4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4128, "upload_time": "2019-02-26T13:29:14", "url": "https://files.pythonhosted.org/packages/d7/e0/2a4bedc86d36d2b189ccfeb99c148976eb0979906886cacde4dee4ee8ee6/gesiel-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "27a22022eb3f40a982c2911777217258", "sha256": "ffce4fdc8222b3e2d3805391e53797004d3c9bea3e792ee0a27e77920f103682" }, "downloads": -1, "filename": "gesiel-0.1.6.tar.gz", "has_sig": false, "md5_digest": "27a22022eb3f40a982c2911777217258", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4107, "upload_time": "2019-02-26T18:51:30", "url": "https://files.pythonhosted.org/packages/e5/5d/f6d0afcc75b1a72a35336d64d9c7b1a6261b3c47a7dcfd973bd6a1fe82a9/gesiel-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "dbf57430eff62370c7ed5a254fbca7c3", "sha256": "de1bbb7377c81f88d8fd4c9bdbebf59778877c3c8ff46c3d304dc9f24ba88555" }, "downloads": -1, "filename": "gesiel-0.1.7.tar.gz", "has_sig": false, "md5_digest": "dbf57430eff62370c7ed5a254fbca7c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4101, "upload_time": "2019-02-26T20:33:33", "url": "https://files.pythonhosted.org/packages/27/d9/27cd4f0ebf77ffff5a0fc10aff67260e453879639156c50c9dc0714e02b0/gesiel-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "55426c1ddb99023fc86a882fb6e01187", "sha256": "c0760799abc79507b6106e2a592898d10367faf52805af01b748089e10295135" }, "downloads": -1, "filename": "gesiel-0.1.8.tar.gz", "has_sig": false, "md5_digest": "55426c1ddb99023fc86a882fb6e01187", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4122, "upload_time": "2019-02-27T12:50:42", "url": "https://files.pythonhosted.org/packages/8a/90/01ec6fe3ddf2093273272963eee3dcaf7e51aaa5e8991d9ccb12dfa21f97/gesiel-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "793fa518e4ad183ab1d5190bc6f7ba5b", "sha256": "6d2d470a58f34a4e42cd7e0d5ee02977a8e0dcb4953a0d781e51f6899adf3b67" }, "downloads": -1, "filename": "gesiel-0.1.9.tar.gz", "has_sig": false, "md5_digest": "793fa518e4ad183ab1d5190bc6f7ba5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4131, "upload_time": "2019-02-27T18:03:48", "url": "https://files.pythonhosted.org/packages/88/14/2ed6ca827926653ad369aff3bbf4be878af5d2b0c34b0dc4dc6f22065ee0/gesiel-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "793fa518e4ad183ab1d5190bc6f7ba5b", "sha256": "6d2d470a58f34a4e42cd7e0d5ee02977a8e0dcb4953a0d781e51f6899adf3b67" }, "downloads": -1, "filename": "gesiel-0.1.9.tar.gz", "has_sig": false, "md5_digest": "793fa518e4ad183ab1d5190bc6f7ba5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4131, "upload_time": "2019-02-27T18:03:48", "url": "https://files.pythonhosted.org/packages/88/14/2ed6ca827926653ad369aff3bbf4be878af5d2b0c34b0dc4dc6f22065ee0/gesiel-0.1.9.tar.gz" } ] }