{ "info": { "author": "Sam Bolgert", "author_email": "sbolgert@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "Django Diffs\n------------\n\n.. image:: https://travis-ci.org/linuxlewis/django-diffs.svg?branch=master\n :target: https://travis-ci.org/linuxlewis/django-diffs\n\n\nDjango diffs allows models to be registered to cache it's changes (or diffs) over a fixed time period.\n\nThe diffs are stored in redis using a SortedSet and accessed via a manager-like object on the registered django model class.\n\nIt's compatible with Python 2/3 and Django 1.8 and above. It requires an available redis server.\n\n\nTable of Contents\n-----------------\n\n- `Getting Started <#getting-started>`__\n- `Configuration <#configuration>`__\n- `Pruning Diffs <#pruning-diffs>`__\n- `Custom Serialization <#custom-serialization>`__\n- `Related models <#related-models>`__\n\n\nHow does it Work?\n-----------------\n\nModels are registered with the ``@diffs.register`` decorator and their changes are serialized and saved to redis on signals.\nThe decorator installs django-dirtyfields to the model on registration to get the changed fields of the model instance.\n\nChanges can be accessed via the ``diffs`` manager on the registered model. The diffs manager returns a list of ``Diff``\nobjects that have properties of ``data``, ``created``, and ``timestamp``.\n\nThe manager can be accessed via the class like ``Question.diffs`` or like a related manager on the instance ``instance.diffs``.\n\nHere's a quick example.\n\n.. code:: python\n\n # models.py\n\n import diffs\n\n @diffs.register\n class Question(models.Model):\n question_text = models.CharField(max_length=200)\n pub_date = models.DateTimeField('date published')\n\n question = Question.objects.create(question_text='What is life?')\n\n question.question_text = 'What is python?'\n question.save()\n\n for diff in question.diffs:\n print(diff.timestamp)\n print(diff.data)\n print(diff.created)\n\n diffs = Question.diffs.get_by_object_id(question.id)\n\nWhy?\n----\n\nYou need to cache the changes to a single django model or collection of models for a fixed time period.\n\nTracking the changes prevents clients from having to re-request all of the model data which is assumed to be costly.\n\n\n\nGetting Started\n---------------\n\n\n- Add ``django-diffs`` to ``requirements.txt``\n\n.. code:: bash\n\n pip install django-diffs\n\n- Add ``diffs`` to ``INSTALLED_APPS``\n\n.. code:: python\n\n INSTALLED_APPS = (\n 'diffs',\n )\n\n- Register a Model\n\n.. code:: python\n\n # models.py\n\n import diffs\n\n @diffs.register\n class Question(models.Model):\n question_text = models.CharField(max_length=200)\n pub_date = models.DateTimeField('date published')\n\nThat's it! Changes will now be tracked automatically for this model.\n\nConfiguration\n-------------\n\nDjango-diffs can be configured via ``django.conf.settings``. Below is the default configuration\n\n.. code:: python\n\n # settings.py\n\n DIFFS_SETTINGS = {\n 'redis': {\n 'host': 'localhost',\n 'port': 6379,\n 'db': 0,\n },\n 'max_element_age': 60*60,\n 'use_transactions': True,\n 'test_mode': False\n }\n\nThe following keys are supported for ``DIFFS_SETTINGS``\n\n\n``redis`` -- A dictionary with the keys ``host``, ``port`` and ``db`` for details of the redis server.\n\n``max_element_age`` -- Defines the number of seconds a single diff should be allowed to live. This is used in the pruning script\nto remove old elements from the set.\n\n``use_transactions`` -- Boolean to configure django-diffs using Django's ``connection.on_commit`` callback registry. When enabled\ndjango-diffs will defer persistence to ``on_commit``.\n\n``test_mode`` -- Boolean to configure using test mode. Test mode uses ``fake_redis`` instead of real ``redis`` so a server isn't required.\nUse this mode when running your unittests.\n\n\nPruning Diffs\n-------------\n\nBy default redis only allows you to set an expire on an entire key. You cannot set an expiry per element in a set or sorted set.\n\nTo work around this django-diffs sets the current unix timestamp as the SortedSet element score. Items can then be easily removed\nusing the redis command ``ZREMRANGEBYSCORE``.\n\nAll of this has been handled for you in the custom management command ``prune_diffs``. Run this on a cron schedule to keep your\ncache up to date.\n\n.. code:: bash\n\n python manage.py prune_diffs\n\n\nCustom Serialization\n--------------------\n\nBy default django-diffs uses ``django.core.serializers`` module to serialize the diff to json.\n\nTo use your own custom serialization format just implement the ``serialize_diff`` method\non your model. It will be passed the list of ``dirty_fields`` and the ``created`` kwarg.\n\n.. code:: python\n\n # models.py\n\n import diffs\n\n @diffs.register\n class Question(models.Model):\n question_text = models.CharField(max_length=200)\n pub_date = models.DateTimeField('date published')\n\n def serialize_diff(self, dirty_fields, created=False):\n return {'fields': dirty_fields}\n\n question = Question.objects.create(question_text='What will happen?')\n\n Question.diffs.get_by_object_id(question.id)[-1].data\n # {'fields': ['question_name']}\n\n\nRelated models\n--------------\n\nSometimes you want to track changes on a collection of related models.\nThese could be individual items part of a larger Report object.\n\nDjango-diffs allows you to set a parent objects by implementing ``get_diff_parent`` on\nthe child model. It must return a model instance with an id defined.\n\n\n\n.. code:: python\n\n # models.py\n\n import diffs\n\n @diffs.register\n class Question(models.Model):\n question_text = models.CharField(max_length=200)\n pub_date = models.DateTimeField('date published')\n\n\n @diffs.register\n class Choice(models.Model):\n question = models.ForeignKey(Question, on_delete=models.CASCADE)\n choice_text = models.CharField(max_length=200)\n votes = models.IntegerField(default=0)\n\n def get_diff_parent(self):\n # save the db lookup\n return Question(id=self.question_id)\n\n\n question = Question.objects.create(question_text='What will happen?')\n choice = Choice.objects.create(choice_text='Nothing', question=question)\n\n choice.choice_text = 'Something'\n choice.save()\n\n # returns diffs for question and it's choices\n len(question.diffs) # 3\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/linuxlewis/django-diffs", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-diffs", "package_url": "https://pypi.org/project/django-diffs/", "platform": "", "project_url": "https://pypi.org/project/django-diffs/", "project_urls": { "Homepage": "https://github.com/linuxlewis/django-diffs" }, "release_url": "https://pypi.org/project/django-diffs/0.1.16/", "requires_dist": null, "requires_python": "", "summary": "Keep a record of diffs made to a Django model or collection of models", "version": "0.1.16" }, "last_serial": 2708517, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "103f55ae838c7f17926f6ac43641744d", "sha256": "ec2c9c99d4e5e772912072d3b6a961e4f4fb352c701cb4dfb7fac48dfe17c480" }, "downloads": -1, "filename": "django_diffs-0.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "103f55ae838c7f17926f6ac43641744d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11046, "upload_time": "2016-09-30T18:00:20", "url": "https://files.pythonhosted.org/packages/27/9a/ddcbad12a0cf594c226d8f7b08db64648ad9dc1a2eb3c373dc01f0559571/django_diffs-0.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dff904824f210d92595987dc4d6d941a", "sha256": "712a2e1af30e7e32a4db86d5c4d72d7323189025c4f4b6f77e38bdb70f84b894" }, "downloads": -1, "filename": "django_diffs-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dff904824f210d92595987dc4d6d941a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11050, "upload_time": "2016-09-30T18:20:47", "url": "https://files.pythonhosted.org/packages/3b/7e/58fb80f84c1db4660cbcb1a49b54f0140a9567598458977c77e2d76d4173/django_diffs-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "230ff219a0832cc9ef2d83f10bc48eef", "sha256": "f45c7a91485c45cdff86ec002913afca39b928336f9eafea75e7a066d9eff1a6" }, "downloads": -1, "filename": "django_diffs-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "230ff219a0832cc9ef2d83f10bc48eef", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 8304, "upload_time": "2016-09-30T17:57:23", "url": "https://files.pythonhosted.org/packages/10/4c/a471057eacd6f569ce3a8f13371ebb977e5d5218660bd96388fb36880f25/django_diffs-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "84756e7185d46f1351f2c1c6b58f1864", "sha256": "4e51ccd9af58e9adc279a306916ed0de16c02982e5f969712604cfe728e1724b" }, "downloads": -1, "filename": "django_diffs-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "84756e7185d46f1351f2c1c6b58f1864", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11048, "upload_time": "2016-09-30T18:27:39", "url": "https://files.pythonhosted.org/packages/0b/8f/eb7fae8500b68a174a89fe8c19414603b1e66232ff1089e860f292beeedf/django_diffs-0.0.2-py2.py3-none-any.whl" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "4bc75c531749023f2dacb410314e9c5e", "sha256": "f8ef6ed7dc60ca2964b0de818165d8c62ee4370d93f9cde125efd71c7ae09c9a" }, "downloads": -1, "filename": "django_diffs-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4bc75c531749023f2dacb410314e9c5e", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 15077, "upload_time": "2016-10-06T19:49:20", "url": "https://files.pythonhosted.org/packages/04/ac/40539d7e467856921eb58d7f0a7d11e6ed50480baadc6930387b4c736d07/django_diffs-0.1.0-py2.py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d0447173295ec7784f4cb6b051c698be", "sha256": "417b876f8eb5db33bdf91d31cdc129fa9c4763744cb07fc4a33b0e98c863144b" }, "downloads": -1, "filename": "django_diffs-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d0447173295ec7784f4cb6b051c698be", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 15080, "upload_time": "2016-10-06T20:07:00", "url": "https://files.pythonhosted.org/packages/0d/a0/b8db1bf7f05bab3270c23ab15df183d96b7aa65228d49ff757b100b63975/django_diffs-0.1.1-py2.py3-none-any.whl" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "ffe65d98399a9cf15bdc8ca8759e3c90", "sha256": "111782e751c621fc16ee2d5467b312450869d6dbcd0e21123afab15fea56d58a" }, "downloads": -1, "filename": "django_diffs-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ffe65d98399a9cf15bdc8ca8759e3c90", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11916, "upload_time": "2016-11-16T22:36:56", "url": "https://files.pythonhosted.org/packages/a2/da/5aa083ba66c6bb9287b23731ff7e28c36f24d4f53d84d4a8afa9539d89f4/django_diffs-0.1.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88cbd63f09d3cb4d8e9c3399be3473c3", "sha256": "addb5cb2922e67a3264382c698108d3613d0f6c73056468c9c3cd9e6a5202ce4" }, "downloads": -1, "filename": "django-diffs-0.1.10.tar.gz", "has_sig": false, "md5_digest": "88cbd63f09d3cb4d8e9c3399be3473c3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7393, "upload_time": "2016-11-16T22:36:53", "url": "https://files.pythonhosted.org/packages/1d/a1/a20e7ff8b9b03a01b7be4205a66b25150dd253d996db80e80121e54aea90/django-diffs-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "8ea546e9d67bd0e84f111a60033486ae", "sha256": "87a0f6f7946c6ae14b60478438b0d9295fe7ceafba185dc069834a61f9a22aec" }, "downloads": -1, "filename": "django_diffs-0.1.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ea546e9d67bd0e84f111a60033486ae", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11914, "upload_time": "2016-12-06T22:13:49", "url": "https://files.pythonhosted.org/packages/97/51/d68abbb926b293115ee15bb2c65f5b0f882db25023ba368b84b23da108c0/django_diffs-0.1.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf3a1927367dfb3a2bde500a7c22a20d", "sha256": "940c0dc33e854b0a5ab6c372388f1f3e95835cdac3f083c4ea8f4f1847545a9d" }, "downloads": -1, "filename": "django-diffs-0.1.11.tar.gz", "has_sig": false, "md5_digest": "bf3a1927367dfb3a2bde500a7c22a20d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7403, "upload_time": "2016-12-06T22:13:46", "url": "https://files.pythonhosted.org/packages/99/aa/b4dd7ef2b6d5fdb02092339dda58852359cb32456df75edb428c7591be08/django-diffs-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "9c87031f58bd5b3acbd8d86c222513f6", "sha256": "1e5ce1a20db3e49764e9e971910b851f0cdfc93a5fb977ff287f83b157148cea" }, "downloads": -1, "filename": "django_diffs-0.1.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c87031f58bd5b3acbd8d86c222513f6", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11965, "upload_time": "2016-12-21T18:13:45", "url": "https://files.pythonhosted.org/packages/9b/4c/6f9c49d77a0c7d603c0df39ccae311031619d7d34f9176aea1585c329735/django_diffs-0.1.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab7b57ccb95f2eca329c82e68e203e78", "sha256": "3b16960a36502a757f8ba604773464e50c781255d873ecbe67a22f04ce45026c" }, "downloads": -1, "filename": "django-diffs-0.1.12.tar.gz", "has_sig": false, "md5_digest": "ab7b57ccb95f2eca329c82e68e203e78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7451, "upload_time": "2016-12-21T18:13:43", "url": "https://files.pythonhosted.org/packages/83/2f/591aad8dcdd16925e0846758d78db0dce230a5f85282c8aca8f85ea1b020/django-diffs-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "c6754f973d28b6b813c2dd18eabce8dd", "sha256": "7b552b4d4196e809f0bed639b8fde12244bdcf4708212b37005ec17da175f986" }, "downloads": -1, "filename": "django_diffs-0.1.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6754f973d28b6b813c2dd18eabce8dd", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 11966, "upload_time": "2016-12-21T21:17:05", "url": "https://files.pythonhosted.org/packages/54/7a/5c492404b8a6c399dfe99d4ebde3bbf43650058669b040351eec20b3e4cb/django_diffs-0.1.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dbec50027c25b7c09ae7ae3cf06fd6a9", "sha256": "6607ee45b70ac4049ca1686706ef5c245800edc17824b586b7d8584d55b81469" }, "downloads": -1, "filename": "django-diffs-0.1.13.tar.gz", "has_sig": false, "md5_digest": "dbec50027c25b7c09ae7ae3cf06fd6a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7446, "upload_time": "2016-12-21T21:17:03", "url": "https://files.pythonhosted.org/packages/a8/f0/544badc1af6cccf9d74267175414ca8eac68ae0d0fa1627c0108262a9c87/django-diffs-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "71e5cf64fcae05edb51adf7a0239f563", "sha256": "3c9b4c112f7d249062763d3c5510b58b1586f01bf893aacec6bd8a6a5a66b8e1" }, "downloads": -1, "filename": "django_diffs-0.1.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "71e5cf64fcae05edb51adf7a0239f563", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12685, "upload_time": "2017-01-13T00:33:08", "url": "https://files.pythonhosted.org/packages/5f/5e/1a54abdbad869db6ce494a618f095b922ad371a9c4ff0cb9cfde0789fa6a/django_diffs-0.1.14-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a9143e67c6a6e78522a7862d1fe987f", "sha256": "b299cafa3e666a35e0f3a55ca2a3350393db2eb0bb4319a872aaeb77ba2baec3" }, "downloads": -1, "filename": "django-diffs-0.1.14.tar.gz", "has_sig": false, "md5_digest": "0a9143e67c6a6e78522a7862d1fe987f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7470, "upload_time": "2017-01-13T00:33:06", "url": "https://files.pythonhosted.org/packages/a8/ae/ce18db3f898697be96342606779903fd6f80e3348a6a302f237d78255d24/django-diffs-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "c802a95a4aa274f22b93460c3f925f80", "sha256": "5131ea56173fa5bd5f42b064572d9363d4ca818ba962019f1135d971bbe2f418" }, "downloads": -1, "filename": "django_diffs-0.1.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c802a95a4aa274f22b93460c3f925f80", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 12018, "upload_time": "2017-03-15T00:16:12", "url": "https://files.pythonhosted.org/packages/d0/09/b2f3b3c692f79d07fce57969cae85971d2a11bbfca41ff99bac251beb2f9/django_diffs-0.1.15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ced214d962dc6c4af7beacc5bcbd5d4", "sha256": "a459a71227fcf287dac3d3ed19221f3f6cfefe0e6e9be5904b35f0262dff399d" }, "downloads": -1, "filename": "django-diffs-0.1.15.tar.gz", "has_sig": false, "md5_digest": "7ced214d962dc6c4af7beacc5bcbd5d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7492, "upload_time": "2017-03-15T00:16:10", "url": "https://files.pythonhosted.org/packages/e0/cf/447d4bac41b503038dfa3677ef8ea0046ae70b9323aacd00ecf9e600529a/django-diffs-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "413f40e369808cb7263d8d4a81ed03c0", "sha256": "a2f399c21e249f9e3657c51ea3202e81947565e7dfc088c6077381973e23d899" }, "downloads": -1, "filename": "django_diffs-0.1.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "413f40e369808cb7263d8d4a81ed03c0", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 12143, "upload_time": "2017-03-15T21:11:08", "url": "https://files.pythonhosted.org/packages/0f/d0/b4db96626e1282abc609615232be7cd85935335e6e233632cb98d8bc0536/django_diffs-0.1.16-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93f04972b8079d6f396ce7a27b215b11", "sha256": "bd6ac5f643ea3ca731cc753185c49380d59641d395dee6f6e36a2f5330b706fb" }, "downloads": -1, "filename": "django-diffs-0.1.16.tar.gz", "has_sig": false, "md5_digest": "93f04972b8079d6f396ce7a27b215b11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7584, "upload_time": "2017-03-15T21:11:10", "url": "https://files.pythonhosted.org/packages/20/77/8f92e42120f64272e5ba43ade096b517b0ec0afc56e7a1fa23a67db17180/django-diffs-0.1.16.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c8238a1cf7516e119fafa5cd3edd36e7", "sha256": "a8996d57d02002e23cdafafb240d658608f4ab3028c0d13b9aeab260fdd06ae4" }, "downloads": -1, "filename": "django_diffs-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c8238a1cf7516e119fafa5cd3edd36e7", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 15100, "upload_time": "2016-10-06T20:39:28", "url": "https://files.pythonhosted.org/packages/2e/d8/9c592f4379a8120ae9a8dd089c9865e27fe4a6c69fe1fb0e9435d22e3000/django_diffs-0.1.2-py2.py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "89fda34b121b9d115dc4750dc3eca45b", "sha256": "8074d207e1cf62fd9c0810c8cd67a9ccfd0bfca0ca862bf6156bfb2656f9445a" }, "downloads": -1, "filename": "django_diffs-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "89fda34b121b9d115dc4750dc3eca45b", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 14941, "upload_time": "2016-10-06T21:06:13", "url": "https://files.pythonhosted.org/packages/81/2b/bbc0fc37d624aeb2a67a885e5f89aa6d101eb032490e2bfa6aacad000cd5/django_diffs-0.1.3-py2.py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "86d3b1433d9aaabac540de84aa5de86f", "sha256": "2e79cf7ff537f5ba3f7938d348b23b88918cc8d710f52b666156332ec2f706b2" }, "downloads": -1, "filename": "django_diffs-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "86d3b1433d9aaabac540de84aa5de86f", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 15441, "upload_time": "2016-10-07T21:36:04", "url": "https://files.pythonhosted.org/packages/ba/e2/14280cbe8a802eea27b06ff95d91977482b4fd13d45f4b16115589549ed0/django_diffs-0.1.4-py2.py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "c78385e1b1d64c4185b0348269dc0cb8", "sha256": "1fe8941ad3add0d88c783cd9090effa380075b1e965c4c134db12e272400541c" }, "downloads": -1, "filename": "django_diffs-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c78385e1b1d64c4185b0348269dc0cb8", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 16646, "upload_time": "2016-10-07T23:58:12", "url": "https://files.pythonhosted.org/packages/7f/a2/669beae572bbfac35280e1650d482a0e1db81236e2c968845ed01fe56ec7/django_diffs-0.1.5-py2.py3-none-any.whl" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "1d6a693b1d141bdd860daf2179702811", "sha256": "3e21ad27823719f6394a5f93b6074e4f2572444bff241ffa5ea170796f78db0c" }, "downloads": -1, "filename": "django_diffs-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1d6a693b1d141bdd860daf2179702811", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 16664, "upload_time": "2016-10-10T18:44:18", "url": "https://files.pythonhosted.org/packages/f2/94/65f5f03548ce7c22e72e4657483f55d61ff65eb0e74bb357b5e1c015ba8e/django_diffs-0.1.6-py2.py3-none-any.whl" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "53af0ff09586369f324d9e67812be65a", "sha256": "b562c09e4047ee113b4e7e573abc4f9bdf8f41d54589abc184da84e99b823a56" }, "downloads": -1, "filename": "django_diffs-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "53af0ff09586369f324d9e67812be65a", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 16677, "upload_time": "2016-10-19T21:41:24", "url": "https://files.pythonhosted.org/packages/b4/2a/c64fda0c584b00316272e82b59d9988692051bbd0aa66100ba061ceb3cb1/django_diffs-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9dcac307455759f89d6b12aa4d25ec5", "sha256": "21a6db6a86fd90aefc02d5467b172dc3acb72d00f150da4507265a4bfdcb4a09" }, "downloads": -1, "filename": "django-diffs-0.1.7.tar.gz", "has_sig": false, "md5_digest": "f9dcac307455759f89d6b12aa4d25ec5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9007, "upload_time": "2016-10-19T21:41:21", "url": "https://files.pythonhosted.org/packages/ab/d7/1bca589d4dd6947463d6becb801b215ef525727e76d033ce95d7dbc51e61/django-diffs-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "130b52c2d0b171ecf5c26ccc662ff1e9", "sha256": "c5f2110951dfcfd1269dcce5eece82b65f59d8c83f4cc0bcd00d0b837cf0df49" }, "downloads": -1, "filename": "django-diffs-0.1.8.tar.gz", "has_sig": false, "md5_digest": "130b52c2d0b171ecf5c26ccc662ff1e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9113, "upload_time": "2016-10-25T00:03:02", "url": "https://files.pythonhosted.org/packages/3c/5b/a480c04cf19621cecc47a856da8034326e4ca1aa07f55b7c942403771962/django-diffs-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "46ce93d0626a5f2ad5e160fa8c0b822b", "sha256": "d532bff518492a5ded574cb610f95bfda8e7c538275b181e01bab604d68a03bc" }, "downloads": -1, "filename": "django_diffs-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "46ce93d0626a5f2ad5e160fa8c0b822b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12545, "upload_time": "2016-11-09T20:39:45", "url": "https://files.pythonhosted.org/packages/86/d6/77b9c2204b1276dbedfe150b820143e63bb3ee93b628642c79662f69c17f/django_diffs-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "811f717570edee3508cdd9b59936a424", "sha256": "a999d0cba10e2730ab041cf9128909d94176391a45aacbe0a3775fcd929c281d" }, "downloads": -1, "filename": "django-diffs-0.1.9.tar.gz", "has_sig": false, "md5_digest": "811f717570edee3508cdd9b59936a424", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7388, "upload_time": "2016-11-09T20:39:42", "url": "https://files.pythonhosted.org/packages/82/4b/1b4943a8e09c2d7f533709b4ee1f2f9c4ff5007d0c579bd43f497521f6a9/django-diffs-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "413f40e369808cb7263d8d4a81ed03c0", "sha256": "a2f399c21e249f9e3657c51ea3202e81947565e7dfc088c6077381973e23d899" }, "downloads": -1, "filename": "django_diffs-0.1.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "413f40e369808cb7263d8d4a81ed03c0", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 12143, "upload_time": "2017-03-15T21:11:08", "url": "https://files.pythonhosted.org/packages/0f/d0/b4db96626e1282abc609615232be7cd85935335e6e233632cb98d8bc0536/django_diffs-0.1.16-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93f04972b8079d6f396ce7a27b215b11", "sha256": "bd6ac5f643ea3ca731cc753185c49380d59641d395dee6f6e36a2f5330b706fb" }, "downloads": -1, "filename": "django-diffs-0.1.16.tar.gz", "has_sig": false, "md5_digest": "93f04972b8079d6f396ce7a27b215b11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7584, "upload_time": "2017-03-15T21:11:10", "url": "https://files.pythonhosted.org/packages/20/77/8f92e42120f64272e5ba43ade096b517b0ec0afc56e7a1fa23a67db17180/django-diffs-0.1.16.tar.gz" } ] }