{ "info": { "author": "Sergey Tikhonov", "author_email": "zimbler@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# django-denormalized\nUtils for maintaining denormalized aggregates for Django models.\n\n[![Build Status](https://travis-ci.org/just-work/django-denormalized.svg?branch=master)](https://travis-ci.org/just-work/django-denormalized)\n[![codecov](https://codecov.io/gh/just-work/django-denormalized/branch/master/graph/badge.svg)](https://codecov.io/gh/just-work/django-denormalized)\n[![PyPI version](https://badge.fury.io/py/django-denormalized.svg)](https://badge.fury.io/py/django-denormalized)\n\n# Example\n\n```python\nfrom django.db import models\nfrom denormalized import DenormalizedTracker, DenormalizedForeignKey\n\n\nclass Group(models.Model):\n members_count = models.PositiveIntegerField(default=0)\n points_sum = models.PositiveIntegerField(default=0)\n\n\nclass Member(models.Model):\n group = DenormalizedForeignKey(\n Group, models.CASCADE,\n trackers=[\n DenormalizedTracker(\n # name of field to store denormalized count of active members\n \"members_count\", \n # callback to determine whether object should be counted or not\n callback=lambda obj: obj.active,\n # QuerySet filter to count only suitable objects\n query=models.Q(active=True)),\n DenormalizedTracker(\n # multiple denormalized fields tracked for single foreign key\n \"points_sum\",\n # Sum/Min/Max is also supported\n aggregate=models.Sum(\"points\"))\n ])\n active = models.BooleanField(default=True)\n points = models.IntegerField(default=0)\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/just-work/django-denormalized", "keywords": "", "license": "Beer License", "maintainer": "", "maintainer_email": "", "name": "django-denormalized", "package_url": "https://pypi.org/project/django-denormalized/", "platform": "", "project_url": "https://pypi.org/project/django-denormalized/", "project_urls": { "Homepage": "https://github.com/just-work/django-denormalized" }, "release_url": "https://pypi.org/project/django-denormalized/0.15.0/", "requires_dist": null, "requires_python": "", "summary": "Utils for maintaining denormalized aggregates for Django models", "version": "0.15.0" }, "last_serial": 4864135, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e178b6d70e2c1679ac506f127e8f09eb", "sha256": "14c6722d0a38b06628351bfe2c24a6e0944c8dfec799fbd7274befe411c1d999" }, "downloads": -1, "filename": "django_denormalized-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e178b6d70e2c1679ac506f127e8f09eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2969, "upload_time": "2018-12-03T08:46:57", "url": "https://files.pythonhosted.org/packages/fd/76/201414e10176430fa8c2baa8ad309bdf7e3cbb4e80b4ac6eacbadb562b65/django_denormalized-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "70188d22f9b7df2dd969286a03e188ec", "sha256": "b5af17d6d39dcaa19f1749cb04c6cbb235fe3c09f1cfdd5c4a0d644844a6b13e" }, "downloads": -1, "filename": "django_denormalized-0.1.1.tar.gz", "has_sig": false, "md5_digest": "70188d22f9b7df2dd969286a03e188ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3169, "upload_time": "2018-12-03T08:49:15", "url": "https://files.pythonhosted.org/packages/d8/d6/4863ee2448de2e4ee7f794abdce35d6a42bdf325cec554688f407eb11585/django_denormalized-0.1.1.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "6ce06598b14fd41cc0c2b6f2b677b56e", "sha256": "77295362bacdb12a2c4c86b857d3c0bf78625934ad8d72f91d260e004356d400" }, "downloads": -1, "filename": "django_denormalized-0.11.0.tar.gz", "has_sig": false, "md5_digest": "6ce06598b14fd41cc0c2b6f2b677b56e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4727, "upload_time": "2018-12-10T12:02:14", "url": "https://files.pythonhosted.org/packages/fc/9a/f9582e69a6691d9cae0241d7cae64792c05ee8ee9e6cc3d2db0b53749fdf/django_denormalized-0.11.0.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "6dae0300c23fae3ea7d564b3cf41ccc1", "sha256": "9d92bc267e267533583d5c00171f28737f808c66790a4f05ffe0c7413871f644" }, "downloads": -1, "filename": "django_denormalized-0.12.0.tar.gz", "has_sig": false, "md5_digest": "6dae0300c23fae3ea7d564b3cf41ccc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4733, "upload_time": "2018-12-12T11:00:46", "url": "https://files.pythonhosted.org/packages/10/ad/2231935d572f06137ae1484b5ff528ce948e654eeccfae13c62b23b851c7/django_denormalized-0.12.0.tar.gz" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "7bb14047c04520e9d0125d9c9535496c", "sha256": "3a1dca46bb3e9b7cdf55b34fa7aab4c91cb48e95e810c9b4242788cfc6910b9a" }, "downloads": -1, "filename": "django_denormalized-0.13.0.tar.gz", "has_sig": false, "md5_digest": "7bb14047c04520e9d0125d9c9535496c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6105, "upload_time": "2018-12-29T10:39:46", "url": "https://files.pythonhosted.org/packages/b9/50/67e607ce34bb8067b1eb54e1bd511efb69bc6e9efd616faa5e1a01134554/django_denormalized-0.13.0.tar.gz" } ], "0.14.0": [ { "comment_text": "", "digests": { "md5": "f8993feca81b53dd7e77c5692bd45609", "sha256": "55c854516f0cee5c7d07aa2973832a25b16ff67d0e1d483bc95a6fbedb9425a8" }, "downloads": -1, "filename": "django_denormalized-0.14.0.tar.gz", "has_sig": false, "md5_digest": "f8993feca81b53dd7e77c5692bd45609", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6133, "upload_time": "2019-01-15T14:13:28", "url": "https://files.pythonhosted.org/packages/71/41/1215c5879c44603949a870b910d884674b65067b75e072297bcd6d931f91/django_denormalized-0.14.0.tar.gz" } ], "0.15.0": [ { "comment_text": "", "digests": { "md5": "21ded575981ea9235d46feaf8393ca23", "sha256": "4b3b18f1efed8a81f258489b940c5e8a82f57daea996725e00c50b6e4c354327" }, "downloads": -1, "filename": "django_denormalized-0.15.0.tar.gz", "has_sig": false, "md5_digest": "21ded575981ea9235d46feaf8393ca23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6244, "upload_time": "2019-02-25T11:28:59", "url": "https://files.pythonhosted.org/packages/9a/dc/9f763b21938b415aeff66ee0b3cd8f436817754bd1396f502683b09491b0/django_denormalized-0.15.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "91cf315c8970298d89cc69f2ce69a07e", "sha256": "65a43e804a9fa80ae76f7e6329ea425ed285ccb65ba8558d6a18f7bd8c922e21" }, "downloads": -1, "filename": "django_denormalized-0.2.0.tar.gz", "has_sig": false, "md5_digest": "91cf315c8970298d89cc69f2ce69a07e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3242, "upload_time": "2018-12-03T10:06:35", "url": "https://files.pythonhosted.org/packages/81/30/e10749d33dcebfbc50581b0a6a30a2b08fad719fc9327d8c372177bd762e/django_denormalized-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "1c288714c8dd16588eca7b9bbb306a1b", "sha256": "8b1c9f2f95aa93d12b06937f0368ea56f129eb7f5f41237746e45389d7ac5330" }, "downloads": -1, "filename": "django_denormalized-0.3.0.tar.gz", "has_sig": false, "md5_digest": "1c288714c8dd16588eca7b9bbb306a1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3260, "upload_time": "2018-12-03T10:24:25", "url": "https://files.pythonhosted.org/packages/9a/d1/05a5b118497c49e0e2f47192eb38d691753b46a34df00a24dc11b7a84260/django_denormalized-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "abbf8d1cd57e4b92109151f913b82688", "sha256": "c34fe40cd7241ddb45c042afa726df9207806091abeb5a6171305238eb6b5c6c" }, "downloads": -1, "filename": "django_denormalized-0.4.0.tar.gz", "has_sig": false, "md5_digest": "abbf8d1cd57e4b92109151f913b82688", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3268, "upload_time": "2018-12-03T11:08:25", "url": "https://files.pythonhosted.org/packages/89/50/1d82ba93574457dbd8634482d90ec18488abc0e3d55d579134b6e9d873ab/django_denormalized-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "089d4d5a78d6856964aae96b33fcdbb7", "sha256": "14a9bae251adf547f303bbbc25763adfa5f0e7aba04fb0b8b102230f8ca5db67" }, "downloads": -1, "filename": "django_denormalized-0.5.0.tar.gz", "has_sig": false, "md5_digest": "089d4d5a78d6856964aae96b33fcdbb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3329, "upload_time": "2018-12-03T13:19:43", "url": "https://files.pythonhosted.org/packages/cd/5b/6dcd2f3ab580e8c7fe474ce047b92bff01e372858c765719a586df3b915b/django_denormalized-0.5.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "5a7f1ca1e45226468fbc24179cd3f532", "sha256": "0294f1e03abaa563aac55aae647cabecc3f239a665b7485321760f4da87f9b98" }, "downloads": -1, "filename": "django_denormalized-0.7.0.tar.gz", "has_sig": false, "md5_digest": "5a7f1ca1e45226468fbc24179cd3f532", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4057, "upload_time": "2018-12-04T02:59:36", "url": "https://files.pythonhosted.org/packages/80/20/81054684b98e421117d311459459da21de180497fd79ca68ab8bf85ae3f7/django_denormalized-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "ddf6d36cabc3e8cedaebfb720d992f27", "sha256": "27f98fe7a8da038676fff3f0de15d359251ec0babd98c68e2af6989f43c4b0d2" }, "downloads": -1, "filename": "django_denormalized-0.8.0.tar.gz", "has_sig": false, "md5_digest": "ddf6d36cabc3e8cedaebfb720d992f27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4084, "upload_time": "2018-12-04T04:10:51", "url": "https://files.pythonhosted.org/packages/5d/6a/42e02c990b10b6d9a494a6dbf7e921e60c38d46f6d3630d2c6d5469544d0/django_denormalized-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "b9d6c9da7905bd80503760b72e2ecaba", "sha256": "19016848b12d48bdf9e155e5feca57f5e9f4fcd68b23c20615e70cbaecddfba0" }, "downloads": -1, "filename": "django_denormalized-0.9.0.tar.gz", "has_sig": false, "md5_digest": "b9d6c9da7905bd80503760b72e2ecaba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4227, "upload_time": "2018-12-05T18:16:44", "url": "https://files.pythonhosted.org/packages/5d/d9/01c5ec1bfe683b0a34506cdc778cdbe0f83b2a9f0658860c8a52b7a5ebf3/django_denormalized-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "21ded575981ea9235d46feaf8393ca23", "sha256": "4b3b18f1efed8a81f258489b940c5e8a82f57daea996725e00c50b6e4c354327" }, "downloads": -1, "filename": "django_denormalized-0.15.0.tar.gz", "has_sig": false, "md5_digest": "21ded575981ea9235d46feaf8393ca23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6244, "upload_time": "2019-02-25T11:28:59", "url": "https://files.pythonhosted.org/packages/9a/dc/9f763b21938b415aeff66ee0b3cd8f436817754bd1396f502683b09491b0/django_denormalized-0.15.0.tar.gz" } ] }