{ "info": { "author": "Wes Kendall", "author_email": "opensource@ambition.com", "bugtrack_url": null, "classifiers": [ "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "[![Build Status](https://travis-ci.org/ambitioninc/django-activatable-model.png)](https://travis-ci.org/ambitioninc/django-activatable-model)\n# Django Activatable Model\n\nProvides functionality for Django models that have active and inactive states. \nFeatures of this app are:\n\n1. An abstract BaseActivatableModel that allows the user to specify an \n'activatable' (i.e. Boolean) field\n1. A model_activations_changed signal that fires when models' activatable field\nare changed or bulk updated\n1. Validation to ensure activatable models cannot be cascade deleted\n1. Overriding of delete methods so that the activatable flag is set to False \ninstead of the model(s) being deleted (unless force=True)\n1. Manager/QuerySet methods to activate and deactivate models\n\n## Installation\n```bash\npip install django-activatable-model\n```\n\nAdd `activatable_model` to the list of `INSTALLED_APPS`. Although this app does\nnot define any concrete models, it does connect signals that Django needs to \nknow about.\n\n## Basic Usage\nAssume you have a model called `Account` in your app, and it is an activatable \nmodel that has a `name` field and a `ForeignKey` to a `Group` model.\n\n```python\nfrom activatable_model.models import BaseActivatableModel\n\nclass Account(BaseActivatableModel):\n is_active = models.BooleanField(default=False)\n name = models.CharField(max_length=64)\n group = models.ForeignKey(Group)\n```\n\nBy just inheriting `BaseActivatableModel`, your model will need to define an \n`is_active` boolean field (this field name can be changed, more on that later).\nIf you create an `Account` model, the `model_activations_changed` signal will \nbe sent with an `is_active` keyword argument set to False and an `instance_ids` \nkeyword argument that is a list of the single created account id. Similarly, if \nyou updated the `is_active` flag at any time via the `.save()` method, the \n`model_activations_changed` signal will be emitted again. This allows the user \nto do things like this:\n\n```python\nfrom django.dispatch import receiver\nfrom activatable_model import model_activations_changed\n\n@receiver(model_activations_changed, sender=Account)\ndef do_something_on_deactivation(sender, instance_ids, is_active, **kwargs):\n if not is_active:\n # Either an account was deactivated or an inactive account was created...\n for account in Account.objects.filter(id__in=instance_ids):\n # Do something with every deactivated account\n```\n\n## Activatable Model Deletion\nDjango activatable model is meant for models that should never be deleted but \nrather activated/deactivated instead. Given the assumption that activatable \nmodels should never be deleted, Django activatable model does some magic \nunderneath to ensure your activatable models are properly updated when the user\ncalls `.delete()`. Instead of deleting the object(s) directly, the `is_active` \nflag is set to False and `model_activations_changed` is fired.\n\n```python\naccount = Account.objects.create(is_active=True)\naccount.delete() # Or Account.objects.all().delete()\n\n# The account still exists\nprint Account.objects.count()\n1\n\n# But it is deactivated\nprint Account.objects.get().is_active\nFalse\n```\n\nThe user can override this behavior by passing `force=True` to the model or \nqueryset's `.delete()` method.\n\nAlong with overriding deletion, Django activatable model also overrides cascade\ndeletion. No model that inherits `BaseActivatableModel` can be cascade deleted \nby another model. This is accomplished by connecting to Django's `pre_syncdb` \nsignal and verifying that all `ForeignKey` and `OneToOneField` fields of \nactivatable models have their `on_delete` arguments set to something other than\nthe default of `models.CASCADE`.\n\nIn fact, our `Account` model will not pass validation. In order to make it \nvalidate properly on syncdb, it must do the following:\n\n```python\nfrom django.db import models\n\nclass Account(BaseActivatableModel):\n is_active = models.BooleanField(default=False)\n name = models.CharField(max_length=64)\n group = models.ForeignKey(Group, on_delete=models.PROTECT)\n```\n\nThis will ensure a `ProtectedError` is thrown every time a Group is deleted. \nFor other options on foreign key deletion behavior, see \n[Django's docs](https://docs.djangoproject.com/en/1.7/ref/models/fields/#django.db.models.ForeignKey.on_delete).\n\n### Cascade Overrides (new in version 0.8.0 )\nAs mentioned above, activatable models cannot be cascade deleted. However,\nthis default behavior can be overridden by setting the the class variable,\n`ALLOW_CASCADE_DELETE = True`. If set to True, than cascade deletion will\nbe allowed. Note however, that this will be a hard delete, meaning that\ncascade deletion will completely remove your record from the database rather\nthan applying the ActivatibleModel magic of simply marking it as inactive.\n\n## Manager and QuerySet methods\nDjango activatable models automatically use an `ActivatableManager` manager\nthat uses an `ActivatableQuerySet` queryset. This provides the following \nfunctionality:\n\n1. Two methods - `activate()` and `deactivate()` that can be applied to a \nqueryset\n1. Overriding the `update()` method so that it emits \n`model_activations_changed` when the `is_active` flag is updated\n1. Overriding the `delete()` method so that it calls `deactivate()` unless \n`force=True`\n\n## Overriding the activatable field name\nThe name of the activatable field can be overridden by defining the \n`ACTIVATABLE_FIELD_NAME` constant on the model to something else. By default, \nthis constant is set to `is_active`. An example is as follows:\n\n```python\nfrom activatable_model import BaseActivatableModel\n\nclass Account(BaseActivatableModel):\n ACTIVATABLE_FIELD_NAME = 'active'\n active = models.BooleanField(default=False)\n```\n\nIn the above example, the model instructs the activatable model app to use \n`active` as the activatable field on the model. If the user does not define a \n`BooleanField` on the model with the same name as `ACTIVATABLE_FIELD_NAME`, a\n`ValidationError` is raised during syncdb / migrate.\n\n## Release Notes\n* 0.5.1\n * Optimize individual saves so that they dont perform an additional query when checking if model activations have been updated\n* 0.5.0\n * Changed the signal to send instance_ids as a keyword argument rather than the instances. This pushes fetching the updated models in signal handlers onto the application\n* 0.4.2\n * Fixed bug when activating a queryset that was filtered by the active flag\n* 0.3.1\n * Added Django 1.7 app config\n* 0.3.0\n * Added Django 1.7 support and backwards compatibility with Django 1.6\n\n* 0.2.0\n * When upgrading to this version, users will have to explicitly add the \n `is_active` field to any models that inherited `BaseActivatableModel`. This \n field had a default value of False before, so be sure to add that as the \n default for the boolean field.\n\n## License\nMIT License (see the [LICENSE](LICENSE) file in this repo)\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/ambitioninc/django-activatable-model", "keywords": "Django,Model,Activatable", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-activatable-model", "package_url": "https://pypi.org/project/django-activatable-model/", "platform": "", "project_url": "https://pypi.org/project/django-activatable-model/", "project_urls": { "Homepage": "https://github.com/ambitioninc/django-activatable-model" }, "release_url": "https://pypi.org/project/django-activatable-model/1.2.1/", "requires_dist": [ "Django (>=1.11)", "django-manager-utils (>=1.1.1)", "coverage; extra == 'dev'", "psycopg2; extra == 'dev'", "django-dynamic-fixture; extra == 'dev'", "django-nose (>=1.4); extra == 'dev'", "mock; extra == 'dev'" ], "requires_python": "", "summary": "Django Activatable Model", "version": "1.2.1" }, "last_serial": 5519393, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "31c7f38eccff1c52fc81617d03d6439e", "sha256": "7ee65eb0c82f653f637e7397b684592b027af8449714c08ff7446748bd9ecb8b" }, "downloads": -1, "filename": "django-activatable-model-0.1.tar.gz", "has_sig": false, "md5_digest": "31c7f38eccff1c52fc81617d03d6439e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6828, "upload_time": "2014-06-22T04:42:10", "url": "https://files.pythonhosted.org/packages/6d/16/1e26e808c27a7e02206b260e8791d41b12e46d864ed524730282bdf03b2d/django-activatable-model-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "64dd53f975caca1092bd3bd4b36c69aa", "sha256": "e07ed20e519d07279c3eab2498a7069d6c0c1a90f8edb9acebcb994b092f26cc" }, "downloads": -1, "filename": "django-activatable-model-0.1.1.tar.gz", "has_sig": false, "md5_digest": "64dd53f975caca1092bd3bd4b36c69aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6857, "upload_time": "2014-06-22T06:55:07", "url": "https://files.pythonhosted.org/packages/c4/83/322cd06bf1021ab9c7b1b7468a35888d9a70fa2b75c1e8ce75c083df8787/django-activatable-model-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "79227f4e23ddeb3210f02709c1b8c339", "sha256": "8bead6514f3d570e86b27c2d8adbaf3ee63b9622c7c5633448e78e4bcbb1006b" }, "downloads": -1, "filename": "django-activatable-model-0.2.0.tar.gz", "has_sig": false, "md5_digest": "79227f4e23ddeb3210f02709c1b8c339", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7982, "upload_time": "2014-10-16T19:03:10", "url": "https://files.pythonhosted.org/packages/f2/80/a6bc7caae5cf564ca50e65748e7ddc11a900dccd3f884d25e3379f46d340/django-activatable-model-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "59e066ba99ce63fabf325c4ae07f0cbe", "sha256": "c36e3006614da2150fd5ec480b790f06c8671b8d258ef32b2ace65d6dc9d1505" }, "downloads": -1, "filename": "django_activatable_model-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "59e066ba99ce63fabf325c4ae07f0cbe", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12063, "upload_time": "2015-02-06T02:22:20", "url": "https://files.pythonhosted.org/packages/b0/bd/92c3436a4aadd9b17839e01fd66c5373bf347e4deb34a5c83b8b0b1b4151/django_activatable_model-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "166a56e5a9cbdc8d3e160076ac99ae6d", "sha256": "b8b925de3c5ff065252b4a6c345b012342afcc15644908a0def57664861432d3" }, "downloads": -1, "filename": "django-activatable-model-0.3.0.tar.gz", "has_sig": false, "md5_digest": "166a56e5a9cbdc8d3e160076ac99ae6d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8148, "upload_time": "2015-02-06T02:22:16", "url": "https://files.pythonhosted.org/packages/a2/a5/c95069d2f84d58840cdd96e6ac0d36e532e3259a66759d7dca587a634e49/django-activatable-model-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "207b3ab69cb65359024e567c2d98f8a0", "sha256": "9b131934cedd5c3b41625f47b0f534a7a655d9af32d1a172b0bb1baff3d6b0a0" }, "downloads": -1, "filename": "django_activatable_model-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "207b3ab69cb65359024e567c2d98f8a0", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 12551, "upload_time": "2015-03-30T17:55:46", "url": "https://files.pythonhosted.org/packages/6d/44/36a528cf5f64e8da38cd7565042533a517c55af7948a62e7d4ec897023d6/django_activatable_model-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d4369f21b1fc4db5625ddc46d68d53a", "sha256": "ad171a6dba6a2f73f548159041bd44cadc6507ea95a6acc8ca53537b3694d4bb" }, "downloads": -1, "filename": "django-activatable-model-0.3.1.tar.gz", "has_sig": false, "md5_digest": "4d4369f21b1fc4db5625ddc46d68d53a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8606, "upload_time": "2015-03-30T17:55:43", "url": "https://files.pythonhosted.org/packages/73/38/ed66e5fbf06c2e28562ac9922f29dbb05357cb635f5f8179d9681a164e13/django-activatable-model-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "b70a29e5b3a5627459d4de7e8742dc9d", "sha256": "d5a05da725b0cc55a7771ea8b7dfdc4ae73b0eab374688e738fee2f929a5b9a1" }, "downloads": -1, "filename": "django_activatable_model-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b70a29e5b3a5627459d4de7e8742dc9d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13585, "upload_time": "2015-05-02T17:31:33", "url": "https://files.pythonhosted.org/packages/c1/ae/f9a94ca12cb15d2c2ae8f2e51370d3c5b5bb04322d1d5e7b356e9576370d/django_activatable_model-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c526ef35085b8f5a96eb66c13d6e0dd2", "sha256": "ce7dc84060bd1c9843e60cd533518acfa8d53ae4c479a4b96fb6bcccf6a00133" }, "downloads": -1, "filename": "django-activatable-model-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c526ef35085b8f5a96eb66c13d6e0dd2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8927, "upload_time": "2015-05-02T17:31:30", "url": "https://files.pythonhosted.org/packages/d9/63/cf6db98bcd880a1d176fb61fee9271d2353ef90330faa5b72f56af28a304/django-activatable-model-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "ed36fa2a442b187f473a622455a798f3", "sha256": "1708cf2e89857701e05e218f0153fbfb25493588277e2d7593736c938de90b77" }, "downloads": -1, "filename": "django_activatable_model-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ed36fa2a442b187f473a622455a798f3", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13590, "upload_time": "2015-05-02T22:41:07", "url": "https://files.pythonhosted.org/packages/85/b3/8ff6fed3dbfd1cb41d5c55d8fb987a0e0f295043bce73274a00f67b87176/django_activatable_model-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "df9099dbb3d6395e0181edc906354d1e", "sha256": "f187b404bef5c6d4998383ba834cb86ea94a9fa0ff78be158ce823cce634bacc" }, "downloads": -1, "filename": "django-activatable-model-0.4.1.tar.gz", "has_sig": false, "md5_digest": "df9099dbb3d6395e0181edc906354d1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8941, "upload_time": "2015-05-02T22:41:04", "url": "https://files.pythonhosted.org/packages/87/a5/69e1e8d3e3c81c7280378a94c060cf8a0862871f6c9f5c53e8f2d412ddc9/django-activatable-model-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "a3b2d95a7f689de53a7967449d6fd8cc", "sha256": "096ac6e42de81a66781efb1bfae280fb364d24508d9a46e05cbacacba0b86f71" }, "downloads": -1, "filename": "django_activatable_model-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a3b2d95a7f689de53a7967449d6fd8cc", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13679, "upload_time": "2015-07-08T00:57:03", "url": "https://files.pythonhosted.org/packages/ca/78/c9e8422b8ea211a422c98d3631bb0eb39451f62531274c1abefa096c1c86/django_activatable_model-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8fff4c7b0ce2c6f37844b5b5f74754c5", "sha256": "62fe35c98d7b7e9148f1e26057d3d83115003b72632bcc2a41ff5845671ae134" }, "downloads": -1, "filename": "django-activatable-model-0.4.2.tar.gz", "has_sig": false, "md5_digest": "8fff4c7b0ce2c6f37844b5b5f74754c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9015, "upload_time": "2015-07-08T00:57:00", "url": "https://files.pythonhosted.org/packages/2e/8b/0379ca9c3da2b3d7314731091a1fb9603aeec1b3ebeed3c6a27778b82968/django-activatable-model-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ab889dd2000188b7b1995cfb30f67257", "sha256": "c327e4f05348dec0ffc235c9b086a84db1e22ec21754bb9adf05720381520d9b" }, "downloads": -1, "filename": "django_activatable_model-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ab889dd2000188b7b1995cfb30f67257", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14021, "upload_time": "2015-07-08T17:37:45", "url": "https://files.pythonhosted.org/packages/ec/25/903ea71d415eb6614475e6047ef022b0510330bfa97bd4ab580a4a20db88/django_activatable_model-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c343a33f79a925f2c0f9a8167de7462", "sha256": "856f6b18daf8ddcdfa412e6b93a651eb3c1d2d0ea3ca32bdb61f29b65a5c1f16" }, "downloads": -1, "filename": "django-activatable-model-0.5.0.tar.gz", "has_sig": false, "md5_digest": "8c343a33f79a925f2c0f9a8167de7462", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9263, "upload_time": "2015-07-08T17:37:42", "url": "https://files.pythonhosted.org/packages/1d/79/ee2affac99c9bd233ab01e02061c9758509cd6933b73ae61fbb57e9ddc57/django-activatable-model-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "b37e26d2dc0d46b5e7f8cc2a6de7500d", "sha256": "c4a97d4ffc8011b337772196d72942035b908f5e7bbd3eb8d55d4ee39c1995b1" }, "downloads": -1, "filename": "django_activatable_model-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b37e26d2dc0d46b5e7f8cc2a6de7500d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14224, "upload_time": "2015-07-08T18:17:54", "url": "https://files.pythonhosted.org/packages/0f/3e/af953a70aff2246543a383f51c4f29e5364fd93e3a19a173e90894f1c7be/django_activatable_model-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c88c396eb751765e0f9e60814d2ae7e", "sha256": "342041c1f1ab6d0b0e5023dce0e34c47a3f9e010da12ab85ca1d85608aa10669" }, "downloads": -1, "filename": "django-activatable-model-0.5.1.tar.gz", "has_sig": false, "md5_digest": "6c88c396eb751765e0f9e60814d2ae7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9414, "upload_time": "2015-07-08T18:17:50", "url": "https://files.pythonhosted.org/packages/30/b0/2d938a0bf1ef2943f9656397cc817dcbad5f72fe519cac0907700ec3da36/django-activatable-model-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "a99bb240bb40ffb7ca775533fd7e1213", "sha256": "c8fc60db00543d491ff459d773c09241ab3a02a169b4e5b3e1c95f50256b404d" }, "downloads": -1, "filename": "django_activatable_model-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a99bb240bb40ffb7ca775533fd7e1213", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14748, "upload_time": "2016-01-26T20:19:12", "url": "https://files.pythonhosted.org/packages/77/48/1a1eeebcefac1ea1e63993a55b5afcfd31fe53d8b87d125d983894d856cd/django_activatable_model-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3dcac27b657770b5d977aa4deaf3d899", "sha256": "524b179b938434cdbe52368af746ab0d5b52ac0f2fb923719ba4251f047da6eb" }, "downloads": -1, "filename": "django-activatable-model-0.6.0.tar.gz", "has_sig": false, "md5_digest": "3dcac27b657770b5d977aa4deaf3d899", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9850, "upload_time": "2016-01-26T20:18:55", "url": "https://files.pythonhosted.org/packages/a6/af/d01590dd0a4b0be16e31d9a422c341d2f09f22da91649faf6ec6d58b5d9d/django-activatable-model-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "da502b76cb6243e73130ca7cbaf89d65", "sha256": "a36617d05bc4a87e853f8ff2cebf7bf29859b149900e5beaf5272283db4a805a" }, "downloads": -1, "filename": "django_activatable_model-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da502b76cb6243e73130ca7cbaf89d65", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14720, "upload_time": "2016-02-11T23:15:32", "url": "https://files.pythonhosted.org/packages/02/9b/ad3ce2e309cde81a9faa6a7a76f579b7cb2ea37f0a0ef806ba30225b8b7e/django_activatable_model-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8e8c431608669199463ef832ad4dafb", "sha256": "6ace0d00828b10ff524314b4c07b0bf8ef63d455f02b960a0b9ce7ecebc48d13" }, "downloads": -1, "filename": "django-activatable-model-0.7.0.tar.gz", "has_sig": false, "md5_digest": "a8e8c431608669199463ef832ad4dafb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9840, "upload_time": "2016-02-11T23:15:25", "url": "https://files.pythonhosted.org/packages/9d/1f/d940ce28da579784b425c0d5745493bd6136bb70074481447ffa9733220d/django-activatable-model-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "dd4de76753aeff436352f4160ecdf6fa", "sha256": "98f50dbd16f7712cb23d52ad938bbdf30c048d2b5e7574646d79a8feeeae040e" }, "downloads": -1, "filename": "django_activatable_model-0.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dd4de76753aeff436352f4160ecdf6fa", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14731, "upload_time": "2016-02-15T23:32:16", "url": "https://files.pythonhosted.org/packages/2c/78/4e50bc5e64bb41fba85915915b1388da0befe4279e168d77786d23e4fe6c/django_activatable_model-0.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ab98dcb25b6519020c358b94f5ec217", "sha256": "0f988b047346e6b662d19950e80f264328bd59b04804286faf505299275f216e" }, "downloads": -1, "filename": "django-activatable-model-0.7.1.tar.gz", "has_sig": false, "md5_digest": "8ab98dcb25b6519020c358b94f5ec217", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9876, "upload_time": "2016-02-15T23:32:09", "url": "https://files.pythonhosted.org/packages/fb/61/b1f76b14cd78ea8d6bb8084c526aa393023903a514d38d8a458a50ca6e93/django-activatable-model-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "6b701035d2a9c6f2b690071eac26daf6", "sha256": "b7582c565f4dbae28ac2cf35c1b9e79faa8c5ae1857ab53b5537f2d41030478c" }, "downloads": -1, "filename": "django_activatable_model-0.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6b701035d2a9c6f2b690071eac26daf6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14730, "upload_time": "2016-02-16T14:51:27", "url": "https://files.pythonhosted.org/packages/cd/eb/4ccf75a2738173f7ee5b012bf56b40586dc3be0627d35afc5da2cb16793f/django_activatable_model-0.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "28d98dd1ec78f2e27a47e5315eb037e4", "sha256": "2e46aa50dc0526933309065b99ca45f2a9f816f51d6889dd66e093f929acb615" }, "downloads": -1, "filename": "django-activatable-model-0.7.2.tar.gz", "has_sig": false, "md5_digest": "28d98dd1ec78f2e27a47e5315eb037e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9873, "upload_time": "2016-02-16T14:51:19", "url": "https://files.pythonhosted.org/packages/58/73/b4034fd00eaf7f43d223e79f33faf4ab62b7b678f4481ae4dced58a664d7/django-activatable-model-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "4551a72d024c70cdbd3e5039b7074afd", "sha256": "bcb67ba77ea7b2c5d96bf863bf3a9f0691181ee767ae191c6dc3655c55c9e23c" }, "downloads": -1, "filename": "django_activatable_model-0.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4551a72d024c70cdbd3e5039b7074afd", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14739, "upload_time": "2016-11-28T18:03:16", "url": "https://files.pythonhosted.org/packages/43/88/497ecafaf27c6822a8b50a44c790bb6278bcad5c3bc5718913cccf9fdd9c/django_activatable_model-0.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08dc76e1479c4a9b74da4dd844a683d2", "sha256": "0a17805ab6d95eaad0ce1d353ffa4d89bdf191ff9bc161054e0bbf27239a9cbc" }, "downloads": -1, "filename": "django-activatable-model-0.7.3.tar.gz", "has_sig": false, "md5_digest": "08dc76e1479c4a9b74da4dd844a683d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9825, "upload_time": "2016-11-28T18:03:14", "url": "https://files.pythonhosted.org/packages/ca/ff/2a12e0a8add6e798fdd10d9bf855c4a437f84bc7611f424b022826b7aeb4/django-activatable-model-0.7.3.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "36674b74407dc353cc50a3ad33b7fdb5", "sha256": "f7059b85e875c91ef80ef32ef08fcb25a2e6c90a9501a7a75bfae12574f5b881" }, "downloads": -1, "filename": "django_activatable_model-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "36674b74407dc353cc50a3ad33b7fdb5", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16494, "upload_time": "2017-06-28T20:34:13", "url": "https://files.pythonhosted.org/packages/0e/07/0d90a3295c560f628ebb14f96fbff880abfd89787c74d1b8efa694d4f340/django_activatable_model-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "308b41c8c091c7c9e2962625cc833108", "sha256": "ea356300f32b2e6b6f3a0a61d009a57866a0ce628a81a3203465cac1c59a12e7" }, "downloads": -1, "filename": "django-activatable-model-0.8.0.tar.gz", "has_sig": false, "md5_digest": "308b41c8c091c7c9e2962625cc833108", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10747, "upload_time": "2017-06-28T20:34:12", "url": "https://files.pythonhosted.org/packages/fc/a4/a05e53052671d36c38e8b40068f51a16aa3eb27c0b79d23f72992bbacf12/django-activatable-model-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "599916ccba3865be309443be0f2b6aad", "sha256": "f5da2e5fdb149275db8365dfb795954647501e122a7c0dfdffc7f00e2efcc623" }, "downloads": -1, "filename": "django_activatable_model-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "599916ccba3865be309443be0f2b6aad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16504, "upload_time": "2017-09-18T17:26:28", "url": "https://files.pythonhosted.org/packages/61/ba/cf866b0aa3ee222c90f31a2c8b9e39df7dd5aaa629d8d6bb57fbdf9f8c54/django_activatable_model-0.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e065ac4d9e2c4305b046865119033de", "sha256": "255ee5a578c4fb780b593fe27af949ad1d55dc2ccbea7228c27fddb6d3dce636" }, "downloads": -1, "filename": "django-activatable-model-0.9.0.tar.gz", "has_sig": false, "md5_digest": "8e065ac4d9e2c4305b046865119033de", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10821, "upload_time": "2017-09-18T17:26:31", "url": "https://files.pythonhosted.org/packages/09/7c/d2b33ebf4437ad864f60fab20ca2e7d185c163160ae687e6f9133997f7a3/django-activatable-model-0.9.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "0ee3785a930078496d61575797295489", "sha256": "12a519fb1bf33eac923de8561e7c650c3f9aee442fb0abcfd64708ed2d4c9582" }, "downloads": -1, "filename": "django_activatable_model-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0ee3785a930078496d61575797295489", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16490, "upload_time": "2017-12-08T21:49:27", "url": "https://files.pythonhosted.org/packages/e1/59/0e3ccb3b2e25f83d6b46133c6626da16c7403482ddb79dc7f975d25a973e/django_activatable_model-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eba3e5e370d675c3cdbf291bd2e913e8", "sha256": "51260135bfdf86ce475b10733b7fab5df2f2b4652b85ef0980f756c04e19ce12" }, "downloads": -1, "filename": "django-activatable-model-1.0.0.tar.gz", "has_sig": false, "md5_digest": "eba3e5e370d675c3cdbf291bd2e913e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10811, "upload_time": "2017-12-08T21:49:28", "url": "https://files.pythonhosted.org/packages/c0/05/ed23cdb27fbd964545cd0b007d81f0418cfd4d0c3a12078ae7ce1057848f/django-activatable-model-1.0.0.tar.gz" } ], "1.0.1a1": [ { "comment_text": "", "digests": { "md5": "d0502d4f1ac8eeef479f7ef5a5c31e9d", "sha256": "443da44f281b6352e3bffba394ad2397c1e801f740b066b7fa34a21517c0f724" }, "downloads": -1, "filename": "django_activatable_model-1.0.1a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d0502d4f1ac8eeef479f7ef5a5c31e9d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16526, "upload_time": "2018-02-22T16:39:09", "url": "https://files.pythonhosted.org/packages/62/61/2bdf4aabbcc7ac57524bb8a8ec9d619a851438c09b115496c2ed12df40cf/django_activatable_model-1.0.1a1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e2ea9000d3b1636341feac94e35d1bd", "sha256": "d3874d23e594008b2929e36f5e05103c39728f9788b0b20f1682aab4a9a4aa4e" }, "downloads": -1, "filename": "django-activatable-model-1.0.1a1.tar.gz", "has_sig": false, "md5_digest": "0e2ea9000d3b1636341feac94e35d1bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10845, "upload_time": "2018-02-22T16:39:11", "url": "https://files.pythonhosted.org/packages/ec/ef/87c1e77a9ff2585a783abe15da5b0b6f150abbcf5bc87f659a7bed8a1949/django-activatable-model-1.0.1a1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "2bfe6637dce0405d828756a31c3d0def", "sha256": "79e79f14e32dc56ae15ecb8c02c4f0669ae597e0f39c2b7addfaf86791bbc187" }, "downloads": -1, "filename": "django_activatable_model-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2bfe6637dce0405d828756a31c3d0def", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16523, "upload_time": "2018-03-29T18:27:52", "url": "https://files.pythonhosted.org/packages/d2/37/dc261032e380246cd1a1f21654bd50e9fea300f2ec1b851061789bad1612/django_activatable_model-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7634fc31283e77f96db63e7641c00638", "sha256": "9715f4c5518c3f10bddfab0ac5198a2478759d206135b73994b5c51016c894b0" }, "downloads": -1, "filename": "django-activatable-model-1.1.0.tar.gz", "has_sig": false, "md5_digest": "7634fc31283e77f96db63e7641c00638", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12800, "upload_time": "2018-03-29T18:27:53", "url": "https://files.pythonhosted.org/packages/9b/e2/75208e08b0144f2de0741024eb361446eb2bc2e8dad12cabefd90ab0a4d1/django-activatable-model-1.1.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "39fcab7b2c2f9dd7b13107d333644e3b", "sha256": "aabfffc30857e596a3ef9b24f3aad4ed96657d032a31a9a79f3d9b6939324f64" }, "downloads": -1, "filename": "django_activatable_model-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39fcab7b2c2f9dd7b13107d333644e3b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12903, "upload_time": "2019-07-11T18:04:25", "url": "https://files.pythonhosted.org/packages/15/2c/605bd6afade6b7c19a2f4b1fc74f2d81f26025a2622eedada4fc34e6996d/django_activatable_model-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cb9a4177c79c2d8aaaaee7c0f76860d1", "sha256": "4f570d58125a9a1eab6d993742d1089771b0026282e50e11d743fdb12ba174ec" }, "downloads": -1, "filename": "django-activatable-model-1.2.1.tar.gz", "has_sig": false, "md5_digest": "cb9a4177c79c2d8aaaaee7c0f76860d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11044, "upload_time": "2019-07-11T18:04:27", "url": "https://files.pythonhosted.org/packages/fb/8a/344bd0e1537634bbda001a917106bb9924f28558b4cea5e5cebd4c0dd4a2/django-activatable-model-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "39fcab7b2c2f9dd7b13107d333644e3b", "sha256": "aabfffc30857e596a3ef9b24f3aad4ed96657d032a31a9a79f3d9b6939324f64" }, "downloads": -1, "filename": "django_activatable_model-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "39fcab7b2c2f9dd7b13107d333644e3b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12903, "upload_time": "2019-07-11T18:04:25", "url": "https://files.pythonhosted.org/packages/15/2c/605bd6afade6b7c19a2f4b1fc74f2d81f26025a2622eedada4fc34e6996d/django_activatable_model-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cb9a4177c79c2d8aaaaee7c0f76860d1", "sha256": "4f570d58125a9a1eab6d993742d1089771b0026282e50e11d743fdb12ba174ec" }, "downloads": -1, "filename": "django-activatable-model-1.2.1.tar.gz", "has_sig": false, "md5_digest": "cb9a4177c79c2d8aaaaee7c0f76860d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11044, "upload_time": "2019-07-11T18:04:27", "url": "https://files.pythonhosted.org/packages/fb/8a/344bd0e1537634bbda001a917106bb9924f28558b4cea5e5cebd4c0dd4a2/django-activatable-model-1.2.1.tar.gz" } ] }