{ "info": { "author": "Pawel Krzyzaniak", "author_email": "pawelk@ro.co", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP" ], "description": "universal\\_notifications\n========================\n|travis|_ |pypi|_ |codecov|_ |requiresio|_\n\n**High-level framework for notifications**\n\nThis project is intended to provide a convenient way to send notifications using multiple\nnotification backends (e.g., e-mail, SMS, push).\n\n--------------\n\nSetting up\n----------\n\nTo start using **universal\\_notifications** please add ``universal_notifications`` to\n``INSTALLED_APPS`` in your Django project, and then migrate the app:\n``./manage.py migrate universal_notifications``.\n\nIf you intend to use any other type of notification than WS, then UNIVERSAL_NOTIFICATIONS_CATEGORIES\nmust be defined (see `Unsubscriber`_)\n\nBasic usage\n-----------\n- `WebSocket notifications`_\n- `E-mail notifications`_\n- `SMS notifications`_\n- `Push notifications`_\n- `Unsubscriber`_\n- `Unsubscriber API`_\n- `FakeEmailSend view`_\n- `Notification history`_\n\nWebSocket notifications\n~~~~~~~~~~~~~~~~~~~~~~~\n\nTo have Universal Notifications receive WS notifications (ie. to mark notification as received)\nadd to your settings.py:\n\n::\n\n WS4REDIS_SUBSCRIBER = 'universal_notifications.backends.websockets.RedisSignalSubscriber'\n\nUpon receiving a WS, \"ws_received\" signal will be emitted with json data received in the message, and all emails\nsubscribed to that channel. Sample usage:\n\n.. code:: python\n\n from universal_notifications.signals import ws_received\n\n def your_handler(sender, message_data, channel_emails, **kwargs):\n pass\n ws_received.connect(your_handler)\n\nSimple example of using WS notifications:\n\n.. code:: python\n\n class OrderShippedWS(WSNotification):\n message = 'order_shipped'\n serializer_class = OrderSerializer\n\n # ... somewhere in a view\n OrderShippedWS(item=order, receivers=[user], context={}).send()\n\nE-mail notifications\n~~~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n class OrderShippedEmail(EmailNotification):\n email_name = 'order_shipped'\n email_subject = _('Order no. {{item.pk}} has been shipped.')\n categories = [\"newsletter\"]\n sendgrid_asm = {\n \"group_id\": 1\n }\n use_premailer = False # disable Premailer for this email\n\n # ... somewhere in a view\n OrderShippedEmail(item=order, receivers=[user], context={}, attachments=[\n (\"invoice.pdf\", open(\"invoice.pdf\").read(), \"application/pdf\")\n ]).send()\n\nAttachements parameter has to be a list of `(filename, content, mime_type)` triples.\n**categories**, **sendgrid_asm**, **use_premailer** fields are optional, they can be used with `django-sendgrid `_ to enable metrics by category and unsubscribe groups.\n\nEmail subject will be taken from the `` tags in the template if it is not set in notification class.\n\nSettings\n * UNIVERSAL_NOTIFICATIONS_IS_SECURE (bool, default: False) - set https protocol and `is_secure` variable\n * UNIVERSAL_NOTIFICATIONS_USE_PREMAILER (bool, default: True) - use premailer to append CSS styles inline (speedup tests a lot when False)\n\n\nSMS notifications\n~~~~~~~~~~~~~~~~~\n\nSupported platforms:\n * `Twilio `_ - default engine\n * `AmazonSNS `_\n\nSettings\n * UNIVERSAL_NOTIFICATIONS_SMS_ENGINE - set engine\n * UNIVERSAL_NOTIFICATIONS_VALIDATE_MOBILE (bool)\n * UNIVERSAL_NOTIFICATIONS_SMS_SEND_IN_TASK (bool, default True)\n\nEngine settinsgs:\n * Twilio\n * UNIVERSAL_NOTIFICATIONS_TWILIO_API_ENABLED (bool)\n * UNIVERSAL_NOTIFICATIONS_TWILIO_ENABLE_PROXY (bool)\n * UNIVERSAL_NOTIFICATIONS_TWILIO_ACCOUNT (string)\n * UNIVERSAL_NOTIFICATIONS_TWILIO_TOKEN (string)\n * UNIVERSAL_NOTIFICATIONS_TWILIO_REPORT_ERRORS (list of integers)\n * Amazon SNS\n * UNIVERSAL_NOTIFICATIONS_AMAZON_SNS_API_ENABLED (bool)\n * AWS_ACCESS_KEY_ID (string)\n * AWS_SECRET_ACCESS_KEY (string)\n * AWS_DEFAULT_REGION (string) - default us-east-1\n\n\nSimple example of use:\n\n.. code:: python\n\n class OrderShippedSMS(SMSNotification):\n message = _('{{receiver.first_name}}, order no. {{item.pk}} has been shipped.')\n\n def prepare_receivers(self):\n return {x.shipping_address.phone for x in self.receivers}\n\n class SyncOrderShippedSMS(OrderShippedSMS):\n send_async = False # by default taken from UNIVERSAL_NOTIFICATIONS_SMS_SEND_IN_TASK\n\n # ... somewhere in a view\n OrderShippedSMS(item=order, receivers=[user], context={}).send(\n\nPush notifications\n~~~~~~~~~~~~~~~~~~\n\nFirst of all, to use push notifications, you must provide a list of available **devices** linked to users.\nFor more information, please check out\n`sources `_.\n\nSupported platforms:\n * `FCM `_ - Android, iOS, Web\n * `GCM `_ - Android, iOS, Web\n * `APNS `_ - iOS\n\nTo make push notifications work on all supported platforms, a few properties need to be set:\n * UNIVERSAL_NOTIFICATIONS_MOBILE_APPS[app_id]\n * APNS_CERTIFICATE - APNS certificate file (.pem)\n * FCM_API_KEY - Firebase API key\n * GCM_API_KEY - Google Cloud Messaging API key\n * GCM_POST_URL - Google Cloud Messaging post url\n\nSettings related to Apple Push Notification service:\n * APNS_HOST\n * APNS_PORT\n * APNS_FEEDBACK_HOST\n * APNS_FEEDBACK_PORT\n * APNS_ERROR_TIMEOUT\n * APNS_MAX_NOTIFICATION_SIZE\n\nSimple example of use:\n\n.. code:: python\n\n class OrderShippedPush(PushNotification):\n title = _('Order no. {{item.pk}} has been shipped.')\n description = _('This can also use {{item.pk}}') # optional\n\n # ... somewhere in a view\n OrderShippedPush(item=order, receivers=[user], context={}).send()\n\n.. _WebSocket notifications: #websocket-notifications\n.. _E-mail notifications: #e-mail-notifications\n.. _SMS notifications: #sms-notifications\n.. _Push notifications: #push-notifications\n.. _SMSAPI: https://github.com/smsapi/smsapi-python-client\n\n.. |travis| image:: https://secure.travis-ci.org/HealthByRo/universal_notifications.svg?branch=master\n.. _travis: http://travis-ci.org/HealthByRo/universal_notifications?branch=master\n\n.. |pypi| image:: https://img.shields.io/pypi/v/universal_notifications.svg\n.. _pypi: https://pypi.python.org/pypi/universal_notifications\n\n.. |codecov| image:: https://img.shields.io/codecov/c/github/HealthByRo/universal_notifications/master.svg\n.. _codecov: http://codecov.io/github/HealthByRo/universal_notifications?branch=master\n\n.. |requiresio| image:: https://requires.io/github/HealthByRo/universal_notifications/requirements.svg?branch=requires-io-master\n.. _requiresio: https://requires.io/github/HealthByRo/universal_notifications/requirements/?branch=requires-io-master\n\nUnsubscriber\n~~~~~~~~~~~~\n\nThis section refers to all notifications except WebSockets, which by default are not prone to unsubscriptions\n(however this can be changed by setting check_subscription to True).\n\nEach category for each type must be explicitly declared in config (with label). If it is not there, exception\nwill be raised on attempt to send such notification. This requirement is to prevent situation, that notification\nof given type is send to user who would not wish to receive it, but cannot unsubscribe from it (since it is not\npresent in the config).\n\nSince categories can be changed with configuration, labels should be specified for them, since they can't be\nhardcoded in client's app.\n\nThere is one special category: \"system\". This category should not be declared in configuration, and notification\nwith such category will always pass.\n\nSample configuration:\n\n.. code:: python\n\n UNIVERSAL_NOTIFICATIONS_CATEGORIES={\n \"push\": {\n \"default\": _(\"This is a label for default category you'll send to FE\"),\n \"chat\": _('Category for chat messages'),\n \"promotions\": _('Promotions',)\n },\n \"email\": {\n \"default\": _(\"This is a label for default category you'll send to FE\"),\n \"chat\": _('Category for chat messages'),\n \"newsletter\": _('Newsletter',)\n },\n \"sms\": {\n \"default\": _(\"This is a label for default category you'll send to FE\"),\n \"chat\": _('Category for chat messages'),\n \"newsletter\": _('Newsletter',)\n },\n \"test\": {\n \"default\": _(\"This is a label for default category you'll send to FE\"),\n },\n },\n\nIf you want to allow different types of users to have different categories of notifications, you can\ndo it with configuration:\n\n.. code:: python\n\n # not required. If defined, specific types of users will only get notifications from allowed categories.\n # requires a bit more configuration - helper function to check if notification category is allowed for user\n UNIVERSAL_NOTIFICATIONS_USER_CATEGORIES_MAPPING={\n \"for_admin\": {\n \"push\": [\"default\", \"chat\", \"promotions\"],\n \"email\": [\"default\", \"chat\", \"newsletter\"],\n \"sms\": [\"default\", \"chat\", \"newsletter\"]\n },\n \"for_user\": {\n \"push\": [\"default\", \"chat\", \"promotions\"],\n \"email\": [\"default\", \"newsletter\"], # chat skipped\n \"sms\": [\"default\", \"chat\", \"newsletter\"]\n }\n },\n # path to the file we will import user definitions for UNIVERSAL_NOTIFICATIONS_USER_CATEGORIES_MAPPING\n UNIVERSAL_NOTIFICATIONS_USER_DEFINITIONS_FILE='tests.user_conf'\n\n # from file: tests/user_conf.py\n def for_admin(user):\n return user.is_superuser\n\n def for_user(user):\n return not user.is_superuser\n\nIn the example above, functions \"for_admin\" & \"for_user\" should be defined in file tests/user_conf.py. Each\nfunction takes user as a parameter, and should return either True or False.\n\nIf given notification type is not present for given user, user will neither be able to receive it nor unsubscribe it.\n\nUnsubscriber API\n~~~~~~~~~~~~~~~~\n\nThe current subscriptions can be obtained with a API described below. Please note, that API does not provide label for \"unsubscribe_from_all\", since is always present and can be hardcoded in FE module. Categories however may vary, that's why labels for them must be returned from BE.\n\n.. code:: python\n\n # GET /subscriptions\n\n return {\n \"unsubscribe_from_all\": bool, # False by default\n \"each_type_for_given_user\": {\n \"each_category_for_given_type_for_given_user\": bool, # True(default) if subscribed, False if unsubscribed\n \"unsubscribe_from_all\": bool # False by default\n }\n \"labels\": {\n \"each_type_for_given_user\": {\n \"each_category_for_given_type_for_given_user\": string,\n }\n }\n }\n\nUnsubscriptions may be edited using following API:\n\n.. code:: python\n\n # PUT /subscriptions\n\n data = {\n \"unsubscribe_from_all\": bool, # False by default\n \"each_type_for_given_user\": {\n \"each_category_for_given_type_for_given_user\": bool, # True(default) if subscribed, False if unsubscribed\n \"unsubscribe_from_all\": bool # False by default\n }\n }\n\nPlease note, that if any type/category for type is ommited, it is reseted to default value.\n\nFakeEmailSend view\n~~~~~~~~~~~~~~~~~~\n**universal_notifications.backends.emails.views.FakeEmailSend** is a view that helps testing email templates.\nTo start using it, add ``url(r'^emails/', include('universal_notifications.backends.emails.urls'))``\nto your urls.py, and specify receiver email address using ``UNIVERSAL_NOTIFICATIONS_FAKE_EMAIL_TO``.\n\nAfter that you can make a request to the new url with **template** parameter, for instance:\n``http://localhost:8000/emails/?template=reset_password``, which will send an email using\n``emails/email_reset_password.html`` as the template.\n\n\nNotification history\n~~~~~~~~~~~~~~~~~~~~\nBy default all notifications that have been sent are stored in the **NotificationHistory** object in the database, but\nthis behavior can be changed, and therefore the database will not be used to store notification history (but you will\nstill receive notification history in your app log, on the **info** level).\n\nTo disable using database, set ``UNIVERSAL_NOTIFICATIONS_HISTORY_USE_DATABASE`` to **False** (default: **True**),\nand to disable any history tracking, set ``UNIVERSAL_NOTIFICATIONS_HISTORY`` to **False** (default: **True**).\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/HealthByRo/universal_notifications", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "universal-notifications", "package_url": "https://pypi.org/project/universal-notifications/", "platform": "", "project_url": "https://pypi.org/project/universal-notifications/", "project_urls": { "Homepage": "https://github.com/HealthByRo/universal_notifications" }, "release_url": "https://pypi.org/project/universal-notifications/1.3.0/", "requires_dist": [ "djangorestframework (>=3.7)", "django-rest-swagger (>=2.1.2)", "django-websocket-redis", "redis", "premailer (>=3.1.0)", "six (>=1.10.0)", "coreapi (<3.0.0,>=2.3.1)", "django-push-notifications (<1.5.0,>=1.4.1)", "pyfcm", "phonenumbers (>=7.7.3)", "twilio (<7.0.0,>=6.0.0)", "boto3 (<2.0.0,>1.4.0)" ], "requires_python": "", "summary": "High-level framework for notifications", "version": "1.3.0" }, "last_serial": 5960385, "releases": { "0.10.0": [ { "comment_text": "", "digests": { "md5": "793c29ce2a46d31c333c3cfeabf9f2dd", "sha256": "6baf7c3c208ede034709b8aa6f1e3eee3c76fc8b0d74a2bdf9dc2f1c4f45c3e4" }, "downloads": -1, "filename": "universal_notifications-0.10.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "793c29ce2a46d31c333c3cfeabf9f2dd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 170316, "upload_time": "2017-08-29T10:04:17", "url": "https://files.pythonhosted.org/packages/bc/f2/3dc72de5bc5a33fd544de8ff67e53bb59f134d8579c0a8754b6393124a3a/universal_notifications-0.10.0-py2.py3-none-any.whl" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "bfe660b25462eb0a8de69d29fded7f6f", "sha256": "7acbca32488c352012c32b7c07eea3dd665871d8d9238129edc7a745a365c733" }, "downloads": -1, "filename": "universal_notifications-0.10.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bfe660b25462eb0a8de69d29fded7f6f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 102330, "upload_time": "2017-09-08T15:03:30", "url": "https://files.pythonhosted.org/packages/25/a7/fd7e7e44ac8e29e7544c10d88f55471638dafbd74b3c5fe6cdb116cba34f/universal_notifications-0.10.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "072ef31fdf0b724bc79818997762b569", "sha256": "7a3d21d2ca2dd571f58da64de00e4f48a47b41d86afc5a14af941f3e51f68dfa" }, "downloads": -1, "filename": "universal_notifications-0.10.1.tar.gz", "has_sig": false, "md5_digest": "072ef31fdf0b724bc79818997762b569", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34069, "upload_time": "2017-09-08T15:03:28", "url": "https://files.pythonhosted.org/packages/fb/4e/24a227315cf81820a74fd781bb9661de17ffd3ff8bc4fabc408cc628f6d1/universal_notifications-0.10.1.tar.gz" } ], "0.10.2": [ { "comment_text": "", "digests": { "md5": "1921eafab6d6d28954d9457109c719c9", "sha256": "d4981bb7530363d75c2742c3feb30d35de4511ab13d8b06205495cfdd23cf4f7" }, "downloads": -1, "filename": "universal_notifications-0.10.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1921eafab6d6d28954d9457109c719c9", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 92915, "upload_time": "2017-09-09T00:28:32", "url": "https://files.pythonhosted.org/packages/47/82/c588eeec256b3c1a91c673c91c3c17d9735f1e159b461e584d6b5e80d9c9/universal_notifications-0.10.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89b1b772f81ab6a80e2474ea7d9bd218", "sha256": "00ce1b4638582a4d4ac2bb285617ac4bf196b8af36d01e22bf522f10b92f8923" }, "downloads": -1, "filename": "universal_notifications-0.10.2.tar.gz", "has_sig": false, "md5_digest": "89b1b772f81ab6a80e2474ea7d9bd218", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34104, "upload_time": "2017-09-09T00:28:30", "url": "https://files.pythonhosted.org/packages/fb/ab/705bea02c1607f2582c4e58013216e6586058dbf5949e36ff0476e52ce2a/universal_notifications-0.10.2.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "2185392b33d0f12ebf297748b3f26e71", "sha256": "e0c39c1569f895145a6fe962adc9092ab3efadf16e004b607073ad553d126296" }, "downloads": -1, "filename": "universal_notifications-0.11.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2185392b33d0f12ebf297748b3f26e71", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 171007, "upload_time": "2017-11-22T14:03:08", "url": "https://files.pythonhosted.org/packages/fd/67/aff509e0d6592d453cafc6fc458519c0d8b53ec929b284491a90a70c2462/universal_notifications-0.11.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3f1772ea72a346007c319a95ba64f7cd", "sha256": "0facd22311c8aca7eb7924346a7b0a51f374aeefa87d7fcbd197ec5392a1d78c" }, "downloads": -1, "filename": "universal_notifications-0.11.0.tar.gz", "has_sig": false, "md5_digest": "3f1772ea72a346007c319a95ba64f7cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33916, "upload_time": "2017-11-23T08:59:35", "url": "https://files.pythonhosted.org/packages/2c/e5/c67afce277c6a0c02ab94197faf2f5526bcdcc885522275448a40287b744/universal_notifications-0.11.0.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "1da93892177fe30649c65e7ea0280801", "sha256": "4296ab440d71aae618ccc98e274743e8b87282c230b05e6aaeacfdd97858a8ab" }, "downloads": -1, "filename": "universal_notifications-0.12.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1da93892177fe30649c65e7ea0280801", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 109781, "upload_time": "2018-02-20T08:49:51", "url": "https://files.pythonhosted.org/packages/bd/ed/3f4bdde69e8dd21c3164fb28a09085d2978d4412e3479953a8ed9a6a2bd6/universal_notifications-0.12.0-py2.py3-none-any.whl" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "730e427f3278a78bdfc6fce912d26221", "sha256": "1fd9edb24c9f252d05671e77ce62f1f30c21bf2112a03f0b46aa30ce0bf6109b" }, "downloads": -1, "filename": "universal_notifications-0.13.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "730e427f3278a78bdfc6fce912d26221", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 110025, "upload_time": "2018-03-05T13:43:57", "url": "https://files.pythonhosted.org/packages/0b/94/30e087bd3338e28d81985f1c38461524b6bbf8add95a30ea0a524ab5e106/universal_notifications-0.13.0-py2.py3-none-any.whl" } ], "0.13.1": [ { "comment_text": "", "digests": { "md5": "9dd3017f3a1e8a1463b9f19616146e96", "sha256": "4edd60850763b5445f6055c9305726b9135d8db2910f17341983da063e673bdc" }, "downloads": -1, "filename": "universal_notifications-0.13.1.tar.gz", "has_sig": false, "md5_digest": "9dd3017f3a1e8a1463b9f19616146e96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34785, "upload_time": "2018-08-17T10:33:16", "url": "https://files.pythonhosted.org/packages/ac/dc/75d9752d2a691abb30938dbe55c258659fa2f0ba57cc7aeb795c609b67e5/universal_notifications-0.13.1.tar.gz" } ], "0.14.0": [ { "comment_text": "", "digests": { "md5": "cfebea7ce5bfda951a66d046b59a7aae", "sha256": "e0ef85fcab951b806d5f60806ffed167e304d0486659ff317d75f0376be56e85" }, "downloads": -1, "filename": "universal_notifications-0.14.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cfebea7ce5bfda951a66d046b59a7aae", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113057, "upload_time": "2018-09-12T10:02:04", "url": "https://files.pythonhosted.org/packages/d6/ca/7f174af835914a0affd9874b31f309fa5d5a72e259d63064023e50faf5d7/universal_notifications-0.14.0-py2.py3-none-any.whl" } ], "0.14.2": [ { "comment_text": "", "digests": { "md5": "1a11da6536dfdad4dab2c9376e143a51", "sha256": "bb3c15d44d65385bd15e031e0a5b32da86c30baaf249311e52765f3462d07840" }, "downloads": -1, "filename": "universal_notifications-0.14.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1a11da6536dfdad4dab2c9376e143a51", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113070, "upload_time": "2018-09-14T08:01:23", "url": "https://files.pythonhosted.org/packages/86/9b/1be57c6c25ebc6db232dae8682d844c7ed0781f3bc93c57d259163dcb604/universal_notifications-0.14.2-py2.py3-none-any.whl" } ], "0.14.3": [ { "comment_text": "", "digests": { "md5": "95cc574d793e6cb46ba3e5c755fc76bf", "sha256": "9a879e622688c1ab6c6945f4c4ed56759ae114569085d3b20366cd728d32996c" }, "downloads": -1, "filename": "universal_notifications-0.14.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "95cc574d793e6cb46ba3e5c755fc76bf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113061, "upload_time": "2018-09-26T18:21:15", "url": "https://files.pythonhosted.org/packages/5b/09/0147d96fd2e646119bff1841b398feefe4da6fe26eb66ddbb84ccafd7478/universal_notifications-0.14.3-py2.py3-none-any.whl" } ], "0.14.4": [ { "comment_text": "", "digests": { "md5": "9ea7bf79faea713c3ce627749b85d7ee", "sha256": "c005ec74541c94ab22e841660e7f36adc726c042582c9e6f6bed33f775f7a004" }, "downloads": -1, "filename": "universal_notifications-0.14.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9ea7bf79faea713c3ce627749b85d7ee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113052, "upload_time": "2018-09-26T19:02:58", "url": "https://files.pythonhosted.org/packages/23/79/29fc1b383b805cf8a1e7fae4797d2f2ce37ae8a8b996b04dd193878889c4/universal_notifications-0.14.4-py2.py3-none-any.whl" } ], "0.15.0": [ { "comment_text": "", "digests": { "md5": "53e2471af2aad9910f07c20785074a81", "sha256": "4c378791fbe7914ba6484e00b3a3c76a89aa0ce0b93498abd96895084700cf9d" }, "downloads": -1, "filename": "universal_notifications-0.15.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "53e2471af2aad9910f07c20785074a81", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113398, "upload_time": "2018-09-26T21:46:36", "url": "https://files.pythonhosted.org/packages/5c/02/8aeb8f9ece8991de2af2d8f81668c5a13961662d19f3fcec532f1ab7ae0b/universal_notifications-0.15.0-py2.py3-none-any.whl" } ], "0.16.0": [ { "comment_text": "", "digests": { "md5": "cae06765b80ef67fc711aa2dc1705c70", "sha256": "521417fcc2bc774afe80b54f2cd35aa6252bd1e866d6aafe432e275e4c1066a5" }, "downloads": -1, "filename": "universal_notifications-0.16.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cae06765b80ef67fc711aa2dc1705c70", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113744, "upload_time": "2018-09-27T20:48:33", "url": "https://files.pythonhosted.org/packages/38/12/38daa55821611e8add60a9957ca6c9c9b0092b278d6fd57cf3c293208a43/universal_notifications-0.16.0-py2.py3-none-any.whl" } ], "0.16.1": [ { "comment_text": "", "digests": { "md5": "7531c6978c62618f26142f43130632fb", "sha256": "a0f64be5adab26cd0a90ff657ae8c6040a11492fee65d11ad4e11554ed3f75b1" }, "downloads": -1, "filename": "universal_notifications-0.16.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7531c6978c62618f26142f43130632fb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 113750, "upload_time": "2018-09-28T17:22:12", "url": "https://files.pythonhosted.org/packages/0c/5d/21aa871a19013bbb592f5662d3bfc7c67d33da9ce981d71af97507fcfaa1/universal_notifications-0.16.1-py2.py3-none-any.whl" } ], "0.16.2": [ { "comment_text": "", "digests": { "md5": "21d498944d77d1cc7ab549f7c0963c05", "sha256": "7e30eadbc9dfd6a2a44a251d692655b135997798511462e53939425d3f4a75f1" }, "downloads": -1, "filename": "universal_notifications-0.16.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "21d498944d77d1cc7ab549f7c0963c05", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 114173, "upload_time": "2018-10-09T08:56:14", "url": "https://files.pythonhosted.org/packages/fa/2b/aa09d7de7f37754656cbd321901c880edaf1fa64eae99720de95fe216b18/universal_notifications-0.16.2-py2.py3-none-any.whl" } ], "0.17.0": [ { "comment_text": "", "digests": { "md5": "49e49b9601645eea3ab5d59f15a67cac", "sha256": "d4c8f42e07be49674f8c7f61b636a3e2abd8bb0b7c0d3017dd7593286ae946e7" }, "downloads": -1, "filename": "universal_notifications-0.17.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "49e49b9601645eea3ab5d59f15a67cac", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 114294, "upload_time": "2018-10-16T09:08:03", "url": "https://files.pythonhosted.org/packages/2d/6f/db50bff96936bff0284cd3f41f5f3f5b66a2c6edbf95d275d6afe6559e57/universal_notifications-0.17.0-py2.py3-none-any.whl" } ], "0.17.1": [ { "comment_text": "", "digests": { "md5": "5d6be933edc10b98f16f536e37be83a0", "sha256": "1230baf5d5ed1caa70459960689b836d86b28c8afcf1b3dbc98d183f1a4f918e" }, "downloads": -1, "filename": "universal_notifications-0.17.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d6be933edc10b98f16f536e37be83a0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 114302, "upload_time": "2018-10-16T09:48:29", "url": "https://files.pythonhosted.org/packages/ff/38/498de45628420f7ea03b74ad025d60f88ffabcd4a8aaf43ea0768f1bf2d9/universal_notifications-0.17.1-py2.py3-none-any.whl" } ], "0.17.2": [ { "comment_text": "", "digests": { "md5": "0b8063cc10067293dd61c9dc0c10fbe4", "sha256": "94e7716ce7d7d72afd1b393b5cea9628bfcde93d9c59dac3abb88439080b9f98" }, "downloads": -1, "filename": "universal_notifications-0.17.2.tar.gz", "has_sig": false, "md5_digest": "0b8063cc10067293dd61c9dc0c10fbe4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34352, "upload_time": "2018-10-24T15:39:11", "url": "https://files.pythonhosted.org/packages/d7/2d/d2290068c85d93d5368120132097caa488557ad15e106ae2664410ce1ce9/universal_notifications-0.17.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "8ab5397bcbf5fbe174cc8183b6ce3eb5", "sha256": "8c1b5d9d362a2f9eba9fd56f81e19b3b7bd0f5d2108fa24e92be0bc699fbf915" }, "downloads": -1, "filename": "universal_notifications-0.3.0.tar.gz", "has_sig": false, "md5_digest": "8ab5397bcbf5fbe174cc8183b6ce3eb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12469, "upload_time": "2016-12-04T13:50:00", "url": "https://files.pythonhosted.org/packages/fd/a9/4440c63d19f04fb19259ba443fdca60d5cfdb5bca74f0b0f173614f99996/universal_notifications-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "e1af967a428ac289c1ddf659da26412e", "sha256": "833c252087c7a40c75be878780772c985bacdc360155162c5178ecd8ab279d2f" }, "downloads": -1, "filename": "universal_notifications-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "e1af967a428ac289c1ddf659da26412e", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19347, "upload_time": "2017-01-02T17:57:34", "url": "https://files.pythonhosted.org/packages/19/e6/f1b3ede7d27e925945c4fed26774658f5e26186daa38bcba5c5fe763110d/universal_notifications-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d31ee3449151e7d52cd36e3ccf2cae3", "sha256": "227e49da491beb936be6305066505633e635d1350bc38c80c81f286ce73c06c8" }, "downloads": -1, "filename": "universal_notifications-0.4.0.tar.gz", "has_sig": false, "md5_digest": "0d31ee3449151e7d52cd36e3ccf2cae3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13920, "upload_time": "2017-01-02T17:57:32", "url": "https://files.pythonhosted.org/packages/57/f1/bd139ab6754602fca4bca4351cfe7a915921a21bda311a33fdb53c2fff2e/universal_notifications-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "94b928903844fb6e225418d4aa39899f", "sha256": "d75f1ea1fee5c032d79be1d3de3ee68ffe9aeecf9eb3a7b1ccd1b3f02a261306" }, "downloads": -1, "filename": "universal_notifications-0.5.0-py2-none-any.whl", "has_sig": false, "md5_digest": "94b928903844fb6e225418d4aa39899f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 20550, "upload_time": "2017-01-06T20:00:39", "url": "https://files.pythonhosted.org/packages/98/ab/50572bc75a95a0f1c342f0f2a8c0d02141014af1badbed803c09f564c1fb/universal_notifications-0.5.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "76d9285fec3b4860fa79e0171ff9c071", "sha256": "7a4c935d17a07f0eb98116aa12bad1d6f376aa04b301d31d45b472e0e09a0bc1" }, "downloads": -1, "filename": "universal_notifications-0.5.0.tar.gz", "has_sig": false, "md5_digest": "76d9285fec3b4860fa79e0171ff9c071", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14386, "upload_time": "2017-01-06T20:00:37", "url": "https://files.pythonhosted.org/packages/06/51/34d50d7faeda06fafa3679fe2529dde6389e1ebeb8c416b91147fdf2afb2/universal_notifications-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "5dd6c765a4ecacfe21bf16f170dd78c4", "sha256": "dc8b5c033255909e64350214adcf0bc3c374ae8a8a4bf96c9113b54deff112ee" }, "downloads": -1, "filename": "universal_notifications-0.5.1-py2-none-any.whl", "has_sig": false, "md5_digest": "5dd6c765a4ecacfe21bf16f170dd78c4", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 20368, "upload_time": "2017-01-06T20:40:49", "url": "https://files.pythonhosted.org/packages/44/36/673702df29f0a4d5ab59c5f56690ad154f98864b39c3d02619c17d9497ea/universal_notifications-0.5.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1431ded5ce1bdf30d00113a35bb884d9", "sha256": "3efca2026659dbc48f3c15eebcd371b514ac2b774eff9d91f5430dc9b8bc23aa" }, "downloads": -1, "filename": "universal_notifications-0.5.1.tar.gz", "has_sig": false, "md5_digest": "1431ded5ce1bdf30d00113a35bb884d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14313, "upload_time": "2017-01-06T20:40:46", "url": "https://files.pythonhosted.org/packages/3c/63/f2de02f36593ad965d9dac82e3019869dc3fa4868c1e1a6b8f29c1b901fe/universal_notifications-0.5.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "84fc83ee66584a4eaf0f90a702c48a07", "sha256": "7ae714371b770a20e4d7ae44caf3bcdf8575ff3c3f37bd9784b77f1361e164e6" }, "downloads": -1, "filename": "universal_notifications-0.6.2-py2-none-any.whl", "has_sig": false, "md5_digest": "84fc83ee66584a4eaf0f90a702c48a07", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 35396, "upload_time": "2017-01-12T21:02:51", "url": "https://files.pythonhosted.org/packages/bc/b2/e4f04973cd32f29e5b3640469b6ac26adae9103d58a5129f016f63ea9c01/universal_notifications-0.6.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d6e78f2291b802790b0782f1a0d7577", "sha256": "fb087068fd4743e5c1e2abb8ae6d59a09d47025c36bd2b670378e29b063130e3" }, "downloads": -1, "filename": "universal_notifications-0.6.2.tar.gz", "has_sig": false, "md5_digest": "5d6e78f2291b802790b0782f1a0d7577", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23863, "upload_time": "2017-01-12T21:02:49", "url": "https://files.pythonhosted.org/packages/a5/fa/bd775badc7c0bdfe7e2e7aff84df82b499c41c8cd9c2750c44e1cdc258da/universal_notifications-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "6d058923077d5e0990b9831a64bda4db", "sha256": "4c2dd08b425eaa0354011181baf8c36f4301089a84a8d8488b99b3138ee07ddc" }, "downloads": -1, "filename": "universal_notifications-0.6.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6d058923077d5e0990b9831a64bda4db", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 38149, "upload_time": "2017-02-06T13:23:43", "url": "https://files.pythonhosted.org/packages/a5/9c/ce5fe1fc116be21fcc92fcd29c7551e5f24a9975b30615e66e6e7266587c/universal_notifications-0.6.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6dc7a48eabfbe16743e4e2523b548c82", "sha256": "78eb43fb78299b2d74215ff1c8a1b57dc4b904d728f73af3a3717757c2931aad" }, "downloads": -1, "filename": "universal_notifications-0.6.3.tar.gz", "has_sig": false, "md5_digest": "6dc7a48eabfbe16743e4e2523b548c82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26702, "upload_time": "2017-02-06T13:23:40", "url": "https://files.pythonhosted.org/packages/1b/2c/1ac5688be89a4b2c456c8a59efd31dc265422aaa92d783fded7f0bd9049c/universal_notifications-0.6.3.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "ba489fa57eba0f7ecacfd4a0e2b11d73", "sha256": "cc00e1a517b2302d68f4ed76a97d5250627e684983c4e2d940d2f04db142f013" }, "downloads": -1, "filename": "universal_notifications-0.7.0.tar.gz", "has_sig": false, "md5_digest": "ba489fa57eba0f7ecacfd4a0e2b11d73", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28939, "upload_time": "2017-02-20T14:54:14", "url": "https://files.pythonhosted.org/packages/3a/81/e4e6aaf1a4d82a7120f0b42ca8d77e76c9b867720662ffbe30b2fa8b23cb/universal_notifications-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "12316917b2bcb110d4411b3c71d2599a", "sha256": "e57a9aeb43d137ade9e08649638cbe2223f7534d0e279d4d3dc36fc3d0b8ac44" }, "downloads": -1, "filename": "universal_notifications-0.7.1.tar.gz", "has_sig": false, "md5_digest": "12316917b2bcb110d4411b3c71d2599a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29002, "upload_time": "2017-02-20T15:58:41", "url": "https://files.pythonhosted.org/packages/0a/84/1ddd9f8914874bba88332dc2a705f13b5410078243032a27bc90c918e7fc/universal_notifications-0.7.1.tar.gz" } ], "0.7.10": [ { "comment_text": "", "digests": { "md5": "ca6b4609aca05eaa79a99a525f1261b7", "sha256": "a45ac1dd192406883fd9479473e29dd7d29c8d5bc4f6561573128a9d12ece9f2" }, "downloads": -1, "filename": "universal_notifications-0.7.10.tar.gz", "has_sig": false, "md5_digest": "ca6b4609aca05eaa79a99a525f1261b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32731, "upload_time": "2017-04-07T07:39:42", "url": "https://files.pythonhosted.org/packages/53/47/3fc4c5576792f5f5e2452d27cdcd0582389e4ed73c2bcab505f9e7186244/universal_notifications-0.7.10.tar.gz" } ], "0.7.11": [ { "comment_text": "", "digests": { "md5": "16bbb44ce68fdba2a8f34e3dc7d7c3df", "sha256": "a8b5ea23cb29c73ced81d7249632629ca754b32854521308d3fec73d8bdb9930" }, "downloads": -1, "filename": "universal_notifications-0.7.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16bbb44ce68fdba2a8f34e3dc7d7c3df", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 71931, "upload_time": "2017-04-18T11:49:12", "url": "https://files.pythonhosted.org/packages/9a/c2/3f92d91be32bdb0f16dc12ce7c69a786d7d7337a982c85d0a9b1482493dc/universal_notifications-0.7.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5d58d1ab7d5a09938a21dd444488b8c9", "sha256": "759760398eee7ccfc120ff7c546dedd765ba77af3c3f3125f26f8211c860734e" }, "downloads": -1, "filename": "universal_notifications-0.7.11.tar.gz", "has_sig": false, "md5_digest": "5d58d1ab7d5a09938a21dd444488b8c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32797, "upload_time": "2017-04-18T11:49:09", "url": "https://files.pythonhosted.org/packages/44/62/1b1522f44874fc7ef5a8a2803ee29b401fb23770b05569391417f0d06b00/universal_notifications-0.7.11.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "1e7244145b9086a7b777c51da389cb65", "sha256": "9e23b0cdadf1cc90cca1a8cb42752859b9d33ee0baa9cf5c40b3224ac908b1a7" }, "downloads": -1, "filename": "universal_notifications-0.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e7244145b9086a7b777c51da389cb65", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 44013, "upload_time": "2017-02-21T18:37:03", "url": "https://files.pythonhosted.org/packages/c6/65/4372a31060357f2ece2cd1b5b802419f65e8491e7be66a88083ee839a31a/universal_notifications-0.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ecb4e1d7e64bc8d87639b5c76366562", "sha256": "f815d8ac77582f0f424ad7216c83715b22c8923ec54c57d9313e7087c13c92c4" }, "downloads": -1, "filename": "universal_notifications-0.7.2.tar.gz", "has_sig": false, "md5_digest": "4ecb4e1d7e64bc8d87639b5c76366562", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30365, "upload_time": "2017-02-21T18:37:01", "url": "https://files.pythonhosted.org/packages/63/ac/4f489a3e7d820e8efb2dd3509a92ada0ebf91f934c2a121529f795ffea73/universal_notifications-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "41a855c41f960499e38ebb076dd6de3f", "sha256": "3578b74b2dac4ba5ca469520211c563b5ecc9283d87b95bbe33444f3303053e8" }, "downloads": -1, "filename": "universal_notifications-0.7.3.tar.gz", "has_sig": false, "md5_digest": "41a855c41f960499e38ebb076dd6de3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30893, "upload_time": "2017-02-22T15:07:41", "url": "https://files.pythonhosted.org/packages/d5/82/5d33e4c2f4ec7018efc96d3ba1a47dd6be4cc8961229c1449086d8782b77/universal_notifications-0.7.3.tar.gz" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "d4315f6108e4b51226f3a4bb84e7f760", "sha256": "1b154e52901b52c4896ea7218e0267a3a3435d37d5f04d96977d8c6514eb2fba" }, "downloads": -1, "filename": "universal_notifications-0.7.4.tar.gz", "has_sig": false, "md5_digest": "d4315f6108e4b51226f3a4bb84e7f760", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30950, "upload_time": "2017-02-23T12:41:22", "url": "https://files.pythonhosted.org/packages/4f/5d/ec9cd4f6f97850ed78c5fa96ede5161641102076178aa50dc383140e74cc/universal_notifications-0.7.4.tar.gz" } ], "0.7.5": [ { "comment_text": "", "digests": { "md5": "0a73bff53824b9bf14552089f7fa861f", "sha256": "d06348ea6932102487a8e7667847f03c7f6ffe08db7b37e1c32a6d9a244e6a86" }, "downloads": -1, "filename": "universal_notifications-0.7.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0a73bff53824b9bf14552089f7fa861f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 70863, "upload_time": "2017-03-16T23:41:20", "url": "https://files.pythonhosted.org/packages/74/34/a65ada81abb5cc0ce40396ad2303428468cac8980a8b74b722aeeddff945/universal_notifications-0.7.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4c39105dcbde0228fec45ef8dc688498", "sha256": "0d7b56a38056b26bab84f91b3c2476ce486a00df2f815e1e7b008b613e6f6c0e" }, "downloads": -1, "filename": "universal_notifications-0.7.5.tar.gz", "has_sig": false, "md5_digest": "4c39105dcbde0228fec45ef8dc688498", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32632, "upload_time": "2017-03-16T23:41:17", "url": "https://files.pythonhosted.org/packages/f4/42/0709b0063786ac4c23418395952d1bb75b891a03c8cfc2f1cfa222fda7b9/universal_notifications-0.7.5.tar.gz" } ], "0.7.6": [ { "comment_text": "", "digests": { "md5": "f044bed94b39478b2a7107ec75025ff5", "sha256": "eda94b83586cdd8c850dbaeba6303f47350fe8a201082c6795d78a15e25a2505" }, "downloads": -1, "filename": "universal_notifications-0.7.6.tar.gz", "has_sig": false, "md5_digest": "f044bed94b39478b2a7107ec75025ff5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32684, "upload_time": "2017-03-23T10:38:19", "url": "https://files.pythonhosted.org/packages/64/2b/36d30c67496e447ae87f2dea181be85a0c52b9161e0c5e51f105fbd7ec4e/universal_notifications-0.7.6.tar.gz" } ], "0.7.7": [ { "comment_text": "", "digests": { "md5": "f93a786a929dd6fefeb8c6c606621ddb", "sha256": "e034ff57f95be5af043e8d3207fe2dd9e78a6c7dcd96fb5547e1762b772fb27e" }, "downloads": -1, "filename": "universal_notifications-0.7.7.tar.gz", "has_sig": false, "md5_digest": "f93a786a929dd6fefeb8c6c606621ddb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32697, "upload_time": "2017-03-23T11:07:21", "url": "https://files.pythonhosted.org/packages/cb/53/cde5a5743afdfadf25204769ee07ceb5a13594fb93506d945b3c95ddc3d9/universal_notifications-0.7.7.tar.gz" } ], "0.7.8": [ { "comment_text": "", "digests": { "md5": "462deaede0ef680a5b984cf2abe707ec", "sha256": "a32b6306d208f0d0c6b36f30ba256d90a0a985d939064bbc5e4aa59a362311b5" }, "downloads": -1, "filename": "universal_notifications-0.7.8.tar.gz", "has_sig": false, "md5_digest": "462deaede0ef680a5b984cf2abe707ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32755, "upload_time": "2017-03-25T14:39:14", "url": "https://files.pythonhosted.org/packages/eb/5b/2453dd75d509e35924ce1fb77f54250913df65beadac031ce366aa160009/universal_notifications-0.7.8.tar.gz" } ], "0.7.9": [ { "comment_text": "", "digests": { "md5": "1fea18c4eb1389fec0b49414ee6be2e0", "sha256": "9e4eae068278bd933e3e96a775e442305bf64cf994b6fbffbf548a1be29b25c0" }, "downloads": -1, "filename": "universal_notifications-0.7.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1fea18c4eb1389fec0b49414ee6be2e0", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 71861, "upload_time": "2017-04-05T10:35:43", "url": "https://files.pythonhosted.org/packages/4a/55/ae27624d3ec543452a43fb69389f93f30efa2d83bba038d5ea44d5775db0/universal_notifications-0.7.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b5dc59dd5aa2261752beca3a1709a9c8", "sha256": "c274ceabee65025390d7c9497da422397eff7c04eb24b84fef4174c13cfe6488" }, "downloads": -1, "filename": "universal_notifications-0.7.9.tar.gz", "has_sig": false, "md5_digest": "b5dc59dd5aa2261752beca3a1709a9c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32688, "upload_time": "2017-04-05T10:35:41", "url": "https://files.pythonhosted.org/packages/4d/24/c6c24867ffab6cfc1f45c27aef45128271de21e8c6c02db34e478319e2a2/universal_notifications-0.7.9.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "dde164003fbc62979f29241e59b3802a", "sha256": "60df42c522a1df6f37941619249c21520c687d0ed9d8909dc73ddc1e5368b254" }, "downloads": -1, "filename": "universal_notifications-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dde164003fbc62979f29241e59b3802a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 49967, "upload_time": "2017-05-25T15:45:51", "url": "https://files.pythonhosted.org/packages/fc/c6/af294b23c23a30154d86c41ba53a6c6ada84202c12377df1a9c097b841bc/universal_notifications-0.8.0-py2.py3-none-any.whl" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "c984eb0094d839a4132d12032472a943", "sha256": "5b38074c78b5ee0f7b35de688c883a1aa3399063e99f9c91985275c5d655fedb" }, "downloads": -1, "filename": "universal_notifications-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c984eb0094d839a4132d12032472a943", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 75213, "upload_time": "2017-05-26T15:22:35", "url": "https://files.pythonhosted.org/packages/1c/75/97c744aa47c61f7f87cbbf01d378867d9d108d2b25230d516249747a54a7/universal_notifications-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d345e05f48300be53bd9ca2c6b49b790", "sha256": "73cb554acc4bdb6f5d8a04d54ef783d11a2bbd4a7c45c9e71a5d6516d04e32f4" }, "downloads": -1, "filename": "universal_notifications-0.8.1.tar.gz", "has_sig": false, "md5_digest": "d345e05f48300be53bd9ca2c6b49b790", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34259, "upload_time": "2017-05-26T15:22:33", "url": "https://files.pythonhosted.org/packages/2d/96/3cf337d0e6c5e495ae9d364853c4e9cb594309e04ff958a3985c7c03ba74/universal_notifications-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "4de49283286722898783ef16e1c39974", "sha256": "3bbf7d62e335e916de2e5f9a346892b1058c7cc7f97757560a73d65f61b5f0c1" }, "downloads": -1, "filename": "universal_notifications-0.8.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4de49283286722898783ef16e1c39974", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 75241, "upload_time": "2017-05-29T14:12:31", "url": "https://files.pythonhosted.org/packages/b0/45/203cada5ed444e180951357b5f862e9a576263be7fd605f17a5075f7771a/universal_notifications-0.8.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d91fd66886c4e57db7a9bbf86393a02b", "sha256": "3ded422036b4bf6df2d626d909b6de182daca20132417e31e3043f5e1e2393d5" }, "downloads": -1, "filename": "universal_notifications-0.8.2.tar.gz", "has_sig": false, "md5_digest": "d91fd66886c4e57db7a9bbf86393a02b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34275, "upload_time": "2017-05-29T14:12:28", "url": "https://files.pythonhosted.org/packages/54/39/3ef15d0f30e64575ca3880d58152a23a2ca87dd2a3612d3574d750c6f040/universal_notifications-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "e9a5936b5b4010a05ef722b7ad8a3a70", "sha256": "bdd413ffd1230d330dd13189a5bce9554d8491df290b9dd7c0d609f3ad29e486" }, "downloads": -1, "filename": "universal_notifications-0.8.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9a5936b5b4010a05ef722b7ad8a3a70", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 75520, "upload_time": "2017-06-12T12:08:00", "url": "https://files.pythonhosted.org/packages/7e/b7/fafff3a7d254447e267df77146bce1616265936e87fba576f855e6c50f38/universal_notifications-0.8.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2901d5c079413f7ad11cdaab055d94fa", "sha256": "362ab27a191d5208cc24c3f63d8a6b4800cf825db0e189a746bef2f1b6e4e612" }, "downloads": -1, "filename": "universal_notifications-0.8.3.tar.gz", "has_sig": false, "md5_digest": "2901d5c079413f7ad11cdaab055d94fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34569, "upload_time": "2017-06-12T12:07:56", "url": "https://files.pythonhosted.org/packages/63/23/96363a6f4ca1c6c577702ece36d65c6ebea650bc0a4159fbcf734dbb7d45/universal_notifications-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "c4a6697cec76cccf601b99a57493722c", "sha256": "d32d4a4919621ce1d643f23bb510e44c5b59c6245954d4908cf7311d2a4318d6" }, "downloads": -1, "filename": "universal_notifications-0.8.4.tar.gz", "has_sig": false, "md5_digest": "c4a6697cec76cccf601b99a57493722c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34514, "upload_time": "2017-06-19T14:27:29", "url": "https://files.pythonhosted.org/packages/d0/65/d96966243ff465aa73c9d748530edd8a62b31c8d3699a868245ecda12693/universal_notifications-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "2aac74398545e9ec86515c1de4b45e68", "sha256": "3c23a5775adc384283dbbf73f1649720ca0c4c29ed2626f940043fff894d1006" }, "downloads": -1, "filename": "universal_notifications-0.8.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2aac74398545e9ec86515c1de4b45e68", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 106348, "upload_time": "2017-07-04T15:30:45", "url": "https://files.pythonhosted.org/packages/17/42/c51455a4fae473bb558359629e0f6a82b5c7b198b4002fb05716ecc00363/universal_notifications-0.8.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b517c785409917b89980ba8487d5a6b7", "sha256": "f683f37b35618dcff715cfe96854b835d5ed8448721853a3211397eed5c176e7" }, "downloads": -1, "filename": "universal_notifications-0.8.5.tar.gz", "has_sig": false, "md5_digest": "b517c785409917b89980ba8487d5a6b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33432, "upload_time": "2017-07-04T15:30:41", "url": "https://files.pythonhosted.org/packages/f6/26/2d820e134a69a7987e5701f5abe3cfcdb6a643c98b7784b08e5cd92f3ea6/universal_notifications-0.8.5.tar.gz" } ], "0.8.6": [ { "comment_text": "", "digests": { "md5": "fe28df115ff18641de43b1af2b171c15", "sha256": "652a7374cc5f028622f27dd44230c0d9ffafb62c69ce0102dbab4c6a10fa025a" }, "downloads": -1, "filename": "universal_notifications-0.8.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fe28df115ff18641de43b1af2b171c15", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 111665, "upload_time": "2017-07-13T10:09:41", "url": "https://files.pythonhosted.org/packages/ba/f7/feda90e218389595661bf1d53f574405b1dbf57af0de4a766555cbd9b794/universal_notifications-0.8.6-py2.py3-none-any.whl" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "48096d7b4fb088973e721521d2f7d9be", "sha256": "cdc5fa1109294baa3c182ad5d7935368c3f4d5904676818549791cad26effaba" }, "downloads": -1, "filename": "universal_notifications-0.9.0.tar.gz", "has_sig": false, "md5_digest": "48096d7b4fb088973e721521d2f7d9be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34889, "upload_time": "2017-08-17T08:27:29", "url": "https://files.pythonhosted.org/packages/1d/de/0efa47523409821865c301ad083fd2f4276093e770ab4899c58317aba024/universal_notifications-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "be136354426edbd21e0411dddad83872", "sha256": "98c2e7b5e2bb2fd1454b6d4a96664dde37c1c58b41fce9b715cfce8565c2badb" }, "downloads": -1, "filename": "universal_notifications-0.9.1.tar.gz", "has_sig": false, "md5_digest": "be136354426edbd21e0411dddad83872", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34907, "upload_time": "2017-08-17T10:42:26", "url": "https://files.pythonhosted.org/packages/7f/a8/e4133dd4dc638196b289c5d6bf7c4b7e7506ee39592223967ef690ef0fbb/universal_notifications-0.9.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "6e671a2e56efeaf9d44ea40ec5744857", "sha256": "47c3b47ede80aed44c09436cd9802180ac32889c3cb6478f6f411bbe4598694e" }, "downloads": -1, "filename": "universal_notifications-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6e671a2e56efeaf9d44ea40ec5744857", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33180, "upload_time": "2018-11-02T15:59:41", "url": "https://files.pythonhosted.org/packages/72/5c/3a4905bdb3ed8eccaa9ec81763f1bc008b16c7fe0fceb8f32993d5a37736/universal_notifications-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "d54e674da7fe0194ca3898fa11b616f3", "sha256": "2cccfb53cff054f37387d0328eb0410c1ab8c0ccac308db527f99c26b9dfe7e4" }, "downloads": -1, "filename": "universal_notifications-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d54e674da7fe0194ca3898fa11b616f3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 111156, "upload_time": "2018-11-13T12:01:16", "url": "https://files.pythonhosted.org/packages/f1/70/0ac123a7afb0f68c6cfce12fd4c33bdeac43f764497b566ec8e1666298c4/universal_notifications-1.1.0-py2.py3-none-any.whl" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "c27d8fe0d4eca74b4fccb55429673c45", "sha256": "a15851903a5fcd4b786fa46fe3f24d7cc3aff50a2c426ec2a3d8d333c94e15bc" }, "downloads": -1, "filename": "universal_notifications-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c27d8fe0d4eca74b4fccb55429673c45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33430, "upload_time": "2018-11-18T12:43:15", "url": "https://files.pythonhosted.org/packages/c6/60/4bb795fede2fd0b9faacdfed7ee5f666170c43c1cd6b6f42686bcb16a763/universal_notifications-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "e5f5d77569d14325a78c02a55db51ddd", "sha256": "64108bccd58fc4bcd18a30dad6d7409d01783dfd523f68b656eae16ee6e5623d" }, "downloads": -1, "filename": "universal_notifications-1.2.1.tar.gz", "has_sig": false, "md5_digest": "e5f5d77569d14325a78c02a55db51ddd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33448, "upload_time": "2018-11-18T12:50:33", "url": "https://files.pythonhosted.org/packages/1b/46/9a72a6fd43ed67939dec6b549f2ddc8d9905b4b89408e435f6cd927be67d/universal_notifications-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "309f491116b3d3800412542f98e381f6", "sha256": "4aaf54463c91ec0d8560a41e34ed47252a7f02c79a114687c50a6a7097057910" }, "downloads": -1, "filename": "universal_notifications-1.2.2.tar.gz", "has_sig": false, "md5_digest": "309f491116b3d3800412542f98e381f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34421, "upload_time": "2019-10-01T21:28:01", "url": "https://files.pythonhosted.org/packages/a2/2d/e51eef225846d598482309d52a77f0618ae5139f6016015e3149d0331895/universal_notifications-1.2.2.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "a861d53408294d3a0c261f08cbfb12af", "sha256": "6349f053f14826f23b15ce53bc7a7967faa6321d9ea6f70ac6f6bed5e5ea9611" }, "downloads": -1, "filename": "universal_notifications-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a861d53408294d3a0c261f08cbfb12af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 46702, "upload_time": "2019-10-11T13:38:26", "url": "https://files.pythonhosted.org/packages/ed/86/ed61765fd289f96e4738b30055ec3a11fc072d1262a51a759d968619ac90/universal_notifications-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b9adac9d5efe3a20bcd6b535ae84b36", "sha256": "e90b0cca94a62818a09a7a461741260a6b4f97d6836a2c4891a2d9e65f35f1a6" }, "downloads": -1, "filename": "universal_notifications-1.3.0.tar.gz", "has_sig": false, "md5_digest": "5b9adac9d5efe3a20bcd6b535ae84b36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34469, "upload_time": "2019-10-11T13:38:29", "url": "https://files.pythonhosted.org/packages/ee/36/ba122e7b9792781ee83e1f39e96f2964e01726c3654d39abadf0eb04833b/universal_notifications-1.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a861d53408294d3a0c261f08cbfb12af", "sha256": "6349f053f14826f23b15ce53bc7a7967faa6321d9ea6f70ac6f6bed5e5ea9611" }, "downloads": -1, "filename": "universal_notifications-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a861d53408294d3a0c261f08cbfb12af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 46702, "upload_time": "2019-10-11T13:38:26", "url": "https://files.pythonhosted.org/packages/ed/86/ed61765fd289f96e4738b30055ec3a11fc072d1262a51a759d968619ac90/universal_notifications-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5b9adac9d5efe3a20bcd6b535ae84b36", "sha256": "e90b0cca94a62818a09a7a461741260a6b4f97d6836a2c4891a2d9e65f35f1a6" }, "downloads": -1, "filename": "universal_notifications-1.3.0.tar.gz", "has_sig": false, "md5_digest": "5b9adac9d5efe3a20bcd6b535ae84b36", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34469, "upload_time": "2019-10-11T13:38:29", "url": "https://files.pythonhosted.org/packages/ee/36/ba122e7b9792781ee83e1f39e96f2964e01726c3654d39abadf0eb04833b/universal_notifications-1.3.0.tar.gz" } ] }