{ "info": { "author": "Fiona Lawrence, Jonathan Loo", "author_email": "support@uptickhq.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Topic :: Office/Business" ], "description": "# django-rest-framework-aggregates\n[![PyPI version](https://badge.fury.io/py/drf-aggregates.svg)](https://badge.fury.io/py/drf-aggregates) [![Build Status](https://travis-ci.org/uptick/django-rest-framework-aggregates.svg?branch=master)](https://travis-ci.org/uptick/django-rest-framework-aggregates)\n\nExposes aggregation features of the Django model queryset to the DRF API.\n\n## Requirements\n\n - Python 3.6+\n - Django 1.11+\n - Django Rest Framework 3.5.3+\n\n## Overview\n\nThis renderer overwrites default behaviour for calls made to api v2 .agg endpoints.\n\nSupports `GET` calls to list endpoints in the format:\n\n endpoint.agg/?aggregate[Count]=(field to count)\n endpoint.agg/?aggregate[Sum]=(field to sum)\n endpoint.agg/?aggregate[custom_function]=arguments\n endpoint.agg/?group_by[field to group by]&aggregate[Count]=id\n endpoint.agg/?group_by[field to group by]&aggregate[Count]=id&aggregate[Sum]=(field to sum)\n\nSupports date part extraction for aggregation:\n\n endpoint.agg/?group_by[created__year]&aggregate[Count]=id\n\nSupports choices to representation extract:\n\n endpoint.agg/?group_by[choiceField]&aggregate[Count]=id\n\n## Custom Aggregations\n\nThe default aggregate functions supported are defined in `django.db.models.aggregates`.\n\nCustom aggregate functions have been defined in `drf_aggregates.aggregates`\n\nUser defined aggregation are passed to a custom queryset manager `calculate_aggregates` as kwargs if defined.\n\nCustom 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.\n\n## Examples\n\nExample setup can be found in the [example/](/example/) folder.\n\nTo enable the renderer, update your Django settings file:\n\n ```python\n REST_FRAMEWORK = {\n 'DEFAULT_RENDERER_CLASSES': (\n 'drf_aggregates.renderers.AggregateRenderer',\n ...\n ),\n ...\n }\n ```\n\nIn the [Cars ViewSet](/example/api/views.py) we are outputting the result to json:\n\n ```python\n\n def list(self, request, *args, **kwargs):\n queryset = self.filter_queryset(self.get_queryset())\n data = request.accepted_renderer.render({'queryset': queryset, 'request': request})\n return Response(data, content_type=f'application/json')\n ```\n\n\n## Tests\n\nIn order to run tests locally:\n\n1. Install development requirements:\n\n `pip3 install -r requirements-dev.txt`\n\n2. Update your environment to point to test Django settings file:\n\n `export DJANGO_SETTINGS_MODULE=example.settings.test`\n\n3. Run tests:\n\n `py.test`\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/uptick/django-rest-framework-aggregates", "keywords": "drf,django-rest-framework,aggregates", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "drf-aggregates", "package_url": "https://pypi.org/project/drf-aggregates/", "platform": "", "project_url": "https://pypi.org/project/drf-aggregates/", "project_urls": { "Homepage": "https://github.com/uptick/django-rest-framework-aggregates" }, "release_url": "https://pypi.org/project/drf-aggregates/0.0.12/", "requires_dist": null, "requires_python": "", "summary": "A Python package that exposes the Django model queryset aggregate functions to the DRF API.", "version": "0.0.12" }, "last_serial": 5617521, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "8e8e529e96d6dc371bfedebef9d159f5", "sha256": "586a86dccba4cad1ec332d881d74aa0efea183530d628f8112fb12370078aea3" }, "downloads": -1, "filename": "drf-aggregates-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8e8e529e96d6dc371bfedebef9d159f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3571, "upload_time": "2017-12-14T01:21:54", "url": "https://files.pythonhosted.org/packages/bd/c7/2417d1c29621f8c4236734b0e0e90bd345e0df906cecc8849b4a51e86120/drf-aggregates-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "3c8fbf62a21979133dc51676422362cb", "sha256": "b3cd3773f2c67deb2e5dfab4a34b81231964fbfaf5e9dd3e251e3ff54903f520" }, "downloads": -1, "filename": "drf-aggregates-0.0.10.tar.gz", "has_sig": false, "md5_digest": "3c8fbf62a21979133dc51676422362cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5365, "upload_time": "2018-07-13T01:49:28", "url": "https://files.pythonhosted.org/packages/44/dc/67da2098003c6a5f8a2ce5c8df5d4b2ed9c5e533a0161641aa955351249a/drf-aggregates-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "a8f03c7bb824423db9d8bcf59c3b0f41", "sha256": "69810d844d0a909c0637e3abdff4b04a6a4b1f7ef5379446ce5652b401969a54" }, "downloads": -1, "filename": "drf-aggregates-0.0.11.tar.gz", "has_sig": false, "md5_digest": "a8f03c7bb824423db9d8bcf59c3b0f41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5389, "upload_time": "2019-04-16T04:03:56", "url": "https://files.pythonhosted.org/packages/88/20/9e14e3478328a69a122b09cf923f949a8a56203d27f28119ae5ffee1a734/drf-aggregates-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "46c9c7995d69424774b157a8b897e21d", "sha256": "c8a3da60bf4c7c390dfafddc770272ad28d3f9f9019d2cc35e23939af930f63c" }, "downloads": -1, "filename": "drf_aggregates-0.0.12-py2-none-any.whl", "has_sig": false, "md5_digest": "46c9c7995d69424774b157a8b897e21d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5944, "upload_time": "2019-08-01T07:50:35", "url": "https://files.pythonhosted.org/packages/60/ac/0613f40af4b69c2f181b46bc7c6a06ff44f974351d0fe8c43a326416c968/drf_aggregates-0.0.12-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6fc86706ce55eb2fa27b7ae014e96136", "sha256": "1a3be72caaee7b38764a69e982926d3fede3ec217c0500909e1d42c70b347672" }, "downloads": -1, "filename": "drf_aggregates-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "6fc86706ce55eb2fa27b7ae014e96136", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5945, "upload_time": "2019-08-01T08:34:18", "url": "https://files.pythonhosted.org/packages/49/26/598863043a9ca25b6fca49c7637aca3fed4abb54e458fc15b6800ef9690f/drf_aggregates-0.0.12-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "5bca1365f96f98928d9fd391a7d07473", "sha256": "5ac57cfe1b83b3c124f6c8f542200e2d039e35a32ff5cd578cf16b74396ae04d" }, "downloads": -1, "filename": "drf-aggregates-0.0.2.tar.gz", "has_sig": false, "md5_digest": "5bca1365f96f98928d9fd391a7d07473", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3483, "upload_time": "2017-12-14T01:32:36", "url": "https://files.pythonhosted.org/packages/8c/4e/01dc8665cc56d80a88ce4142dfbf92447d6c82cb0917cf6fe28d5c1c96dc/drf-aggregates-0.0.2.tar.gz" } ], "0.0.2a0": [ { "comment_text": "", "digests": { "md5": "0cbe9c54b80ef7aaf477b92b258dadd6", "sha256": "5e2356fac9d224d0ecbc58f9aea685da883e411295969b77733488f58d554ea1" }, "downloads": -1, "filename": "drf-aggregates-0.0.2a0.tar.gz", "has_sig": false, "md5_digest": "0cbe9c54b80ef7aaf477b92b258dadd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3983, "upload_time": "2017-12-14T05:45:08", "url": "https://files.pythonhosted.org/packages/9e/f7/c68f72af7d7eae551984027057174401cc61df0a7228bb2daa05bdced9b7/drf-aggregates-0.0.2a0.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "3047f448005873d005ea5cd4e184117c", "sha256": "2d25c61bd7056699f4cc7c9618b303c2a3069b5364084cfc3dcda4276bbec75b" }, "downloads": -1, "filename": "drf-aggregates-0.0.3.tar.gz", "has_sig": false, "md5_digest": "3047f448005873d005ea5cd4e184117c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3973, "upload_time": "2017-12-14T05:43:40", "url": "https://files.pythonhosted.org/packages/98/be/49a41b802415e10de1bec36c446ba1b586b1cae393ea82ea7c337a92f840/drf-aggregates-0.0.3.tar.gz" } ], "0.0.3a0": [ { "comment_text": "", "digests": { "md5": "1cd0b9850ac731c2d8da41ff871e2a00", "sha256": "18b9c6be2887cb371876062e3b6db19d4c2b2239db9d44cf48e70d2db2cf027c" }, "downloads": -1, "filename": "drf-aggregates-0.0.3a0.tar.gz", "has_sig": false, "md5_digest": "1cd0b9850ac731c2d8da41ff871e2a00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3989, "upload_time": "2017-12-14T05:45:30", "url": "https://files.pythonhosted.org/packages/d3/5a/9e4de44f5662ad68a7d590ce5113566f7d091fb162a71c2db31f739013a9/drf-aggregates-0.0.3a0.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "1564040b12c10e75be4435a4c424d26b", "sha256": "cc9f68310bf61e9cb06eefe5feb6e3fea56608d9c75e956a13c5529fa515dcb6" }, "downloads": -1, "filename": "drf-aggregates-0.0.5.tar.gz", "has_sig": false, "md5_digest": "1564040b12c10e75be4435a4c424d26b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4039, "upload_time": "2017-12-14T06:16:19", "url": "https://files.pythonhosted.org/packages/2b/f6/3b4663b0c77667dfd7489f47740d068c3466bb53d67b1fbce75739801df2/drf-aggregates-0.0.5.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "849e8d8dd78c8da01453ee0c66dfb560", "sha256": "ae2fa9ec281cd3ba2b9783fb8abdd1d034e5959be380f90a1b7fe6a8972b6567" }, "downloads": -1, "filename": "drf-aggregates-0.0.7.tar.gz", "has_sig": false, "md5_digest": "849e8d8dd78c8da01453ee0c66dfb560", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4074, "upload_time": "2017-12-19T03:17:30", "url": "https://files.pythonhosted.org/packages/a4/a3/622cc44e7e3c8511fb81c991634055c41246245939e176db81e5702296a2/drf-aggregates-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "2d311f121b0f9b99064268d93d02f206", "sha256": "eb1e5b26a8c6b0f44203f3860f4b175146135b98dae7b87688ae21f461784251" }, "downloads": -1, "filename": "drf-aggregates-0.0.8.tar.gz", "has_sig": false, "md5_digest": "2d311f121b0f9b99064268d93d02f206", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5018, "upload_time": "2018-01-09T06:31:08", "url": "https://files.pythonhosted.org/packages/6c/eb/07ae3aab7c1b8641c0acadb218e46411a01eaf5bb65d7e5a4192b8bfc320/drf-aggregates-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "13115a08785aff9e28674e282875ed5d", "sha256": "09868aaf6070db90de52665e280404bd5c7d4fb583632f4efa7a97e706826fe8" }, "downloads": -1, "filename": "drf-aggregates-0.0.9.tar.gz", "has_sig": false, "md5_digest": "13115a08785aff9e28674e282875ed5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5316, "upload_time": "2018-06-14T01:37:04", "url": "https://files.pythonhosted.org/packages/d5/e4/afdabc54e6ee635d2ebde5d6a7aa625d075d86eef06d8545cb26101abf22/drf-aggregates-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "46c9c7995d69424774b157a8b897e21d", "sha256": "c8a3da60bf4c7c390dfafddc770272ad28d3f9f9019d2cc35e23939af930f63c" }, "downloads": -1, "filename": "drf_aggregates-0.0.12-py2-none-any.whl", "has_sig": false, "md5_digest": "46c9c7995d69424774b157a8b897e21d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5944, "upload_time": "2019-08-01T07:50:35", "url": "https://files.pythonhosted.org/packages/60/ac/0613f40af4b69c2f181b46bc7c6a06ff44f974351d0fe8c43a326416c968/drf_aggregates-0.0.12-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6fc86706ce55eb2fa27b7ae014e96136", "sha256": "1a3be72caaee7b38764a69e982926d3fede3ec217c0500909e1d42c70b347672" }, "downloads": -1, "filename": "drf_aggregates-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "6fc86706ce55eb2fa27b7ae014e96136", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5945, "upload_time": "2019-08-01T08:34:18", "url": "https://files.pythonhosted.org/packages/49/26/598863043a9ca25b6fca49c7637aca3fed4abb54e458fc15b6800ef9690f/drf_aggregates-0.0.12-py3-none-any.whl" } ] }