diff options
Diffstat (limited to 'python-drf-aggregates.spec')
-rw-r--r-- | python-drf-aggregates.spec | 342 |
1 files changed, 342 insertions, 0 deletions
diff --git a/python-drf-aggregates.spec b/python-drf-aggregates.spec new file mode 100644 index 0000000..6e6aed7 --- /dev/null +++ b/python-drf-aggregates.spec @@ -0,0 +1,342 @@ +%global _empty_manifest_terminate_build 0 +Name: python-drf-aggregates +Version: 0.0.13 +Release: 1 +Summary: A Python package that exposes the Django model queryset aggregate functions to the DRF API. +License: BSD +URL: https://github.com/uptick/django-rest-framework-aggregates +Source0: https://mirrors.aliyun.com/pypi/web/packages/cd/56/05b2fac5fe4d24b579bc97624eac7486eaf3c269924ec196a74287b16358/drf-aggregates-0.0.13.tar.gz +BuildArch: noarch + + +%description +# django-rest-framework-aggregates +[](https://badge.fury.io/py/drf-aggregates) [](https://travis-ci.org/uptick/django-rest-framework-aggregates) + +Exposes aggregation features of the Django model queryset to the DRF API. + +## Requirements + + - Python 3.6+ + - Django 1.11+ + - Django Rest Framework 3.5.3+ + +## Overview + +This renderer overwrites default behaviour for calls made to api v2 .agg endpoints. + +Supports `GET` calls to list endpoints in the format: + + endpoint.agg/?aggregate[Count]=(field to count) + endpoint.agg/?aggregate[Sum]=(field to sum) + endpoint.agg/?aggregate[custom_function]=arguments + endpoint.agg/?group_by[field to group by]&aggregate[Count]=id + endpoint.agg/?group_by[field to group by]&aggregate[Count]=id&aggregate[Sum]=(field to sum) + +Supports date part extraction for aggregation: + + endpoint.agg/?group_by[created__year]&aggregate[Count]=id + +Supports choices to representation extract: + + endpoint.agg/?group_by[choiceField]&aggregate[Count]=id + +Support aggregating over multiple fields, either of +``` +endpoint.agg/?aggregate[Sum]=id&aggregate[Sum]=number +endpoint.agg/?aggregate[Sum]=id,number +``` +## Custom Aggregations + +The default aggregate functions supported are defined in `django.db.models.aggregates`. + +Custom aggregate functions have been defined in `drf_aggregates.aggregates` + +User defined aggregation are passed to a custom queryset manager `calculate_aggregates` as kwargs if defined. + +Custom aggregate functions set on the queryset should return a dictionary of field names to aggregate functions, which will then be processed with the other aggregates. + +## Examples + +Example setup can be found in the [example/](/example/) folder. + +To enable the renderer, update your Django settings file: + + ```python + REST_FRAMEWORK = { + 'DEFAULT_RENDERER_CLASSES': ( + 'drf_aggregates.renderers.AggregateRenderer', + ... + ), + ... + } + ``` + +In the [Cars ViewSet](/example/api/views.py) we are outputting the result to json: + + ```python + + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + data = request.accepted_renderer.render({'queryset': queryset, 'request': request}) + return Response(data, content_type=f'application/json') + ``` + + +## Tests + +In order to run tests locally: + +1. Install development requirements: + + `pip3 install -r requirements-dev.txt` + +2. Update your environment to point to test Django settings file: + + `export DJANGO_SETTINGS_MODULE=example.settings.test` + +3. Run tests: + + `py.test` + + + + +%package -n python3-drf-aggregates +Summary: A Python package that exposes the Django model queryset aggregate functions to the DRF API. +Provides: python-drf-aggregates +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-drf-aggregates +# django-rest-framework-aggregates +[](https://badge.fury.io/py/drf-aggregates) [](https://travis-ci.org/uptick/django-rest-framework-aggregates) + +Exposes aggregation features of the Django model queryset to the DRF API. + +## Requirements + + - Python 3.6+ + - Django 1.11+ + - Django Rest Framework 3.5.3+ + +## Overview + +This renderer overwrites default behaviour for calls made to api v2 .agg endpoints. + +Supports `GET` calls to list endpoints in the format: + + endpoint.agg/?aggregate[Count]=(field to count) + endpoint.agg/?aggregate[Sum]=(field to sum) + endpoint.agg/?aggregate[custom_function]=arguments + endpoint.agg/?group_by[field to group by]&aggregate[Count]=id + endpoint.agg/?group_by[field to group by]&aggregate[Count]=id&aggregate[Sum]=(field to sum) + +Supports date part extraction for aggregation: + + endpoint.agg/?group_by[created__year]&aggregate[Count]=id + +Supports choices to representation extract: + + endpoint.agg/?group_by[choiceField]&aggregate[Count]=id + +Support aggregating over multiple fields, either of +``` +endpoint.agg/?aggregate[Sum]=id&aggregate[Sum]=number +endpoint.agg/?aggregate[Sum]=id,number +``` +## Custom Aggregations + +The default aggregate functions supported are defined in `django.db.models.aggregates`. + +Custom aggregate functions have been defined in `drf_aggregates.aggregates` + +User defined aggregation are passed to a custom queryset manager `calculate_aggregates` as kwargs if defined. + +Custom aggregate functions set on the queryset should return a dictionary of field names to aggregate functions, which will then be processed with the other aggregates. + +## Examples + +Example setup can be found in the [example/](/example/) folder. + +To enable the renderer, update your Django settings file: + + ```python + REST_FRAMEWORK = { + 'DEFAULT_RENDERER_CLASSES': ( + 'drf_aggregates.renderers.AggregateRenderer', + ... + ), + ... + } + ``` + +In the [Cars ViewSet](/example/api/views.py) we are outputting the result to json: + + ```python + + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + data = request.accepted_renderer.render({'queryset': queryset, 'request': request}) + return Response(data, content_type=f'application/json') + ``` + + +## Tests + +In order to run tests locally: + +1. Install development requirements: + + `pip3 install -r requirements-dev.txt` + +2. Update your environment to point to test Django settings file: + + `export DJANGO_SETTINGS_MODULE=example.settings.test` + +3. Run tests: + + `py.test` + + + + +%package help +Summary: Development documents and examples for drf-aggregates +Provides: python3-drf-aggregates-doc +%description help +# django-rest-framework-aggregates +[](https://badge.fury.io/py/drf-aggregates) [](https://travis-ci.org/uptick/django-rest-framework-aggregates) + +Exposes aggregation features of the Django model queryset to the DRF API. + +## Requirements + + - Python 3.6+ + - Django 1.11+ + - Django Rest Framework 3.5.3+ + +## Overview + +This renderer overwrites default behaviour for calls made to api v2 .agg endpoints. + +Supports `GET` calls to list endpoints in the format: + + endpoint.agg/?aggregate[Count]=(field to count) + endpoint.agg/?aggregate[Sum]=(field to sum) + endpoint.agg/?aggregate[custom_function]=arguments + endpoint.agg/?group_by[field to group by]&aggregate[Count]=id + endpoint.agg/?group_by[field to group by]&aggregate[Count]=id&aggregate[Sum]=(field to sum) + +Supports date part extraction for aggregation: + + endpoint.agg/?group_by[created__year]&aggregate[Count]=id + +Supports choices to representation extract: + + endpoint.agg/?group_by[choiceField]&aggregate[Count]=id + +Support aggregating over multiple fields, either of +``` +endpoint.agg/?aggregate[Sum]=id&aggregate[Sum]=number +endpoint.agg/?aggregate[Sum]=id,number +``` +## Custom Aggregations + +The default aggregate functions supported are defined in `django.db.models.aggregates`. + +Custom aggregate functions have been defined in `drf_aggregates.aggregates` + +User defined aggregation are passed to a custom queryset manager `calculate_aggregates` as kwargs if defined. + +Custom aggregate functions set on the queryset should return a dictionary of field names to aggregate functions, which will then be processed with the other aggregates. + +## Examples + +Example setup can be found in the [example/](/example/) folder. + +To enable the renderer, update your Django settings file: + + ```python + REST_FRAMEWORK = { + 'DEFAULT_RENDERER_CLASSES': ( + 'drf_aggregates.renderers.AggregateRenderer', + ... + ), + ... + } + ``` + +In the [Cars ViewSet](/example/api/views.py) we are outputting the result to json: + + ```python + + def list(self, request, *args, **kwargs): + queryset = self.filter_queryset(self.get_queryset()) + data = request.accepted_renderer.render({'queryset': queryset, 'request': request}) + return Response(data, content_type=f'application/json') + ``` + + +## Tests + +In order to run tests locally: + +1. Install development requirements: + + `pip3 install -r requirements-dev.txt` + +2. Update your environment to point to test Django settings file: + + `export DJANGO_SETTINGS_MODULE=example.settings.test` + +3. Run tests: + + `py.test` + + + + +%prep +%autosetup -n drf-aggregates-0.0.13 + +%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-drf-aggregates -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Jun 20 2023 Python_Bot <Python_Bot@openeuler.org> - 0.0.13-1 +- Package Spec generated |