diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-tastytopping.spec | 351 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 353 insertions, 0 deletions
@@ -0,0 +1 @@ +/TastyTopping-1.2.5.tar.gz diff --git a/python-tastytopping.spec b/python-tastytopping.spec new file mode 100644 index 0000000..8b5a30d --- /dev/null +++ b/python-tastytopping.spec @@ -0,0 +1,351 @@ +%global _empty_manifest_terminate_build 0 +Name: python-TastyTopping +Version: 1.2.5 +Release: 1 +Summary: An ORM for tastypie's API on the client-side. +License: LGPLv3 +URL: https://github.com/cboelsen/tastytopping +Source0: https://mirrors.aliyun.com/pypi/web/packages/d7/64/afbb65138a24ec0ab3defebb7bd3f1eb9bf7f2b6cf08282f15990d632a55/TastyTopping-1.2.5.tar.gz +BuildArch: noarch + + +%description +Designed to take the heavy lifting out of working with django-tastypie APIs on +the client side. +Features +^^^^^^^^ +- Django model-like ORM API allowing you to GET, POST, PUT, PATCH, and DELETE:: + factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') + current_resource = factory.resource.get(field='name') # GET + new_resource = factory.resource(field='new_name').save() # POST + new_resource.field = 'different_name' + new_resource.save() # PUT / PATCH + current_resource.delete() # DELETE +- Easily work with any related resources:: + new_resource.children = [ + factory.resource(field='new_name1').save(), + factory.resource(field='new_name2').save(), + ] +- QuerySets:: + queryset1 = factory.resource.filter(field2__gt=20) + queryset2 = queryset1.order_by('field2') + # Evaluation happens here: + resources = queryset2[5:-8] +- Simple way to set and update authentication per resource:: + factory.resource.auth = HTTPApiKeyAuth('username', 'key12345') +- Access nested resources using simple methods:: + new_resource.nested.nested_resource('arg1', arg2=3) +- Basic field validation before connecting to the API. +- Bulk create / update / delete to minimise API access:: + factory.resource.bulk( + create=[{field='name1'}, {field='name2'}], + update=[current_resource, new_resource], + delete=[new_resource], + ) +Find more information on these features at `read the docs! +<http://tastytopping.readthedocs.org/en/latest/>`_ +Requirements +^^^^^^^^^^^^ +The following needs to be installed locally to run TastyTopping: +- Python 2.7+ or Python 3.3+ +- `requests <http://requests.readthedocs.org/en/latest/>`_ >= 1.2.3 +Tested with / against: +- `django <https://docs.djangoproject.com/en/1.6/>`_ >= 1.5.0 +- `django-tastypie <http://django-tastypie.readthedocs.org/en/latest/>`_ >= 0.9.14 +- `requests <http://requests.readthedocs.org/en/latest/>`_ >= 1.2.3 +(see the `tox.ini +<https://github.com/cboelsen/tastytopping/blob/master/tox.ini>`_ file for +more information). +Example +^^^^^^^ +A basic example of a simple workflow, using the following API on the server +side: + # myapp/models.py + # =============== + from django.db import models + class Example(models.Model): + path = models.CharField(max_length=255, unique=True) + rating = models.IntegerField(default=50) + date = models.DateTimeField('date', null=True) + # myapp/api.py + # ============ + from .models import Example + class ExampleResource(ModelResource): + class Meta: + queryset = Example.objects.all() + resource_name = 'example' + authorization = Authorization() + filtering = {'path': ALL, 'rating': ALL} + ordering = ['rating'] +Using TastyTopping on the client side would look like this: + from datetime import datetime + from tastytopping import ResourceFactory + factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') + ex1 = factory.example(path='any text', rating=80).save() + ex1.date = datetime.now() + ex1_copy = factory.example.get(rating=80) + ex1.delete() +Find more examples at `read the docs! +<http://tastytopping.readthedocs.org/en/latest/>`_ +Justification +^^^^^^^^^^^^^ +Why another one? There are some other packages around that do something +similar, but none are the complete package: +- `ORM <http://en.wikipedia.org/wiki/Object-relational_mapping>`_. A lot of + other packages use a C-style API, which involves passing a dict with your + data to their functions. TastyTopping wraps it all up in an ORM-style object, + which is more OO, more elegant, and more pythonic. +- Python3 support. +- Support for authentication. +- Support for nested resources. +- QuerySets! +- A thorough set of `unit tests + <https://github.com/cboelsen/tastytopping/blob/master/tests/tests.py>`_. +- Development has stagnated (none of them have released in close to a year, + whereas tastypie has been releasing thick and fast). +- Creating this was FUN! + +%package -n python3-TastyTopping +Summary: An ORM for tastypie's API on the client-side. +Provides: python-TastyTopping +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-TastyTopping +Designed to take the heavy lifting out of working with django-tastypie APIs on +the client side. +Features +^^^^^^^^ +- Django model-like ORM API allowing you to GET, POST, PUT, PATCH, and DELETE:: + factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') + current_resource = factory.resource.get(field='name') # GET + new_resource = factory.resource(field='new_name').save() # POST + new_resource.field = 'different_name' + new_resource.save() # PUT / PATCH + current_resource.delete() # DELETE +- Easily work with any related resources:: + new_resource.children = [ + factory.resource(field='new_name1').save(), + factory.resource(field='new_name2').save(), + ] +- QuerySets:: + queryset1 = factory.resource.filter(field2__gt=20) + queryset2 = queryset1.order_by('field2') + # Evaluation happens here: + resources = queryset2[5:-8] +- Simple way to set and update authentication per resource:: + factory.resource.auth = HTTPApiKeyAuth('username', 'key12345') +- Access nested resources using simple methods:: + new_resource.nested.nested_resource('arg1', arg2=3) +- Basic field validation before connecting to the API. +- Bulk create / update / delete to minimise API access:: + factory.resource.bulk( + create=[{field='name1'}, {field='name2'}], + update=[current_resource, new_resource], + delete=[new_resource], + ) +Find more information on these features at `read the docs! +<http://tastytopping.readthedocs.org/en/latest/>`_ +Requirements +^^^^^^^^^^^^ +The following needs to be installed locally to run TastyTopping: +- Python 2.7+ or Python 3.3+ +- `requests <http://requests.readthedocs.org/en/latest/>`_ >= 1.2.3 +Tested with / against: +- `django <https://docs.djangoproject.com/en/1.6/>`_ >= 1.5.0 +- `django-tastypie <http://django-tastypie.readthedocs.org/en/latest/>`_ >= 0.9.14 +- `requests <http://requests.readthedocs.org/en/latest/>`_ >= 1.2.3 +(see the `tox.ini +<https://github.com/cboelsen/tastytopping/blob/master/tox.ini>`_ file for +more information). +Example +^^^^^^^ +A basic example of a simple workflow, using the following API on the server +side: + # myapp/models.py + # =============== + from django.db import models + class Example(models.Model): + path = models.CharField(max_length=255, unique=True) + rating = models.IntegerField(default=50) + date = models.DateTimeField('date', null=True) + # myapp/api.py + # ============ + from .models import Example + class ExampleResource(ModelResource): + class Meta: + queryset = Example.objects.all() + resource_name = 'example' + authorization = Authorization() + filtering = {'path': ALL, 'rating': ALL} + ordering = ['rating'] +Using TastyTopping on the client side would look like this: + from datetime import datetime + from tastytopping import ResourceFactory + factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') + ex1 = factory.example(path='any text', rating=80).save() + ex1.date = datetime.now() + ex1_copy = factory.example.get(rating=80) + ex1.delete() +Find more examples at `read the docs! +<http://tastytopping.readthedocs.org/en/latest/>`_ +Justification +^^^^^^^^^^^^^ +Why another one? There are some other packages around that do something +similar, but none are the complete package: +- `ORM <http://en.wikipedia.org/wiki/Object-relational_mapping>`_. A lot of + other packages use a C-style API, which involves passing a dict with your + data to their functions. TastyTopping wraps it all up in an ORM-style object, + which is more OO, more elegant, and more pythonic. +- Python3 support. +- Support for authentication. +- Support for nested resources. +- QuerySets! +- A thorough set of `unit tests + <https://github.com/cboelsen/tastytopping/blob/master/tests/tests.py>`_. +- Development has stagnated (none of them have released in close to a year, + whereas tastypie has been releasing thick and fast). +- Creating this was FUN! + +%package help +Summary: Development documents and examples for TastyTopping +Provides: python3-TastyTopping-doc +%description help +Designed to take the heavy lifting out of working with django-tastypie APIs on +the client side. +Features +^^^^^^^^ +- Django model-like ORM API allowing you to GET, POST, PUT, PATCH, and DELETE:: + factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') + current_resource = factory.resource.get(field='name') # GET + new_resource = factory.resource(field='new_name').save() # POST + new_resource.field = 'different_name' + new_resource.save() # PUT / PATCH + current_resource.delete() # DELETE +- Easily work with any related resources:: + new_resource.children = [ + factory.resource(field='new_name1').save(), + factory.resource(field='new_name2').save(), + ] +- QuerySets:: + queryset1 = factory.resource.filter(field2__gt=20) + queryset2 = queryset1.order_by('field2') + # Evaluation happens here: + resources = queryset2[5:-8] +- Simple way to set and update authentication per resource:: + factory.resource.auth = HTTPApiKeyAuth('username', 'key12345') +- Access nested resources using simple methods:: + new_resource.nested.nested_resource('arg1', arg2=3) +- Basic field validation before connecting to the API. +- Bulk create / update / delete to minimise API access:: + factory.resource.bulk( + create=[{field='name1'}, {field='name2'}], + update=[current_resource, new_resource], + delete=[new_resource], + ) +Find more information on these features at `read the docs! +<http://tastytopping.readthedocs.org/en/latest/>`_ +Requirements +^^^^^^^^^^^^ +The following needs to be installed locally to run TastyTopping: +- Python 2.7+ or Python 3.3+ +- `requests <http://requests.readthedocs.org/en/latest/>`_ >= 1.2.3 +Tested with / against: +- `django <https://docs.djangoproject.com/en/1.6/>`_ >= 1.5.0 +- `django-tastypie <http://django-tastypie.readthedocs.org/en/latest/>`_ >= 0.9.14 +- `requests <http://requests.readthedocs.org/en/latest/>`_ >= 1.2.3 +(see the `tox.ini +<https://github.com/cboelsen/tastytopping/blob/master/tox.ini>`_ file for +more information). +Example +^^^^^^^ +A basic example of a simple workflow, using the following API on the server +side: + # myapp/models.py + # =============== + from django.db import models + class Example(models.Model): + path = models.CharField(max_length=255, unique=True) + rating = models.IntegerField(default=50) + date = models.DateTimeField('date', null=True) + # myapp/api.py + # ============ + from .models import Example + class ExampleResource(ModelResource): + class Meta: + queryset = Example.objects.all() + resource_name = 'example' + authorization = Authorization() + filtering = {'path': ALL, 'rating': ALL} + ordering = ['rating'] +Using TastyTopping on the client side would look like this: + from datetime import datetime + from tastytopping import ResourceFactory + factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') + ex1 = factory.example(path='any text', rating=80).save() + ex1.date = datetime.now() + ex1_copy = factory.example.get(rating=80) + ex1.delete() +Find more examples at `read the docs! +<http://tastytopping.readthedocs.org/en/latest/>`_ +Justification +^^^^^^^^^^^^^ +Why another one? There are some other packages around that do something +similar, but none are the complete package: +- `ORM <http://en.wikipedia.org/wiki/Object-relational_mapping>`_. A lot of + other packages use a C-style API, which involves passing a dict with your + data to their functions. TastyTopping wraps it all up in an ORM-style object, + which is more OO, more elegant, and more pythonic. +- Python3 support. +- Support for authentication. +- Support for nested resources. +- QuerySets! +- A thorough set of `unit tests + <https://github.com/cboelsen/tastytopping/blob/master/tests/tests.py>`_. +- Development has stagnated (none of them have released in close to a year, + whereas tastypie has been releasing thick and fast). +- Creating this was FUN! + +%prep +%autosetup -n TastyTopping-1.2.5 + +%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-TastyTopping -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 1.2.5-1 +- Package Spec generated @@ -0,0 +1 @@ +855d9a35b43fac63de3f766e5d9419dc TastyTopping-1.2.5.tar.gz |