{ "info": { "author": "django-notifications team", "author_email": "yang@yangyubo.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.7", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Utilities" ], "description": "``django-notifications`` Documentation\n=======================================\n\n\n|build-status| |coveralls|\n\n`django-notifications `_ is a GitHub notification alike app for Django, it was derived from `django-activity-stream `_\n\nThe major difference between ``django-notifications`` and ``django-activity-stream``:\n\n* ``django-notifications`` is for building something like Github \"Notifications\"\n* While ``django-activity-stream`` is for building Github \"News Feed\"\n\nNotifications are actually actions events, which are categorized by four main components.\n\n* ``Actor``. The object that performed the activity.\n* ``Verb``. The verb phrase that identifies the action of the activity.\n* ``Action Object``. *(Optional)* The object linked to the action itself.\n* ``Target``. *(Optional)* The object to which the activity was performed.\n\n``Actor``, ``Action Object`` and ``Target`` are ``GenericForeignKeys`` to any arbitrary Django object.\nAn action is a description of an action that was performed (``Verb``) at some instant in time by some ``Actor`` on some optional ``Target`` that results in an ``Action Object`` getting created/updated/deleted.\n\nFor example: `justquick `_ ``(actor)`` *closed* ``(verb)`` `issue 2 `_ ``(action_object)`` on `activity-stream `_ ``(target)`` 12 hours ago\n\nNomenclature of this specification is based on the Activity Streams Spec: ``_\n\nRequirements\n============\n\n- Python 2.7, 3.4, 3.5, 3.6\n- Django 1.7, 1.8, 1.9, 1.10, 1.11, 2.0\n\nInstallation\n============\n\nInstallation is easy using ``pip`` and will install all required libraries.\n\n::\n\n $ pip install django-notifications-hq\n\nor get it from source\n\n::\n\n $ git clone https://github.com/django-notifications/django-notifications\n $ cd django-notifications\n $ python setup.py sdist\n $ pip install dist/django-notifications-hq*a\n\nNote that `django-model-utils `_ will be installed: this is required for the pass-through QuerySet manager.\n\nThen to add the Django Notifications to your project add the app ``notifications`` to your ``INSTALLED_APPS`` and urlconf.\n\nThe app should go somewhere after all the apps that are going to be generating notifications like ``django.contrib.auth``\n\n::\n\n INSTALLED_APPS = (\n 'django.contrib.auth',\n ...\n 'notifications',\n ...\n )\n\nAdd the notifications urls to your urlconf::\n\n import notifications.urls\n\n urlpatterns = [\n ...\n url('^inbox/notifications/', include(notifications.urls, namespace='notifications')),\n ...\n ]\n\nThe method of installing these urls, importing rather than using ``'notifications.urls'``, is required to ensure that the urls are installed in the ``notifications`` namespace.\n\nTo run schema migration, execute ``python manage.py migrate notifications``.\n\nGenerating Notifications\n=========================\n\nGenerating notifications is probably best done in a separate signal.\n\n::\n\n from django.db.models.signals import post_save\n from notifications.signals import notify\n from myapp.models import MyModel\n\n def my_handler(sender, instance, created, **kwargs):\n notify.send(instance, verb='was saved')\n\n post_save.connect(my_handler, sender=MyModel)\n\nTo generate an notification anywhere in your code, simply import the notify signal and send it with your actor, recipient, and verb.\n\n::\n\n from notifications.signals import notify\n\n notify.send(user, recipient=user, verb='you reached level 10')\n\nThe complete syntax is.\n\n::\n\n notify.send(actor, recipient, verb, action_object, target, level, description, public, timestamp, **kwargs)\n\nArguments:\n * **actor**: An object of any type. (Required) Note: Use **sender** instead of **actor** if you intend to use keyword arguments\n * **recipient**: A **Group** or a **User QuerySet** or a list of **User**. (Required)\n * **verb**: An string. (Required)\n * **action_object**: An object of any type. (Optional)\n * **target**: An object of any type. (Optional)\n * **level**: One of Notification.LEVELS ('success', 'info', 'warning', 'error') (default=info). (Optional)\n * **description**: An string. (Optional)\n * **public**: An boolean (default=True). (Optional)\n * **timestamp**: An tzinfo (default=timezone.now()). (Optional)\n\nExtra data\n----------\n\nYou can attach arbitrary data to your notifications by doing the following:\n\n* Add to your settings.py: ``DJANGO_NOTIFICATIONS_CONFIG = { 'USE_JSONFIELD': True}``\n\nThen, any extra arguments you pass to ``notify.send(...)`` will be attached to the ``.data`` attribute of the notification object.\nThese will be serialised using the JSONField's serialiser, so you may need to take that into account: using only objects that will be serialised is a good idea.\n\nSoft delete\n-----------\n\nBy default, ``delete/(?P\\d+)/`` deletes specified notification record from DB.\nYou can change this behaviour to \"mark ``Notification.deleted`` field as ``True``\" by:\n\n* Add to your settings.py: ``DJANGO_NOTIFICATIONS_CONFIG = { 'SOFT_DELETE': True}``\n\nWith this option, QuerySet methods ``unread`` and ``read`` contain one more filter: ``deleted=False``.\nMeanwhile, QuerySet methods ``deleted``, ``active``, ``mark_all_as_deleted``, ``mark_all_as_active`` are turned on.\nSee more details in QuerySet methods section.\n\nAPI\n====\n\nQuerySet methods\n-----------------\n\nUsing ``django-model-utils``, we get the ability to add queryset methods to not only the manager, but to all querysets that will be used, including related objects. This enables us to do things like::\n\n Notification.objects.unread()\n\nwhich returns all unread notifications. To do this for a single user, we can do::\n\n user = User.objects.get(pk=pk)\n user.notifications.unread()\n\nThere are some other QuerySet methods, too.\n\n``qs.unsent()``\n~~~~~~~~~~~~~~~\n\nReturn all of the unsent notifications, filtering the current queryset. (emailed=False)\n\n``qs.sent()``\n~~~~~~~~~~~~~~~\n\nReturn all of the sent notifications, filtering the current queryset. (emailed=True)\n\n``qs.unread()``\n~~~~~~~~~~~~~~~\n\nReturn all of the unread notifications, filtering the current queryset.\nWhen ``SOFT_DELETE=True``, this filter contains ``deleted=False``.\n\n``qs.read()``\n~~~~~~~~~~~~~~~\n\nReturn all of the read notifications, filtering the current queryset.\nWhen ``SOFT_DELETE=True``, this filter contains ``deleted=False``.\n\n\n``qs.mark_all_as_read()`` | ``qs.mark_all_as_read(recipient)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMark all of the unread notifications in the queryset (optionally also filtered by ``recipient``) as read.\n\n\n``qs.mark_all_as_unread()`` | ``qs.mark_all_as_unread(recipient)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMark all of the read notifications in the queryset (optionally also filtered by ``recipient``) as unread.\n\n``qs.mark_as_sent()`` | ``qs.mark_as_sent(recipient)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMark all of the unsent notifications in the queryset (optionally also filtered by ``recipient``) as sent.\n\n\n``qs.mark_as_unsent()`` | ``qs.mark_as_unsent(recipient)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMark all of the sent notifications in the queryset (optionally also filtered by ``recipient``) as unsent.\n\n``qs.deleted()``\n~~~~~~~~~~~~~~~~\n\nReturn all notifications that have ``deleted=True``, filtering the current queryset.\nMust be used with ``SOFT_DELETE=True``.\n\n``qs.active()``\n~~~~~~~~~~~~~~~\n\nReturn all notifications that have ``deleted=False``, filtering the current queryset.\nMust be used with ``DELETE=True``.\n\n``qs.mark_all_as_deleted()`` | ``qs.mark_all_as_deleted(recipient)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMark all notifications in the queryset (optionally also filtered by ``recipient``) as ``deleted=True``.\nMust be used with ``DELETE=True``.\n\n``qs.mark_all_as_active()`` | ``qs.mark_all_as_active(recipient)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMark all notifications in the queryset (optionally also filtered by ``recipient``) as ``deleted=False``.\nMust be used with ``SOFT_DELETE=True``.\n\n\nModel methods\n-------------\n\n``obj.timesince([datetime])``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA wrapper for Django's ``timesince`` function.\n\n``obj.mark_as_read()``\n~~~~~~~~~~~~~~~~~~~~~~\n\nMark the current object as read.\n\n\nTemplate tags\n-------------\n\nPut `{% load notifications_tags %}` in the template before you actually use notification tags.\n\n\n``notifications_unread``\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n {% notifications_unread %}\n\nGive the number of unread notifications for a user, or nothing (an empty string) for an anonymous user.\n\nStoring the count in a variable for further processing is advised, such as::\n\n {% notifications_unread as unread_count %}\n ...\n {% if unread_count %}\n You have {{ unread_count }} unread notifications.\n {% endif %}\n\nLive-updater API\n================\n\nTo ensure users always have the most up-to-date notifications, `django-notifications` includes a simple javascript API\nfor updating specific fields within a django template.\n\nThere are two possible API calls that can be made:\n\n1. ``api/unread_count/`` that returns a javascript object with 1 key: ``unread_count`` eg::\n\n {\"unread_count\":1}\n\n#. ``api/unread_list/`` that returns a javascript object with 2 keys: `unread_count` and `unread_list` eg::\n\n {\n \"unread_count\":1,\n \"unread_list\":[--list of json representations of notifications--]\n }\n\n Representations of notifications are based on the django method: ``model_to_dict``\n\n Query string arguments:\n\n - **max** - maximum length of unread list.\n - **mark_as_read** - mark notification in list as read.\n\n For example, get ``api/unread_list/?max=3&mark_as_read=true`` returns 3 notifications and mark them read (remove from list on next request).\n\n\nHow to use:\n-----------\n\n1. Put ``{% load notifications_tags %}`` in the template before you actually use notification tags.\n2. In the area where you are loading javascript resources add the following tags in the order below::\n\n \n {% register_notify_callbacks callbacks='fill_notification_list,fill_notification_badge' %}\n\n ``register_notify_callbacks`` takes the following arguments:\n\n 1. ``badge_class`` (default ``live_notify_badge``) - The identifier `class` of the element to show the unread count, that will be periodically updated.\n #. ``menu_class`` (default ``live_notify_list``) - The identifier `class` of the element to insert a list of unread items, that will be periodically updated.\n #. ``refresh_period`` (default ``15``) - How often to fetch unread items from the server (integer in seconds).\n #. ``fetch`` (default ``5``) - How many notifications to fetch each time.\n #. ``callbacks`` (default ````) - A comma-separated list of javascript functions to call each period.\n #. ``api_name`` (default ``list``) - The name of the API to call (this can be either ``list`` or ``count``).\n\n3. To insert a live-updating unread count, use the following template::\n\n {% live_notify_badge %}\n\n ``live_notify_badge`` takes the following arguments:\n\n 1. ``badge_class`` (default ``live_notify_badge``) - The identifier ``class`` for the ```` element that will be created to show the unread count.\n\n4. To insert a live-updating unread list, use the following template::\n\n {% live_notify_list %}\n\n ``live_notify_list`` takes the following arguments:\n\n 1. ``list_class`` (default ``live_notify_list``) - The identifier ``class`` for the ``
    `` element that will be created to insert the list of notifications into.\n\nUsing the live-updater with bootstrap\n-------------------------------------\n\nThe Live-updater can be incorporated into bootstrap with minimal code.\n\nTo create a live-updating bootstrap badge containing the unread count, simply use the template tag::\n\n {% live_notify_badge badge_class=\"badge\" %}\n\nTo create a live-updating bootstrap dropdown menu containing a selection of recent unread notifications, simply use the template tag::\n\n {% live_notify_list list_class=\"dropdown-menu\" %}\n\nCustomising the display of notifications using javascript callbacks\n-------------------------------------------------------------------\n\nWhile the live notifier for unread counts should suit most use cases, users may wish to alter how\nunread notifications are shown.\n\nThe ``callbacks`` argument of the ``register_notify_callbacks`` dictates which javascript functions are called when\nthe unread api call is made.\n\nTo add a custom javascript callback, simply add this to the list, like so::\n\n {% register_notify_callbacks callbacks='fill_notification_badge,my_special_notification_callback' %}\n\nThe above would cause the callback to update the unread count badge, and would call the custom function `my_special_notification_callback`.\nAll callback functions are passed a single argument by convention called `data`, which contains the entire result from the API.\n\nFor example, the below function would get the recent list of unread messages and log them to the console::\n\n function my_special_notification_callback(data) {\n for (var i=0; i < data.unread_list.length; i++) {\n msg = data.unread_list[i];\n console.log(msg);\n }\n }\n\nTesting the live-updater\n------------------------\n\n1. Clone the repo\n2. Run `./manage.py runserver`\n3. Browse to `yourserverip/test/`\n4. Click 'Make a notification' and a new notification should appear in the list in 5-10 seconds.\n\nSerializing the django-notifications Model\n==========================================\n\nSee here - http://www.django-rest-framework.org/api-guide/relations/#generic-relationships\n\nIn this example the target object can be of type Foo or Bar and the appropriate serializer will be used.\n\n::\n\n class GenericNotificationRelatedField(serializers.RelatedField):\n\n def to_representation(self, value):\n if isinstance(value, Foo):\n serializer = FooSerializer(value)\n if isinstance(value, Bar):\n serializer = BarSerializer(value)\n\n return serializer.data\n\n\n class NotificationSerializer(serializers.Serializer):\n recipient = PublicUserSerializer(User, read_only=True)\n unread = serializers.BooleanField(read_only=True)\n target = GenericNotificationRelatedField(read_only=True)\n\nThanks to @DaWy\n\nNotes\n=====\n\nEmail Notification\n------------------\n\nSending email to users has not been integrated into this library. So for now you need to implement it if needed. There is a reserved field `Notification.emailed` to make it easier.\n\n\n``django-notifications`` Team\n==============================\n\nCore contributors (in alphabetical order):\n\n- `Alvaro Leonel `_\n- `Samuel Spencer `_\n- `Yang Yubo `_\n- `Zhongyuan Zhang `_\n\n.. |build-status| image:: https://travis-ci.org/django-notifications/django-notifications.svg\n :target: https://travis-ci.org/django-notifications/django-notifications\n\n.. |coveralls| image:: https://coveralls.io/repos/django-notifications/django-notifications/badge.png?branch=master\n :alt: Code coverage on coveralls\n :scale: 100%\n :target: https://coveralls.io/r/django-notifications/django-notifications?branch=master\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/django-notifications/django-notifications", "keywords": "django notifications github action event stream", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-notifications-hq", "package_url": "https://pypi.org/project/django-notifications-hq/", "platform": "", "project_url": "https://pypi.org/project/django-notifications-hq/", "project_urls": { "Homepage": "http://github.com/django-notifications/django-notifications" }, "release_url": "https://pypi.org/project/django-notifications-hq/1.5.0/", "requires_dist": [ "django-model-utils (>=2.0.3)", "django (>=1.7)", "jsonfield (>=1.0.3)", "pytz" ], "requires_python": "", "summary": "GitHub notifications alike app for Django.", "version": "1.5.0" }, "last_serial": 4041417, "releases": { "0.5.5": [ { "comment_text": "", "digests": { "md5": "0379b49e7e9b101fa63331cb65258a83", "sha256": "584dc65a1be726650f18b87c7738599fa2cde62ed21d05a50cdf3aecf3813fb3" }, "downloads": -1, "filename": "django-notifications-hq-0.5.5.tar.gz", "has_sig": false, "md5_digest": "0379b49e7e9b101fa63331cb65258a83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12239, "upload_time": "2012-10-25T04:49:00", "url": "https://files.pythonhosted.org/packages/b0/52/de446d946bea3cbf8946dd8419a755d230489df21f4e7cb4d295f3a75d28/django-notifications-hq-0.5.5.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "a9f5eeee48eb35040874b8887b4e5780", "sha256": "85bf796cda440a132e6ba0e25b886f59ffd5619ac9b0e35a5c5b894212d3aafe" }, "downloads": -1, "filename": "django-notifications-hq-0.6.0.tar.gz", "has_sig": false, "md5_digest": "a9f5eeee48eb35040874b8887b4e5780", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10871, "upload_time": "2013-03-06T01:55:59", "url": "https://files.pythonhosted.org/packages/a2/28/114795f2f1582ee032cb0242b75c9b1fd6ad683d2963e31171b603ea5cda/django-notifications-hq-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "c169e920f690d7f2c08417702fd8a1e4", "sha256": "a881c838be1ff7fc66f8f54b9736473e3cf4c3989da3eda313ecf533c6fbbf4d" }, "downloads": -1, "filename": "django-notifications-hq-0.6.1.tar.gz", "has_sig": false, "md5_digest": "c169e920f690d7f2c08417702fd8a1e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11144, "upload_time": "2014-05-07T02:01:30", "url": "https://files.pythonhosted.org/packages/92/5f/1eb6d59c5c1ff1964e90a2275ffb843da5e5fd47fee906281957193b943c/django-notifications-hq-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "d180997a2681c07436a935ded31621e2", "sha256": "59a191f61ca2605b75c11067ac7958d49e38c60f5b88fcbc1872316132a912bb" }, "downloads": -1, "filename": "django-notifications-hq-0.6.2.tar.gz", "has_sig": false, "md5_digest": "d180997a2681c07436a935ded31621e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11512, "upload_time": "2014-05-07T02:56:07", "url": "https://files.pythonhosted.org/packages/d7/4e/aa202f50128ce5ee4dcad89e6768144fcd8818035f20438168446eb12441/django-notifications-hq-0.6.2.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "3ab6fdfbf6449378ecb17e54014b0df2", "sha256": "8a465413b226ef148cd0d738e2de732cd9aa8ce84b7d102730da4e727a2d0d62" }, "downloads": -1, "filename": "django-notifications-hq-0.7.0.tar.gz", "has_sig": false, "md5_digest": "3ab6fdfbf6449378ecb17e54014b0df2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16228, "upload_time": "2015-04-21T02:22:37", "url": "https://files.pythonhosted.org/packages/dd/cb/b3b04c10e40b1c4073041860e6547eafdd87df5d01fa9ce7ffcb4f133249/django-notifications-hq-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "194aff37208244dc7f8fe4cec1efbae5", "sha256": "0ece8575f10761c25ae1fba9bade1e08499ab4d3dc87f5e35957c70f5f7a4f46" }, "downloads": -1, "filename": "django-notifications-hq-0.7.1.tar.gz", "has_sig": false, "md5_digest": "194aff37208244dc7f8fe4cec1efbae5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20501, "upload_time": "2015-10-20T02:17:48", "url": "https://files.pythonhosted.org/packages/95/2e/830942cbbb4fe5ff6e3f6e521c9f15eebae53ccab5e68f33e8097a8d04a8/django-notifications-hq-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "f25b791470d7d347d79a4e851d81feb7", "sha256": "b9d7d8bde51c8b171f8a0d9a2e9efa8e2bfcb5e948d479b9b83c0b0549ac60ba" }, "downloads": -1, "filename": "django-notifications-hq-0.8.0.tar.gz", "has_sig": false, "md5_digest": "f25b791470d7d347d79a4e851d81feb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21589, "upload_time": "2015-12-14T03:35:33", "url": "https://files.pythonhosted.org/packages/71/40/ddd3eefd57b2f8fd6011007a41172b034f6ad4438e051e82b37a5323150a/django-notifications-hq-0.8.0.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "bf9ff773c8aaf238853d7a4e31da1e80", "sha256": "71a7bae850ae1d58afc12f435ce7a0627afe18dbdf8db71ca8e08e5856825b7e" }, "downloads": -1, "filename": "django-notifications-hq-1.0.tar.gz", "has_sig": false, "md5_digest": "bf9ff773c8aaf238853d7a4e31da1e80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24068, "upload_time": "2016-01-04T03:33:20", "url": "https://files.pythonhosted.org/packages/ec/6c/c8bc7c9f1809999ccfbe47c81ff00e68f466233a21fe514a72972122b4f4/django-notifications-hq-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "4cc7f2677ec21a03cc7669babdbc6e46", "sha256": "8ff3f8d9c212ef2846babb1c25e7b59bd410b88438e4c017f991172bbdd20a96" }, "downloads": -1, "filename": "django-notifications-hq-1.1.tar.gz", "has_sig": false, "md5_digest": "4cc7f2677ec21a03cc7669babdbc6e46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24383, "upload_time": "2016-03-29T01:07:29", "url": "https://files.pythonhosted.org/packages/81/40/cae76be9e7d2d886853c94e32e663b06d34bf81bff05f22ee45e62c34563/django-notifications-hq-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "6d3d904b1b048e5cbae7719428740de5", "sha256": "4a7afdc506a15aad89434fb9fd41b611ba2a75bc0f5ba15179b5998c5181a703" }, "downloads": -1, "filename": "django-notifications-hq-1.2.tar.gz", "has_sig": false, "md5_digest": "6d3d904b1b048e5cbae7719428740de5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24727, "upload_time": "2016-06-17T03:18:06", "url": "https://files.pythonhosted.org/packages/22/6f/a491a1e612ebdaff4402abbc8d3ae69bf154fdae52a2dc9308e1d304d29f/django-notifications-hq-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "4fd7d7324ffa402fe6e6054001179e6d", "sha256": "e9b6bf9d62cb5b0058a162467380f6d9949e9f4206af9731c83f84014ccc4580" }, "downloads": -1, "filename": "django_notifications_hq-1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4fd7d7324ffa402fe6e6054001179e6d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25014, "upload_time": "2017-06-26T12:21:51", "url": "https://files.pythonhosted.org/packages/49/fd/7756dd010768ef4159949fe145f507ddeb3dcafc941a8df843e3b9e4d071/django_notifications_hq-1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7537f10a95abadd8468b0140c5d8b1ff", "sha256": "29ce314f405bc03e642108ff55530db517e06e9b441439a368e053d539181270" }, "downloads": -1, "filename": "django-notifications-hq-1.3.tar.gz", "has_sig": false, "md5_digest": "7537f10a95abadd8468b0140c5d8b1ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26792, "upload_time": "2017-06-26T12:21:53", "url": "https://files.pythonhosted.org/packages/7c/1d/aa8b1bd776af36883e23cbb3e9fef60ae9016e7896c3839cc89ab1c68a91/django-notifications-hq-1.3.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "9489db6a254beff99c784cc30c30fc72", "sha256": "bbf1fbc7c7accfe79c1cf2da5fde96cd3e27e22d27108e6f368a91b26ef75450" }, "downloads": -1, "filename": "django-notifications-hq-1.4.0.tar.gz", "has_sig": false, "md5_digest": "9489db6a254beff99c784cc30c30fc72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26072, "upload_time": "2018-05-27T01:29:21", "url": "https://files.pythonhosted.org/packages/0c/f1/f4e597f34a62439e14bfc991c919ba2ef729cc01de6fd29c5fd2660d90f8/django-notifications-hq-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "a72586b43d654e82522558d045281109", "sha256": "0332f10d10135301587b2bec9b69984c5484354b1365728939c1f2d8b33a9b16" }, "downloads": -1, "filename": "django_notifications_hq-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a72586b43d654e82522558d045281109", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27226, "upload_time": "2018-07-08T20:17:35", "url": "https://files.pythonhosted.org/packages/d5/77/e4656cf884593c8e8e046e8dc4b3eb380a7dbfa016f1fcf96832a63b0525/django_notifications_hq-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a74a382c812a4fac8a92fcbe506164e", "sha256": "8ed19d2172876d8821e3e3ecf842323bfa09c5a6f9312995bfc9d01708b926e3" }, "downloads": -1, "filename": "django-notifications-hq-1.5.0.tar.gz", "has_sig": false, "md5_digest": "5a74a382c812a4fac8a92fcbe506164e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28748, "upload_time": "2018-07-08T20:17:37", "url": "https://files.pythonhosted.org/packages/58/c0/b9f3ea10b82e020142af212779515cdd110ed023c492e9c0432b7e146ed1/django-notifications-hq-1.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a72586b43d654e82522558d045281109", "sha256": "0332f10d10135301587b2bec9b69984c5484354b1365728939c1f2d8b33a9b16" }, "downloads": -1, "filename": "django_notifications_hq-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a72586b43d654e82522558d045281109", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27226, "upload_time": "2018-07-08T20:17:35", "url": "https://files.pythonhosted.org/packages/d5/77/e4656cf884593c8e8e046e8dc4b3eb380a7dbfa016f1fcf96832a63b0525/django_notifications_hq-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a74a382c812a4fac8a92fcbe506164e", "sha256": "8ed19d2172876d8821e3e3ecf842323bfa09c5a6f9312995bfc9d01708b926e3" }, "downloads": -1, "filename": "django-notifications-hq-1.5.0.tar.gz", "has_sig": false, "md5_digest": "5a74a382c812a4fac8a92fcbe506164e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28748, "upload_time": "2018-07-08T20:17:37", "url": "https://files.pythonhosted.org/packages/58/c0/b9f3ea10b82e020142af212779515cdd110ed023c492e9c0432b7e146ed1/django-notifications-hq-1.5.0.tar.gz" } ] }