{ "info": { "author": "Brian Waldon", "author_email": "bcwaldon@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Warlock \u2014 self-validating Python objects using JSON schema\n\n[![PyPI](https://img.shields.io/pypi/v/warlock.svg)][warlock]\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/warlock.svg)][warlock]\n[![PyPI - Downloads](https://img.shields.io/pypi/dw/warlock.svg)][pypistats]\n\n[![Build Status](https://travis-ci.org/bcwaldon/warlock.svg?branch=master)][ci-builds]\n[![Coverage Status](https://coveralls.io/repos/github/bcwaldon/warlock/badge.svg?branch=master)][coveralls]\n\n## Installation\n\nWarlock is [available on PyPI][warlock]:\n\n```shell\npip install warlock\n```\n\n## Usage\n\n1) Create your schema\n\n ```python\n >>> schema = {\n 'name': 'Country',\n 'properties': {\n 'name': {'type': 'string'},\n 'abbreviation': {'type': 'string'},\n 'population': {'type': 'integer'},\n },\n 'additionalProperties': False,\n }\n ```\n\n2) Create a model\n\n ```python\n >>> import warlock\n >>> Country = warlock.model_factory(schema)\n ```\n\n3) Create an object using your model\n\n ```python\n >>> sweden = Country(name='Sweden', abbreviation='SE')\n ```\n\n4) Let the object validate itself\n\n ```python\n >>> sweden.name = 5\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"warlock/core.py\", line 53, in __setattr__\n raise InvalidOperation(msg)\n warlock.core.InvalidOperation: Unable to set 'name' to '5'\n\n >>> sweden.overlord = 'Bears'\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"warlock/core.py\", line 53, in __setattr__\n raise InvalidOperation(msg)\n warlock.core.InvalidOperation: Unable to set 'overlord' to 'Bears'\n ```\n\n5) Generate a [JSON Patch document](http://tools.ietf.org/html/draft-ietf-appsawg-json-patch) to track changes\n\n ```python\n >>> sweden.population=9453000\n >>> sweden.patch\n '[{\"path\": \"/population\", \"value\": 9453000, \"op\": \"add\"}]'\n ```\n\n[warlock]: https://pypi.org/project/warlock/\n[pip]: https://pip.pypa.io/en/stable/\n[ci-builds]: https://travis-ci.org/bcwaldon/warlock\n[coveralls]: https://coveralls.io/github/bcwaldon/warlock?branch=master\n[pypistats]: https://pypistats.org/packages/warlock", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/bcwaldon/warlock", "keywords": "JSON schema,JSON patch,model validation", "license": "Apache-2.0", "maintainer": "Jan Willhaus", "maintainer_email": "mail@janwillhaus.de", "name": "warlock", "package_url": "https://pypi.org/project/warlock/", "platform": "", "project_url": "https://pypi.org/project/warlock/", "project_urls": { "Homepage": "http://github.com/bcwaldon/warlock" }, "release_url": "https://pypi.org/project/warlock/1.3.3/", "requires_dist": null, "requires_python": "", "summary": "Python object model built on JSON schema and JSON patch.", "version": "1.3.3" }, "last_serial": 5291450, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "5d063109b5c6c032a13b08a282aec4ff", "sha256": "2e393791901ac57087c05cba5d77c85e8fcceaa72de67460fd142c8c62ec02d2" }, "downloads": -1, "filename": "warlock-0.0.1.tar.gz", "has_sig": false, "md5_digest": "5d063109b5c6c032a13b08a282aec4ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6025, "upload_time": "2012-06-02T21:45:26", "url": "https://files.pythonhosted.org/packages/1b/1a/423f65aad62f71e845d0b09bf13dd44a4c3ef2740ef4568401b1dcd1d80c/warlock-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "91e2b3df701672453ae395e225688355", "sha256": "f349286b201479bfb55f0446712fc0ee8c1e3228407c51761d01cd3d67b5d9ba" }, "downloads": -1, "filename": "warlock-0.0.2.tar.gz", "has_sig": false, "md5_digest": "91e2b3df701672453ae395e225688355", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6128, "upload_time": "2012-07-14T02:47:21", "url": "https://files.pythonhosted.org/packages/ec/5f/10675460b8cfa91e3645a52ec8c26c32a00fb8de099df9872112c3649939/warlock-0.0.2.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "10e39eb33b44baef48686fe900c25a46", "sha256": "a7eee2fabd89444df39fffdd27356121cbd23b1a454e581b8e778123164ac99e" }, "downloads": -1, "filename": "warlock-0.1.0.tar.gz", "has_sig": false, "md5_digest": "10e39eb33b44baef48686fe900c25a46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6181, "upload_time": "2012-07-14T02:55:28", "url": "https://files.pythonhosted.org/packages/5a/67/873aed9aab267fdbb9a15ba4b3340f3b9e699706c48b48298bb7aec01b7a/warlock-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bc633364fb2ffd50e47b732d4d2dcbec", "sha256": "842550f3c679c59303e00e9f23de963fbd2c72c1d3667d4d9764bd6a39ccf8fc" }, "downloads": -1, "filename": "warlock-0.2.0.tar.gz", "has_sig": false, "md5_digest": "bc633364fb2ffd50e47b732d4d2dcbec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6207, "upload_time": "2012-07-27T20:32:07", "url": "https://files.pythonhosted.org/packages/19/c3/415449eddb44fdc2661e0b312f2579a04218a0977e9c2ab9c74219daa391/warlock-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "cc47ecf6d2e7a6d85afdf4c42c8120fe", "sha256": "ef4f32abe0ef75201574b0d3d164d293534e9c4bf3ad60e312a2cd2c4d9c5330" }, "downloads": -1, "filename": "warlock-0.3.0.tar.gz", "has_sig": false, "md5_digest": "cc47ecf6d2e7a6d85afdf4c42c8120fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6222, "upload_time": "2012-07-27T21:46:43", "url": "https://files.pythonhosted.org/packages/d3/8d/13dc9c4f7222bace4c7f1bc2a5fca65f7b2ad062833fffc55583f8283427/warlock-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "9c59ef368becbd4f2035ab511be610e9", "sha256": "26a94369bd775b33aa62b0b3d0112ffc937f6640625e5760bc22aa3ff9b70910" }, "downloads": -1, "filename": "warlock-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9c59ef368becbd4f2035ab511be610e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6228, "upload_time": "2012-07-27T21:58:24", "url": "https://files.pythonhosted.org/packages/6a/8c/57c4ba4a2a16b84334226f5be8312b01c257040b1853370bf4d40f31338b/warlock-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "cd232322e891f1ccb8152e308dfdf558", "sha256": "5f0f62041abe195990bc64d9be09732ff24aaaadfceddc7038108339ea151a14" }, "downloads": -1, "filename": "warlock-0.4.0.tar.gz", "has_sig": false, "md5_digest": "cd232322e891f1ccb8152e308dfdf558", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6303, "upload_time": "2012-07-30T05:17:56", "url": "https://files.pythonhosted.org/packages/49/1b/1fbfa8051415e8da6438279f9f8cb30c98e85887b420ff106ef02d3c8e38/warlock-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "96a37ed35b036db8a5e67ba77afa2e36", "sha256": "ea0cc1c79a35bec0643c97842f4377ce032922060d9a890f4fffe9159ede81b3" }, "downloads": -1, "filename": "warlock-0.5.0.tar.gz", "has_sig": false, "md5_digest": "96a37ed35b036db8a5e67ba77afa2e36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6717, "upload_time": "2012-10-09T17:53:25", "url": "https://files.pythonhosted.org/packages/04/81/4897dae1489e6b7595771e0f2a9c997766f82dd0b1e3bbe0a305c93c0816/warlock-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "aea97cd6bb367c0e3a7eead28310a99a", "sha256": "80aa3117d561b27b52c6d68bcb10b729b0af336931526bd5f906f8b23780abbd" }, "downloads": -1, "filename": "warlock-0.6.0.tar.gz", "has_sig": false, "md5_digest": "aea97cd6bb367c0e3a7eead28310a99a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6797, "upload_time": "2012-11-19T22:03:26", "url": "https://files.pythonhosted.org/packages/c6/1c/45ead527acb0df5f4744ece1f6c15be6d74becd29e6798780ffd3e46bbd5/warlock-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "7567a1df0bbf76a113d945f307d93d9a", "sha256": "cc913fe3855f95512d183d158bd0a0f4e1c4b0619041ddb44fd15af8dc86e22a" }, "downloads": -1, "filename": "warlock-0.7.0.tar.gz", "has_sig": false, "md5_digest": "7567a1df0bbf76a113d945f307d93d9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7080, "upload_time": "2012-11-26T17:27:03", "url": "https://files.pythonhosted.org/packages/2b/f3/fa2596cd25d7164752ec0ef2e420577bf58205533e5c94eb6612a30d13eb/warlock-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "f0574d891082fa16182e65155c6ce667", "sha256": "106b6654f81993dbc456d71f559c8422f4514f322bfa62ce59e016cbb33bbb82" }, "downloads": -1, "filename": "warlock-0.8.0.tar.gz", "has_sig": false, "md5_digest": "f0574d891082fa16182e65155c6ce667", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7240, "upload_time": "2013-01-21T17:42:57", "url": "https://files.pythonhosted.org/packages/79/7f/a2488d22cfce95425e4810eb2a6706ce8292c6e88ca0384c6123fbca8996/warlock-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "e80ef4166e0661abb58bc2a021cc2b62", "sha256": "22507762a64a64c07e7861c1fcb78787070c2dc8cade1a583ebf5aaf917fcf1f" }, "downloads": -1, "filename": "warlock-0.8.1.tar.gz", "has_sig": false, "md5_digest": "e80ef4166e0661abb58bc2a021cc2b62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4162, "upload_time": "2013-01-31T15:47:32", "url": "https://files.pythonhosted.org/packages/de/57/bc87d45879257152a16cab75faf5873493425a230e7129ff87130fc39309/warlock-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "7155e86e0f92c9030fb68bd9fee6c9ab", "sha256": "2b437d4f352e0dec9882f7ad0a01ca1c61a7bd21bb5729df354bbb13876056ef" }, "downloads": -1, "filename": "warlock-0.8.2.tar.gz", "has_sig": false, "md5_digest": "7155e86e0f92c9030fb68bd9fee6c9ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4165, "upload_time": "2013-03-25T16:45:27", "url": "https://files.pythonhosted.org/packages/87/07/fba0011bce0e1ade8335ece55afb35717b9fa8f66d52fcef766f9aba00f3/warlock-0.8.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "0661dbc7d8eaa63d425f25d1f62b4109", "sha256": "f777fed5c5ce6da54c6f23e1aea960220e8b1b7084dca2b9a90f70c6f15d9306" }, "downloads": -1, "filename": "warlock-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0661dbc7d8eaa63d425f25d1f62b4109", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4208, "upload_time": "2013-04-26T17:19:29", "url": "https://files.pythonhosted.org/packages/73/79/6beda83f5ed3a4633565a3f02a6faf89b0d6564181e9370428873cf75505/warlock-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a0096d4843da1f939c873460b53c02e0", "sha256": "986ccfd647f89c1c8e7ebe40d159e5633818a58754b3ffdf51c4816927977791" }, "downloads": -1, "filename": "warlock-1.0.1.tar.gz", "has_sig": false, "md5_digest": "a0096d4843da1f939c873460b53c02e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4192, "upload_time": "2013-06-28T16:48:52", "url": "https://files.pythonhosted.org/packages/95/c0/233e8f644aaf3d6d76c47890be9a8b991570c27209927c5edb9e8d3ac7ab/warlock-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "79649fd8096eeb0c175a193f06237676", "sha256": "bbfb4279034ccc402723e38d2a2e67cd619988bf4802fda7ba3e8fab15762651" }, "downloads": -1, "filename": "warlock-1.1.0.tar.gz", "has_sig": false, "md5_digest": "79649fd8096eeb0c175a193f06237676", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7879, "upload_time": "2013-11-19T15:08:09", "url": "https://files.pythonhosted.org/packages/5a/0a/69c4b694e8f15fbb05dfdcdb08a555a69459d1f0cee2a165e787394724fa/warlock-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "8389225c589ada11a9094abc5d9053df", "sha256": "7c0d17891e14cf77e13a598edecc9f4682a5bc8a219dc84c139c5ba02789ef5a" }, "downloads": -1, "filename": "warlock-1.2.0.tar.gz", "has_sig": false, "md5_digest": "8389225c589ada11a9094abc5d9053df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8210, "upload_time": "2015-10-12T17:09:47", "url": "https://files.pythonhosted.org/packages/0f/d4/408b936a3d9214b7685c35936bb59d9254c70ff319ee6a837b9efcf5615e/warlock-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "61cc809a3af2c76288f4dd26a003932d", "sha256": "d7403f728fce67ee2f22f3d7fa09c9de0bc95c3e7bcf6005b9c1962b77976a06" }, "downloads": -1, "filename": "warlock-1.3.0.tar.gz", "has_sig": false, "md5_digest": "61cc809a3af2c76288f4dd26a003932d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8853, "upload_time": "2016-06-25T18:13:39", "url": "https://files.pythonhosted.org/packages/2d/40/9f01a5e1574dab946598793351d59c86f58209d182d229aaa545abb98894/warlock-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "e95ac5ddc72797331774a191c0a7cc06", "sha256": "1f412b1425b74ccc859d7b88eb1316928a7efbf5368eab9058a949c981dc99bc" }, "downloads": -1, "filename": "warlock-1.3.1.tar.gz", "has_sig": false, "md5_digest": "e95ac5ddc72797331774a191c0a7cc06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4254, "upload_time": "2019-05-19T07:54:38", "url": "https://files.pythonhosted.org/packages/77/c6/48ad0aac045a477546709c952d12511f7f2291096caa4e6a3f558369f37d/warlock-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "26edcd20f64b550b29de7cb8ac3437fd", "sha256": "f8e5d67aeaa60a61befac4560912c2cee8a57bf534dcf48d656a993a69af0670" }, "downloads": -1, "filename": "warlock-1.3.2.tar.gz", "has_sig": false, "md5_digest": "26edcd20f64b550b29de7cb8ac3437fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10867, "upload_time": "2019-05-20T06:57:56", "url": "https://files.pythonhosted.org/packages/7e/9b/648ceb3bc527e821c04d69f14facb0655268288ac7d8d6aa3a026c3316ea/warlock-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "746aba989d97762948e5fca6601f283f", "sha256": "a093c4d04b42b7907f69086e476a766b7639dca50d95edc83aef6aeab9db2090" }, "downloads": -1, "filename": "warlock-1.3.3.tar.gz", "has_sig": false, "md5_digest": "746aba989d97762948e5fca6601f283f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11602, "upload_time": "2019-05-20T10:11:38", "url": "https://files.pythonhosted.org/packages/c2/36/178b26a338cd6d30523246da4721b1114306f588deb813f3f503052825ee/warlock-1.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "746aba989d97762948e5fca6601f283f", "sha256": "a093c4d04b42b7907f69086e476a766b7639dca50d95edc83aef6aeab9db2090" }, "downloads": -1, "filename": "warlock-1.3.3.tar.gz", "has_sig": false, "md5_digest": "746aba989d97762948e5fca6601f283f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11602, "upload_time": "2019-05-20T10:11:38", "url": "https://files.pythonhosted.org/packages/c2/36/178b26a338cd6d30523246da4721b1114306f588deb813f3f503052825ee/warlock-1.3.3.tar.gz" } ] }