Hello community, here is the log from the commit of package python-warlock for openSUSE:Factory checked in at 2019-05-27 08:38:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-warlock (Old) and /work/SRC/openSUSE:Factory/.python-warlock.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-warlock" Mon May 27 08:38:26 2019 rev:16 rq:705263 version:1.3.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-warlock/python-warlock.changes 2018-12-24 11:46:01.497205846 +0100 +++ /work/SRC/openSUSE:Factory/.python-warlock.new.5148/python-warlock.changes 2019-05-27 08:38:26.203069773 +0200 @@ -1,0 +2,8 @@ +Fri May 24 13:56:28 UTC 2019 - Tomáš Chvátal <[email protected]> + +- Update to 1.3.2: + * README failed parsing in non utf-8 environments. Enforce encoding. #37 + * Move unittests to tests/ directory + * Upstream no longer ships tests on pypi + +------------------------------------------------------------------- Old: ---- warlock-1.3.0.tar.gz New: ---- warlock-1.3.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-warlock.spec ++++++ --- /var/tmp/diff_new_pack.wDJXvX/_old 2019-05-27 08:38:26.787069546 +0200 +++ /var/tmp/diff_new_pack.wDJXvX/_new 2019-05-27 08:38:26.787069546 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-warlock # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,25 +18,24 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-warlock -Version: 1.3.0 +Version: 1.3.3 Release: 0 Summary: Python object model built on top of JSON schema License: Apache-2.0 Group: Development/Languages/Python -Url: http://github.com/bcwaldon/warlock +URL: http://github.com/bcwaldon/warlock Source: https://files.pythonhosted.org/packages/source/w/warlock/warlock-%{version}.tar.gz -BuildRequires: %{python_module jsonpatch} -BuildRequires: %{python_module jsonschema} +BuildRequires: %{python_module jsonpatch >= 0.7} +BuildRequires: %{python_module jsonschema >= 0.10} BuildRequires: %{python_module pytest} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module six} +BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-jsonpatch >= 0.7 Requires: python-jsonschema >= 0.10 Requires: python-six -BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch - %python_subpackages %description @@ -44,20 +43,21 @@ %prep %setup -q -n warlock-%{version} -sed -i "s|jsonschema>=0.7,<1|jsonschema>=0.7,<=1|" requirements.txt %build %python_build %install %python_install +%python_expand %fdupes %{buildroot}%{$python_sitelib} %check -%python_exec setup.py test +# tests are not distributed by upstream and github does not +# use setuptools anymore %files %{python_files} -%defattr(-,root,root,-) %doc README.md +%license LICENSE %{python_sitelib}/* %changelog ++++++ warlock-1.3.0.tar.gz -> warlock-1.3.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/LICENSE new/warlock-1.3.3/LICENSE --- old/warlock-1.3.0/LICENSE 1970-01-01 01:00:00.000000000 +0100 +++ new/warlock-1.3.3/LICENSE 2019-05-20 08:26:22.000000000 +0200 @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/LICENSE.txt new/warlock-1.3.3/LICENSE.txt --- old/warlock-1.3.0/LICENSE.txt 2016-06-25 19:38:50.000000000 +0200 +++ new/warlock-1.3.3/LICENSE.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/MANIFEST.in new/warlock-1.3.3/MANIFEST.in --- old/warlock-1.3.0/MANIFEST.in 2016-06-25 19:38:50.000000000 +0200 +++ new/warlock-1.3.3/MANIFEST.in 2019-05-20 11:40:24.000000000 +0200 @@ -1,4 +1,4 @@ -include LICENSE.txt +include LICENSE include README.md include requirements.txt include setup.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/PKG-INFO new/warlock-1.3.3/PKG-INFO --- old/warlock-1.3.0/PKG-INFO 2016-06-25 20:13:37.000000000 +0200 +++ new/warlock-1.3.3/PKG-INFO 2019-05-20 12:10:52.000000000 +0200 @@ -1,10 +1,105 @@ -Metadata-Version: 1.0 +Metadata-Version: 2.1 Name: warlock -Version: 1.3.0 +Version: 1.3.3 Summary: Python object model built on JSON schema and JSON patch. Home-page: http://github.com/bcwaldon/warlock Author: Brian Waldon Author-email: [email protected] -License: UNKNOWN -Description: UNKNOWN +Maintainer: Jan Willhaus +Maintainer-email: [email protected] +License: Apache-2.0 +Description: # Warlock — self-validating Python objects using JSON schema + + [][warlock] + [][warlock] + [][pypistats] + + [][ci-builds] + [][coveralls] + + ## Installation + + Warlock is [available on PyPI][warlock]: + + ```shell + pip install warlock + ``` + + ## Usage + + 1) Create your schema + + ```python + >>> schema = { + 'name': 'Country', + 'properties': { + 'name': {'type': 'string'}, + 'abbreviation': {'type': 'string'}, + 'population': {'type': 'integer'}, + }, + 'additionalProperties': False, + } + ``` + + 2) Create a model + + ```python + >>> import warlock + >>> Country = warlock.model_factory(schema) + ``` + + 3) Create an object using your model + + ```python + >>> sweden = Country(name='Sweden', abbreviation='SE') + ``` + + 4) Let the object validate itself + + ```python + >>> sweden.name = 5 + Traceback (most recent call last): + File "<stdin>", line 1, in <module> + File "warlock/core.py", line 53, in __setattr__ + raise InvalidOperation(msg) + warlock.core.InvalidOperation: Unable to set 'name' to '5' + + >>> sweden.overlord = 'Bears' + Traceback (most recent call last): + File "<stdin>", line 1, in <module> + File "warlock/core.py", line 53, in __setattr__ + raise InvalidOperation(msg) + warlock.core.InvalidOperation: Unable to set 'overlord' to 'Bears' + ``` + + 5) Generate a [JSON Patch document](http://tools.ietf.org/html/draft-ietf-appsawg-json-patch) to track changes + + ```python + >>> sweden.population=9453000 + >>> sweden.patch + '[{"path": "/population", "value": 9453000, "op": "add"}]' + ``` + + [warlock]: https://pypi.org/project/warlock/ + [pip]: https://pip.pypa.io/en/stable/ + [ci-builds]: https://travis-ci.org/bcwaldon/warlock + [coveralls]: https://coveralls.io/github/bcwaldon/warlock?branch=master + [pypistats]: https://pypistats.org/packages/warlock + +Keywords: JSON schema,JSON patch,model validation Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Description-Content-Type: text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/README.md new/warlock-1.3.3/README.md --- old/warlock-1.3.0/README.md 2016-06-25 19:42:56.000000000 +0200 +++ new/warlock-1.3.3/README.md 2019-05-20 11:40:24.000000000 +0200 @@ -1,11 +1,25 @@ -# Warlock +# Warlock — self-validating Python objects using JSON schema -[](https://travis-ci.org/bcwaldon/warlock) +[][warlock] +[][warlock] +[][pypistats] -Build self-validating python objects using JSON schemas. +[][ci-builds] +[][coveralls] + +## Installation + +Warlock is [available on PyPI][warlock]: + +```shell +pip install warlock +``` + +## Usage 1) Create your schema + ```python >>> schema = { 'name': 'Country', 'properties': { @@ -15,22 +29,28 @@ }, 'additionalProperties': False, } + ``` 2) Create a model + ```python >>> import warlock >>> Country = warlock.model_factory(schema) + ``` 3) Create an object using your model + ```python >>> sweden = Country(name='Sweden', abbreviation='SE') + ``` 4) Let the object validate itself + ```python >>> sweden.name = 5 Traceback (most recent call last): - File "<stdin>", line 1, in <module> - File "warlock/core.py", line 53, in __setattr__ + File "<stdin>", line 1, in <module> + File "warlock/core.py", line 53, in __setattr__ raise InvalidOperation(msg) warlock.core.InvalidOperation: Unable to set 'name' to '5' @@ -40,9 +60,18 @@ File "warlock/core.py", line 53, in __setattr__ raise InvalidOperation(msg) warlock.core.InvalidOperation: Unable to set 'overlord' to 'Bears' + ``` 5) Generate a [JSON Patch document](http://tools.ietf.org/html/draft-ietf-appsawg-json-patch) to track changes + ```python >>> sweden.population=9453000 >>> sweden.patch '[{"path": "/population", "value": 9453000, "op": "add"}]' + ``` + +[warlock]: https://pypi.org/project/warlock/ +[pip]: https://pip.pypa.io/en/stable/ +[ci-builds]: https://travis-ci.org/bcwaldon/warlock +[coveralls]: https://coveralls.io/github/bcwaldon/warlock?branch=master +[pypistats]: https://pypistats.org/packages/warlock diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/requirements.txt new/warlock-1.3.3/requirements.txt --- old/warlock-1.3.0/requirements.txt 2016-06-25 19:38:50.000000000 +0200 +++ new/warlock-1.3.3/requirements.txt 2019-05-20 11:40:24.000000000 +0200 @@ -1,3 +1,3 @@ -jsonschema>=0.7,<3 +jsonschema>=0.7,<4 jsonpatch>=0.10,<2 six diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/setup.cfg new/warlock-1.3.3/setup.cfg --- old/warlock-1.3.0/setup.cfg 2016-06-25 20:13:37.000000000 +0200 +++ new/warlock-1.3.3/setup.cfg 2019-05-20 12:10:52.000000000 +0200 @@ -4,5 +4,4 @@ [egg_info] tag_build = tag_date = 0 -tag_svn_revision = 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/setup.py new/warlock-1.3.3/setup.py --- old/warlock-1.3.0/setup.py 2016-06-25 20:13:05.000000000 +0200 +++ new/warlock-1.3.3/setup.py 2019-05-20 12:07:12.000000000 +0200 @@ -13,22 +13,53 @@ # limitations under the License. import setuptools +import io +import os def parse_requirements(): - fap = open('requirements.txt', 'r') + fap = io.open("requirements.txt", "r", encoding="utf-8") raw_req = fap.read() fap.close() - return raw_req.split('\n') + return raw_req.split("\n") + + +def read(fname): + with io.open( + os.path.join(os.path.dirname(__file__), fname), "r", encoding="utf-8" + ) as fp: + return fp.read() setuptools.setup( - name='warlock', - version='1.3.0', - description='Python object model built on JSON schema and JSON patch.', - author='Brian Waldon', - author_email='[email protected]', - url='http://github.com/bcwaldon/warlock', - packages=['warlock'], + name="warlock", + version="1.3.3", + description="Python object model built on JSON schema and JSON patch.", + long_description=read("README.md"), + long_description_content_type="text/markdown", + keywords=["JSON schema", "JSON patch", "model validation"], + author="Brian Waldon", + author_email="[email protected]", + maintainer="Jan Willhaus", + maintainer_email="[email protected]", + url="http://github.com/bcwaldon/warlock", + packages=["warlock"], install_requires=parse_requirements(), + license="Apache-2.0", + 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", + ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/test/test_core.py new/warlock-1.3.3/test/test_core.py --- old/warlock-1.3.0/test/test_core.py 2016-06-25 20:04:07.000000000 +0200 +++ new/warlock-1.3.3/test/test_core.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,307 +0,0 @@ -# Copyright 2012 Brian Waldon -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import copy -import unittest -import os - -import json - -import six - -import warlock - - -fixture = { - 'name': 'Country', - 'properties': { - 'name': {'type': 'string'}, - 'population': {'type': 'integer'}, - }, - 'additionalProperties': False, -} - - -complex_fixture = { - 'name': 'Mixmaster', - 'properties': { - 'sub': {'type': 'object', - 'properties': {'foo': {'type': 'string'}}} - }, -} - -parent_fixture = { - 'name': 'Parent', - 'properties': { - 'name': {'type': 'string'}, - 'children': {'type': 'array', 'items': [{'type': 'object'}]} - }, - 'required': ['name', 'children'] -} - -child_fixture = { - 'name': 'Child', - 'properties': { - 'age': {'type': 'integer'}, - 'mother': {'type': 'object'} - }, - 'required': ['age', 'mother'] -} - - -nameless_fixture = { - 'properties': { - 'name': {'type': 'string'}, - 'population': {'type': 'integer'}, - }, - 'additionalProperties': False, -} - - -class TestCore(unittest.TestCase): - def test_create_invalid_object(self): - Country = warlock.model_factory(fixture) - self.assertRaises(ValueError, Country, name=1) - - def test_class_name_from_unicode_schema_name(self): - fixture_copy = copy.deepcopy(fixture) - fixture_copy['name'] = six.text_type(fixture_copy['name']) - # Can't set class.__name__ to a unicode object, ensure warlock - # does some magic to make it possible - warlock.model_factory(fixture_copy) - - def test_invalid_operations(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - - # Ensure a valid object was created - self.assertEqual(sweden.name, 'Sweden') - self.assertEqual(sweden.population, 9379116) - - # Specific exceptions should be raised for invalid operations - self.assertRaises(AttributeError, getattr, sweden, 'overlord') - exc = warlock.InvalidOperation - self.assertRaises(exc, setattr, sweden, 'overlord', 'Bears') - self.assertRaises(exc, setattr, sweden, 'name', 5) - self.assertRaises(exc, setattr, sweden, 'population', 'N/A') - - def test_no_mask_arbitrary_properties(self): - fixture_copy = copy.deepcopy(fixture) - fixture_copy['additionalProperties'] = {'type': 'string'} - Country = warlock.model_factory(fixture_copy) - - # We should still depend on the schema for validation - self.assertRaises(ValueError, Country, GDP=56956) - - # But arbitrary properties should be allowed if they check out - sweden = Country(overlord='Waldon') - sweden.abbreviation = 'SE' - exc = warlock.InvalidOperation - self.assertRaises(exc, setattr, sweden, 'abbreviation', 0) - - def test_items(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - self.assertEqual(set(list(six.iteritems(sweden))), - set([('name', 'Sweden'), ('population', 9379116)])) - self.assertEqual(set(sweden.items()), - set([('name', 'Sweden'), ('population', 9379116)])) - - def test_update(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - exc = warlock.InvalidOperation - self.assertRaises(exc, sweden.update, {'population': 'N/A'}) - self.assertRaises(exc, sweden.update, {'overloard': 'Bears'}) - - def test_naming(self): - Country = warlock.model_factory(fixture) - self.assertEqual('Country', Country.__name__) - - Country2 = warlock.model_factory(fixture, name='Country2') - self.assertEqual('Country2', Country2.__name__) - - nameless = warlock.model_factory(nameless_fixture) - self.assertEqual('Model', nameless.__name__) - - nameless2 = warlock.model_factory(nameless_fixture, name='Country3') - self.assertEqual('Country3', nameless2.__name__) - - def test_deepcopy(self): - """Make sure we aren't leaking references.""" - Mixmaster = warlock.model_factory(complex_fixture) - mike = Mixmaster(sub={'foo': 'mike'}) - - self.assertEquals('mike', mike.sub['foo']) - - mike_1 = mike.copy() - mike_1['sub']['foo'] = 'james' - self.assertEquals('mike', mike.sub['foo']) - - mike_2 = dict(six.iteritems(mike)) - mike_2['sub']['foo'] = 'james' - self.assertEquals('mike', mike.sub['foo']) - - mike_2 = dict(mike.items()) - mike_2['sub']['foo'] = 'james' - self.assertEquals('mike', mike.sub['foo']) - - mike_3_sub = list(six.itervalues(mike))[0] - mike_3_sub['foo'] = 'james' - self.assertEquals('mike', mike.sub['foo']) - - mike_3_sub = list(mike.values())[0] - mike_3_sub['foo'] = 'james' - self.assertEquals('mike', mike.sub['foo']) - - def test_forbidden_methods(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - exc = warlock.InvalidOperation - self.assertRaises(exc, sweden.clear) - self.assertRaises(exc, sweden.pop, 0) - self.assertRaises(exc, sweden.popitem) - - def test_dict_syntax(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - - sweden['name'] = 'Finland' - self.assertEqual('Finland', sweden['name']) - - del sweden['name'] - self.assertRaises(AttributeError, getattr, sweden, 'name') - - def test_attr_syntax(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - - sweden.name = 'Finland' - self.assertEqual('Finland', sweden.name) - - delattr(sweden, 'name') - self.assertRaises(AttributeError, getattr, sweden, 'name') - - def test_changes(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - self.assertEqual(sweden.changes, {}) - sweden['name'] = 'Finland' - self.assertEqual(sweden.changes, {'name': 'Finland'}) - sweden['name'] = 'Norway' - self.assertEqual(sweden.changes, {'name': 'Norway'}) - - def test_patch_no_changes(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - self.assertEqual(sweden.patch, '[]') - - def test_patch_alter_value(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - sweden['name'] = 'Finland' - self.assertEqual( - json.loads(sweden.patch), - json.loads( - '[{"path": "/name", "value": "Finland", "op": "replace"}]')) - - def test_patch_drop_attribute(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - del sweden['name'] - self.assertEqual( - json.loads(sweden.patch), - json.loads('[{"path": "/name", "op": "remove"}]')) - - def test_patch_reduce_operations(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - - sweden['name'] = 'Finland' - self.assertEqual( - json.loads(sweden.patch), - json.loads( - '[{"path": "/name", "value": "Finland", "op": "replace"}]')) - - sweden['name'] = 'Norway' - self.assertEqual( - json.loads(sweden.patch), - json.loads( - '[{"path": "/name", "value": "Norway", "op": "replace"}]')) - - def test_patch_multiple_operations(self): - Country = warlock.model_factory(fixture) - sweden = Country(name='Sweden', population=9379116) - - sweden['name'] = 'Finland' - sweden['population'] = 5387000 - - self.assertEqual(len(json.loads(sweden.patch)), 2) - - patches = json.loads( - '[{"path": "/name", "value": "Finland", "op": "replace"}, ' - '{"path": "/population", "value": 5387000, "op": "replace"}]') - - for patch in json.loads(sweden.patch): - self.assertTrue(patch in patches) - - def test_resolver(self): - from jsonschema import RefResolver - dirname = os.path.dirname(__file__) - schemas_path = 'file://' + os.path.join(dirname, 'schemas/') - resolver = RefResolver(schemas_path, None) - - country_schema_file = \ - open(os.path.join(dirname, 'schemas/') + 'country.json') - person_schema_file = \ - open(os.path.join(dirname, 'schemas/') + 'person.json') - - country_schema = json.load(country_schema_file) - person_schema = json.load(person_schema_file) - Country = warlock.model_factory(country_schema, resolver) - Person = warlock.model_factory(person_schema, resolver) - - england = Country( - name="England", - population=53865800, - overlord=Person( - title="Queen", - firstname="Elizabeth", - lastname="Windsor" - ) - ) - expected = { - 'name': 'England', - 'population': 53865800, - 'overlord': { - 'title': 'Queen', - 'lastname': 'Windsor', - 'firstname': 'Elizabeth' - } - } - self.assertEqual(england, expected) - - def test_recursive_models(self): - Parent = warlock.model_factory(parent_fixture) - Child = warlock.model_factory(child_fixture) - - mom = Parent(name='Abby', children=[]) - - teenager = Child(age=15, mother=mom) - toddler = Child(age=3, mother=mom) - - mom.children = [teenager, toddler] - - self.assertEqual(mom.children[0].age, 15) - self.assertEqual(mom.children[1].age, 3) Binary files old/warlock-1.3.0/warlock/__init__.pyc and new/warlock-1.3.3/warlock/__init__.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/warlock/core.py new/warlock-1.3.3/warlock/core.py --- old/warlock-1.3.0/warlock/core.py 2016-06-25 19:48:59.000000000 +0200 +++ new/warlock-1.3.3/warlock/core.py 2019-05-20 08:26:22.000000000 +0200 @@ -30,8 +30,8 @@ class Model(base_class): def __init__(self, *args, **kwargs): - self.__dict__['schema'] = schema - self.__dict__['resolver'] = resolver + self.__dict__["schema"] = schema + self.__dict__["resolver"] = resolver base_class.__init__(self, *args, **kwargs) if resolver is not None: @@ -39,6 +39,6 @@ if name is not None: Model.__name__ = name - elif 'name' in schema: - Model.__name__ = str(schema['name']) + elif "name" in schema: + Model.__name__ = str(schema["name"]) return Model Binary files old/warlock-1.3.0/warlock/core.pyc and new/warlock-1.3.3/warlock/core.pyc differ Binary files old/warlock-1.3.0/warlock/exceptions.pyc and new/warlock-1.3.3/warlock/exceptions.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/warlock/model.py new/warlock-1.3.3/warlock/model.py --- old/warlock-1.3.0/warlock/model.py 2016-06-25 20:08:28.000000000 +0200 +++ new/warlock-1.3.3/warlock/model.py 2019-05-20 08:26:22.000000000 +0200 @@ -25,7 +25,6 @@ class Model(dict): - def __init__(self, *args, **kwargs): # we overload setattr so set this manually d = dict(*args, **kwargs) @@ -37,8 +36,8 @@ else: dict.__init__(self, d) - self.__dict__['changes'] = {} - self.__dict__['__original__'] = copy.deepcopy(d) + self.__dict__["changes"] = {} + self.__dict__["__original__"] = copy.deepcopy(d) def __setitem__(self, key, value): mutation = dict(self.items()) @@ -46,13 +45,12 @@ try: self.validate(mutation) except exceptions.ValidationError as exc: - msg = ("Unable to set '%s' to %r. Reason: %s" - % (key, value, str(exc))) + msg = "Unable to set '%s' to %r. Reason: %s" % (key, value, str(exc)) raise exceptions.InvalidOperation(msg) dict.__setitem__(self, key, value) - self.__dict__['changes'][key] = value + self.__dict__["changes"][key] = value def __delitem__(self, key): mutation = dict(self.items()) @@ -60,8 +58,7 @@ try: self.validate(mutation) except exceptions.ValidationError as exc: - msg = ("Unable to delete attribute '%s'. Reason: %s" - % (key, str(exc))) + msg = "Unable to delete attribute '%s'. Reason: %s" % (key, str(exc)) raise exceptions.InvalidOperation(msg) dict.__delitem__(self, key) @@ -124,15 +121,15 @@ @property def patch(self): """Return a jsonpatch object representing the delta""" - original = self.__dict__['__original__'] + original = self.__dict__["__original__"] return jsonpatch.make_patch(original, dict(self)).to_string() @property def changes(self): """Dumber version of 'patch' method""" - deprecation_msg = 'Model.changes will be removed in warlock v2' + deprecation_msg = "Model.changes will be removed in warlock v2" warnings.warn(deprecation_msg, DeprecationWarning, stacklevel=2) - return copy.deepcopy(self.__dict__['changes']) + return copy.deepcopy(self.__dict__["changes"]) def validate(self, obj): """Apply a JSON schema to an object""" Binary files old/warlock-1.3.0/warlock/model.pyc and new/warlock-1.3.3/warlock/model.pyc differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/warlock.egg-info/PKG-INFO new/warlock-1.3.3/warlock.egg-info/PKG-INFO --- old/warlock-1.3.0/warlock.egg-info/PKG-INFO 2016-06-25 20:13:37.000000000 +0200 +++ new/warlock-1.3.3/warlock.egg-info/PKG-INFO 2019-05-20 12:10:52.000000000 +0200 @@ -1,10 +1,105 @@ -Metadata-Version: 1.0 +Metadata-Version: 2.1 Name: warlock -Version: 1.3.0 +Version: 1.3.3 Summary: Python object model built on JSON schema and JSON patch. Home-page: http://github.com/bcwaldon/warlock Author: Brian Waldon Author-email: [email protected] -License: UNKNOWN -Description: UNKNOWN +Maintainer: Jan Willhaus +Maintainer-email: [email protected] +License: Apache-2.0 +Description: # Warlock — self-validating Python objects using JSON schema + + [][warlock] + [][warlock] + [][pypistats] + + [][ci-builds] + [][coveralls] + + ## Installation + + Warlock is [available on PyPI][warlock]: + + ```shell + pip install warlock + ``` + + ## Usage + + 1) Create your schema + + ```python + >>> schema = { + 'name': 'Country', + 'properties': { + 'name': {'type': 'string'}, + 'abbreviation': {'type': 'string'}, + 'population': {'type': 'integer'}, + }, + 'additionalProperties': False, + } + ``` + + 2) Create a model + + ```python + >>> import warlock + >>> Country = warlock.model_factory(schema) + ``` + + 3) Create an object using your model + + ```python + >>> sweden = Country(name='Sweden', abbreviation='SE') + ``` + + 4) Let the object validate itself + + ```python + >>> sweden.name = 5 + Traceback (most recent call last): + File "<stdin>", line 1, in <module> + File "warlock/core.py", line 53, in __setattr__ + raise InvalidOperation(msg) + warlock.core.InvalidOperation: Unable to set 'name' to '5' + + >>> sweden.overlord = 'Bears' + Traceback (most recent call last): + File "<stdin>", line 1, in <module> + File "warlock/core.py", line 53, in __setattr__ + raise InvalidOperation(msg) + warlock.core.InvalidOperation: Unable to set 'overlord' to 'Bears' + ``` + + 5) Generate a [JSON Patch document](http://tools.ietf.org/html/draft-ietf-appsawg-json-patch) to track changes + + ```python + >>> sweden.population=9453000 + >>> sweden.patch + '[{"path": "/population", "value": 9453000, "op": "add"}]' + ``` + + [warlock]: https://pypi.org/project/warlock/ + [pip]: https://pip.pypa.io/en/stable/ + [ci-builds]: https://travis-ci.org/bcwaldon/warlock + [coveralls]: https://coveralls.io/github/bcwaldon/warlock?branch=master + [pypistats]: https://pypistats.org/packages/warlock + +Keywords: JSON schema,JSON patch,model validation Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: Operating System :: MacOS :: MacOS X +Classifier: Operating System :: Microsoft :: Windows +Classifier: Operating System :: POSIX +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Description-Content-Type: text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/warlock.egg-info/SOURCES.txt new/warlock-1.3.3/warlock.egg-info/SOURCES.txt --- old/warlock-1.3.0/warlock.egg-info/SOURCES.txt 2016-06-25 20:13:37.000000000 +0200 +++ new/warlock-1.3.3/warlock.egg-info/SOURCES.txt 2019-05-20 12:10:52.000000000 +0200 @@ -1,14 +1,17 @@ -LICENSE.txt +LICENSE MANIFEST.in README.md requirements.txt setup.cfg setup.py -test/test_core.py warlock/__init__.py +warlock/__init__.pyc warlock/core.py +warlock/core.pyc warlock/exceptions.py +warlock/exceptions.pyc warlock/model.py +warlock/model.pyc warlock.egg-info/PKG-INFO warlock.egg-info/SOURCES.txt warlock.egg-info/dependency_links.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/warlock-1.3.0/warlock.egg-info/requires.txt new/warlock-1.3.3/warlock.egg-info/requires.txt --- old/warlock-1.3.0/warlock.egg-info/requires.txt 2016-06-25 20:13:37.000000000 +0200 +++ new/warlock-1.3.3/warlock.egg-info/requires.txt 2019-05-20 12:10:52.000000000 +0200 @@ -1,3 +1,3 @@ -jsonschema>=0.7,<3 -jsonpatch>=0.10,<2 +jsonschema<4,>=0.7 +jsonpatch<2,>=0.10 six
