{ "info": { "author": "Alexandre Varas", "author_email": "alej0varas@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries" ], "description": "========\n PyPN\n========\n\nAbstraction library to send push notifications through APNs, GCM and OneSignal.\n\n.. caution::\n This library only supports Python 3.5\n\nRequirements\n============\n\n.. caution::\n Requirements are not installed automatically by pip. The recomended\n dependencies can be found in requirements.txt.\n\nFor APNs an @oeegor/apns2-client fork is used, `pypn` branch\n::\n\n https://github.com/alej0varas/apns2-client.git\n\nFor GCM @geeknam/python-gcm `develop` branch is used.\n::\n\n https://github.com/geeknam/python-gcm.git\n\nFor OneSignal `yaosac`.\n::\n\n https://pypi.python.org/pypi/yaosac\n\nUsage\n=====\n\nAPNS\n----\n.. code-block:: python\n\n apns = pypn.Notification(pypn.APNS)\n apns.send(token, data)\n\nPossible values for `token` are:\n\n- A string\n- A list of string\n\nCurrently sending multiple notifications means iterating over the list\nand send one request per user.\n\nGCM\n---\n.. code-block:: python\n\n gcm = pypn.Notification(pypn.APNS)\n gcm.send(token, data)\n\n\nPossible values for `token` are:\n\n- A string\n\n - `registration_id` or `topic` (just the name, without \"/topic/\")\n\n- A list of string, `registration_ids`\n\nOneSignal\n---------\n.. code-block:: python\n\n ones = pypn.Notification(pypn.OS)\n ones.send(token, data)\n\n\nPossible values for `token` are:\n\n- A list of OneSignal's `player_id`\n\nYou need an App Auth Key and App Id. They can be set as environment\nvariables 'OS_APP_AUTH_KEY' and 'OS_APP_ID' or assigned to the client\nvia `user_auth_key` and `app_id` attributes.\n\nDummy\n-----\n.. code-block:: python\n\n dummy = pypn.Notification(pypn.DUMMY)\n dummy.send(token, data)\n\nData\n====\n\nPyPN has been built as a layer in between a \"back-end\"(I'm working\non a Django application to handle data) and the existing push\nnotification libraries. That means notifications are defined including\nall the required fields for each provider. This data is then passed to\nPyPN together with the provider \"name\".\n\nExample data\n------------\nNot every field value is set.\n\n.. code-block:: python\n\n data = {\n # Common fields\n 'body': '1, 2, 3, ... push sucks!'\n 'sound': 'default',\n 'priority': 'high',\n 'title': 'Hello, World!',\n\n # APNs aps\n 'apns_badge': 69,\n 'apns_content_available': 1,\n 'apns_category': '',\n 'apns_mutable_content': True,\n\n # APNs alert\n 'apns_alert_title_loc_key': '',\n 'apns_alert_title_loc_args': '',\n 'apns_alert_loc_key': '',\n 'apns_alert_loc_args': '',\n 'apns_alert_action_loc_key': '',\n 'apns_alert_launch_image': '',\n\n # APNs data\n 'apns_custom': {'custom': 'values'},\n\n # GCM data\n 'gcm_data': {'custom': 'values'},\n\n # GCM notification \n 'gcm_notification_icon': '',\n 'gcm_notification_tag': '',\n 'gcm_notification_color': '',\n 'gcm_notification_click_action': '',\n 'gcm_notification_body_loc_key': '',\n 'gcm_notification_body_loc_args': '',\n 'gcm_notification_title_loc_key': '',\n 'gcm_notification_title_loc_args': '',\n\n # GCM options\n 'gcm_option_collapse_key': '',\n 'gcm_option_content_available': '',\n 'gcm_option_delay_while_idle': '',\n 'gcm_option_time_to_live': 40320,\n 'gcm_option_restricted_package_name': '',\n }\n\n\nCredentials\n===========\n\nCredentials are expected to be in placed in the environment.\n\nFor APNs the path to the .pem certificate and the pass-phrase if any:\n\n- APNS_CERT_FILE\n- APNS_CERT_PASSWORD\n\nFor GCM the server key:\n\n- GCM_SERVER_KEY\n\nFor OneSignal the application id and the API key:\n\n- OS_APP_AUTH_KEY\n- OS_APP_ID\n\nDebug\n=====\n\nDebug is the default value for every provider(you will **not** get\nnotifications through GCM unless you set debug to false). This can\nalso be set in the environment:\n\n- APNS_MODE: Possible values are \"dev\" and \"prod\"\n- GCM_DRY_RUN: Possible values are 0 and 1\n- There is no debug mode for OneSignal :(\n- Dummy: There is a dummy provider that does nothin\n\nAlso logging for the gcm library can be enabled setting `GCM_LOGGING`\nenvironment variable to 1.\n\nContributing\n============\n\nFeel free to open a pull request or issue in GitHub.\n\nTesting\n-------\nInstall requirements\n\n.. code-block:: shell\n\n pip install -r requirements.txt\n\nCopy and update the environment file\n\n.. code-block:: shell\n\n cp .env-template .env\n\n**DON'T FORGET TO EDIT .env :)**\n\nInstall honcho\n\n.. code-block:: shell\n\n pip install honcho\n\n\nUnit\n~~~~\n.. code-block:: shell\n\n honcho run python tests.py\n\nIntegration\n~~~~~~~~~~~\nThis will send a notification to your devices.\n\n.. code-block:: shell\n\n honcho run python tests_integration.py\n\n\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/alej0varas/pypn", "keywords": "push notification notifications apns gcm onesignal google apple", "license": "GNU Library or Lesser General Public License (LGPL)", "maintainer": "", "maintainer_email": "", "name": "pypn", "package_url": "https://pypi.org/project/pypn/", "platform": "", "project_url": "https://pypi.org/project/pypn/", "project_urls": { "Homepage": "https://github.com/alej0varas/pypn" }, "release_url": "https://pypi.org/project/pypn/0.9/", "requires_dist": null, "requires_python": "", "summary": "Abstraction library to send push notifications through APNs, GCM and OneSignal", "version": "0.9" }, "last_serial": 3227530, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e1fe2b5828563b42dd1209238bebf330", "sha256": "eae88fcc6f4fc62e79c4764df7898174ce9e29d89546dd9b5f0c809d9cec6240" }, "downloads": -1, "filename": "pypn-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e1fe2b5828563b42dd1209238bebf330", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8280, "upload_time": "2016-09-22T10:42:05", "url": "https://files.pythonhosted.org/packages/54/cc/4b41a052905d2a98e071a4a9ce6edcc0b070201499251a2f9d85d8e28809/pypn-0.1.0-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "8ac7adce8a34f32c0a72943e7ba23039", "sha256": "a31215c1f1a513e8ead5732b91887648a2c00633e07179a9f508d70aa99636d0" }, "downloads": -1, "filename": "pypn-0.1.4.tar.gz", "has_sig": false, "md5_digest": "8ac7adce8a34f32c0a72943e7ba23039", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4699, "upload_time": "2016-12-12T18:29:43", "url": "https://files.pythonhosted.org/packages/9a/73/157636b96b817bf01756ddece0733c2050a6e4a9e68d52c6d0b012e43e0d/pypn-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "7f7172d0a4be49b70adb306998c77737", "sha256": "9c12049f0b99b26d9b622c64e4db124b54c82f34949feefad78373f1ad9c0d49" }, "downloads": -1, "filename": "pypn-0.1.5.tar.gz", "has_sig": false, "md5_digest": "7f7172d0a4be49b70adb306998c77737", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4823, "upload_time": "2016-12-14T08:47:33", "url": "https://files.pythonhosted.org/packages/a0/96/0b8f577d08762d7694a4ed957015bea32b6318b0dcd35b02e4afddfe3105/pypn-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "7983873f205bbd8e049c9ddd86cf1500", "sha256": "4b41b9dc4aa07b05a2f00a591a643894344757bc0e6f6372a9f0adffb8eedc47" }, "downloads": -1, "filename": "pypn-0.2.0.tar.gz", "has_sig": false, "md5_digest": "7983873f205bbd8e049c9ddd86cf1500", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4888, "upload_time": "2017-02-01T14:35:01", "url": "https://files.pythonhosted.org/packages/a5/81/947825db40ec9b409b4e2ce3335598bfad727d62cd36c6e7e449a9a24162/pypn-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f215665bde8795e92c1e01b54c8acc96", "sha256": "6ec3d1fb617123d84bc01c2b21ca6d125a308ecce40fbcbb6deb27466ca84e90" }, "downloads": -1, "filename": "pypn-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f215665bde8795e92c1e01b54c8acc96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4890, "upload_time": "2017-02-01T14:47:02", "url": "https://files.pythonhosted.org/packages/ef/31/b308cf624191e3a97f73e12e167e528653c043234b4edac0a9272397f399/pypn-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d44a26ef4ae11cf3ea3cd63e10a276c9", "sha256": "7e11baaee5ea7588e6363830cb8eef2b3cd57ff4de0a08c19db7199ca83064b7" }, "downloads": -1, "filename": "pypn-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d44a26ef4ae11cf3ea3cd63e10a276c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4950, "upload_time": "2017-02-01T14:51:50", "url": "https://files.pythonhosted.org/packages/d0/f5/06cb3c6007413bc47a7579bb956af4f8977b32fc6a4da71eed10f2ab2b77/pypn-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6ed6d9adbfd4f291a03132586721f774", "sha256": "18e178ea2433f2c502e94a2fa49973e17c0ae4a9cd9e2fd1e2e914a515aec1b1" }, "downloads": -1, "filename": "pypn-0.3.0.tar.gz", "has_sig": false, "md5_digest": "6ed6d9adbfd4f291a03132586721f774", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4955, "upload_time": "2017-02-01T15:23:15", "url": "https://files.pythonhosted.org/packages/00/e3/0cff20b38a2a21ae7af2337fad31453156ff743d15cefe7ad1eb05767ea4/pypn-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "af4032802a78947eea9ba30f83eee5f5", "sha256": "a9e2622edcf0f5c0fa9f10b2342f49b34e9ee38bee2005831431ca7f900be298" }, "downloads": -1, "filename": "pypn-0.3.1.tar.gz", "has_sig": false, "md5_digest": "af4032802a78947eea9ba30f83eee5f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4890, "upload_time": "2017-02-01T17:04:24", "url": "https://files.pythonhosted.org/packages/ca/6e/3d570405581fc8ccc57c9c91f48f064e93531c5efd17750a25dfc263545c/pypn-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "e6529b2b1b77006c03947985dffa4559", "sha256": "847dffd5c5aa7f4fcc1a00dcd7c18c47d0e79620f4c918334b99b5ebc15af403" }, "downloads": -1, "filename": "pypn-0.3.2.tar.gz", "has_sig": false, "md5_digest": "e6529b2b1b77006c03947985dffa4559", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4906, "upload_time": "2017-02-02T12:27:30", "url": "https://files.pythonhosted.org/packages/f1/df/cfdd787dfa2021132434d39e63ddc634ce5689cb1fff2d779877460dfb0d/pypn-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "396c2b54aa0b9e7f5c82ada8c017197b", "sha256": "c92750d6ffa665db39c18be967c880879a3e4be0940abefd5821e2b9d7fb8a53" }, "downloads": -1, "filename": "pypn-0.3.3.tar.gz", "has_sig": false, "md5_digest": "396c2b54aa0b9e7f5c82ada8c017197b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4909, "upload_time": "2017-02-02T17:28:10", "url": "https://files.pythonhosted.org/packages/bd/62/cae0b59af006748328a91d28deb81155b2b00cdb6abea4626135d6f95c46/pypn-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "5ca7aa0366505ee053b9d83f3384b8cd", "sha256": "de532e153655af328ed27b59ea7b99c00c0639d3f5a1f75aeccbc190068108f4" }, "downloads": -1, "filename": "pypn-0.3.4.tar.gz", "has_sig": false, "md5_digest": "5ca7aa0366505ee053b9d83f3384b8cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4906, "upload_time": "2017-02-02T19:16:20", "url": "https://files.pythonhosted.org/packages/9c/5a/ebd0cc76ea73661c347fdc058ba64a701d232841e8c79f4ba6e6f17ced51/pypn-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "b7dcd4e3761416b47d9170d627839b66", "sha256": "140f0ba414a3921d6eb673667bb15f7a749f5acf7d390816d81cb928da32f5d7" }, "downloads": -1, "filename": "pypn-0.3.5.tar.gz", "has_sig": false, "md5_digest": "b7dcd4e3761416b47d9170d627839b66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5017, "upload_time": "2017-02-21T12:55:40", "url": "https://files.pythonhosted.org/packages/b2/b5/0865d957b2a46cb0149001a088735526cd528364ddce6fab44a4b38536be/pypn-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "6e10688c3385f710c6ac1b9cc63c2c7a", "sha256": "6b54687363149b22458af7bfa20a768ae4fce56e6058e66ec393d58a0bfba1b6" }, "downloads": -1, "filename": "pypn-0.3.6.tar.gz", "has_sig": false, "md5_digest": "6e10688c3385f710c6ac1b9cc63c2c7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5020, "upload_time": "2017-03-06T10:00:55", "url": "https://files.pythonhosted.org/packages/e0/0f/7ca1967cf5a0485c08857d2b6a6a1cf1886230340c4ab2b19b360d403753/pypn-0.3.6.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "346eecc8e45ade80f115a782b12d01d1", "sha256": "52a67caf2ace7b227fa297670f51142bbb0ea9d02b719f653b49ff14d512ef64" }, "downloads": -1, "filename": "pypn-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "346eecc8e45ade80f115a782b12d01d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7623, "upload_time": "2017-10-03T11:15:39", "url": "https://files.pythonhosted.org/packages/40/c1/5ef372bd2e599c2d5d752384ad3b2e5864121ae1a996fafd9d8c81ce293e/pypn-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d9bc6dec7f961e1a87e5e085b51f77c", "sha256": "a0143d91acd38b600853a531baf2fc66151e96d7a827133606510558b1035fe8" }, "downloads": -1, "filename": "pypn-0.4.tar.gz", "has_sig": false, "md5_digest": "0d9bc6dec7f961e1a87e5e085b51f77c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5130, "upload_time": "2017-10-03T11:15:41", "url": "https://files.pythonhosted.org/packages/b7/86/9ec3266e124a7c40ebb50dadef9ff41e1f703755404c1a85af9d5663c00c/pypn-0.4.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "f1ce06bc799d241ddd05985217a7f73f", "sha256": "7ac7eb853b1d4c11933eab0e4ab4422c2839bc90477fa0361dade8565c032b88" }, "downloads": -1, "filename": "pypn-0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "f1ce06bc799d241ddd05985217a7f73f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7672, "upload_time": "2017-10-05T09:55:06", "url": "https://files.pythonhosted.org/packages/12/3f/d65aeb6ff51a8191465aa8fb9a2a003dc98a9294464a2b4b85558aef5006/pypn-0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7ac423f777ba83b744066445ea8e83d", "sha256": "3cd140fa27e0085c2f89e066656e337eea56bf0f26b6e751ca5fc6239b3e3f8b" }, "downloads": -1, "filename": "pypn-0.9.tar.gz", "has_sig": false, "md5_digest": "a7ac423f777ba83b744066445ea8e83d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5185, "upload_time": "2017-10-05T09:55:08", "url": "https://files.pythonhosted.org/packages/91/f9/42d7f431df8f9c6d97ace5b492a0af7559dc9f5b3774df9ae4051cbefa9c/pypn-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f1ce06bc799d241ddd05985217a7f73f", "sha256": "7ac7eb853b1d4c11933eab0e4ab4422c2839bc90477fa0361dade8565c032b88" }, "downloads": -1, "filename": "pypn-0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "f1ce06bc799d241ddd05985217a7f73f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7672, "upload_time": "2017-10-05T09:55:06", "url": "https://files.pythonhosted.org/packages/12/3f/d65aeb6ff51a8191465aa8fb9a2a003dc98a9294464a2b4b85558aef5006/pypn-0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a7ac423f777ba83b744066445ea8e83d", "sha256": "3cd140fa27e0085c2f89e066656e337eea56bf0f26b6e751ca5fc6239b3e3f8b" }, "downloads": -1, "filename": "pypn-0.9.tar.gz", "has_sig": false, "md5_digest": "a7ac423f777ba83b744066445ea8e83d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5185, "upload_time": "2017-10-05T09:55:08", "url": "https://files.pythonhosted.org/packages/91/f9/42d7f431df8f9c6d97ace5b492a0af7559dc9f5b3774df9ae4051cbefa9c/pypn-0.9.tar.gz" } ] }