From edbbf7e5f807e956fb79d24629c5229db05514dc Mon Sep 17 00:00:00 2001 From: zhangy1317 Date: Tue, 15 Dec 2020 16:38:59 +0800 Subject: [PATCH] add spec and source file --- python-warlock.spec | 224 +++++++++++++++++++++++++++++++++++++++++++ warlock-1.3.3.tar.gz | Bin 0 -> 11602 bytes 2 files changed, 224 insertions(+) create mode 100644 python-warlock.spec create mode 100644 warlock-1.3.3.tar.gz diff --git a/python-warlock.spec b/python-warlock.spec new file mode 100644 index 0000000..7f8d0ff --- /dev/null +++ b/python-warlock.spec @@ -0,0 +1,224 @@ +%global _empty_manifest_terminate_build 0 +Name: python-warlock +Version: 1.3.3 +Release: 1 +Summary: Python object model built on JSON schema and JSON patch. +License: Apache-2.0 +URL: http://github.com/bcwaldon/warlock +Source0: https://files.pythonhosted.org/packages/c2/36/178b26a338cd6d30523246da4721b1114306f588deb813f3f503052825ee/warlock-1.3.3.tar.gz +BuildArch: noarch + + +%description +Warlock — self-validating Python objects using JSON schema + + +%package -n python3-warlock +Summary: Python object model built on JSON schema and JSON patch. +Provides: python-warlock +BuildRequires: python3-devel +BuildRequires: python3-setuptools +%description -n python3-warlock +# Warlock — self-validating Python objects using JSON schema + +[![PyPI](https://img.shields.io/pypi/v/warlock.svg)][warlock] +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/warlock.svg)][warlock] +[![PyPI - Downloads](https://img.shields.io/pypi/dw/warlock.svg)][pypistats] + +[![Build Status](https://travis-ci.org/bcwaldon/warlock.svg?branch=master)][ci-builds] +[![Coverage Status](https://coveralls.io/repos/github/bcwaldon/warlock/badge.svg?branch=master)][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 "", line 1, in + 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 "", line 1, in + 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 + +%package help +Summary: Development documents and examples for warlock +Provides: python3-warlock-doc +%description help +# Warlock — self-validating Python objects using JSON schema + +[![PyPI](https://img.shields.io/pypi/v/warlock.svg)][warlock] +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/warlock.svg)][warlock] +[![PyPI - Downloads](https://img.shields.io/pypi/dw/warlock.svg)][pypistats] + +[![Build Status](https://travis-ci.org/bcwaldon/warlock.svg?branch=master)][ci-builds] +[![Coverage Status](https://coveralls.io/repos/github/bcwaldon/warlock/badge.svg?branch=master)][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 "", line 1, in + 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 "", line 1, in + 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 + +%prep +%autosetup -n warlock-1.3.3 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-warlock -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon Nov 23 2020 Python_Bot +- Package Spec generated diff --git a/warlock-1.3.3.tar.gz b/warlock-1.3.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d0adbccc2a87e4f5a825c975cd69a2d97320069b GIT binary patch literal 11602 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