{ "info": { "author": "Innokenty Lebedev", "author_email": "innlebedev@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP" ], "description": "# Sanic Server-Sent Events extension\n\nA Sanic extension for HTML5 [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) support, inspired by [flask-sse](https://github.com/singingwolfboy/flask-sse) and [aiohttp-sse](https://github.com/aio-libs/aiohttp-sse).\n\n## Install\n\nInstallation process as simple as:\n\n```bash\n$ pip install sanic_sse\n```\n\n## Example\n\nServer example:\n\n```python\nfrom http import HTTPStatus\nfrom sanic import Sanic\nfrom sanic.response import json, json_dumps\nfrom sanic.exceptions import abort\nfrom sanic_sse import Sse\n\n# This function is optional callback before sse request\n# You can use it for authorization purpose or something else\nasync def before_sse_request(request):\n if request.headers.get(\"Auth\", \"\") != \"some_token\":\n abort(HTTPStatus.UNAUTHORIZED, \"Bad auth token\")\n\n\nsanic_app = Sanic()\n\n# The default sse url is /sse but you can set it via init argument url.\nSse(\n sanic_app, url=\"/events\", before_request_func=before_sse_request\n) # or you can use init_app method\n\n\n@sanic_app.route(\"/send\", methods=[\"POST\"])\nasync def send_event(request):\n # if channel_id is None than event will be send to all subscribers\n channel_id = request.json.get(\"channel_id\")\n\n # optional arguments: event_id - str, event - str, retry - int\n # data should always be str\n # also you can use sse_send_nowait for send event without waiting\n try:\n await request.app.sse_send(json_dumps(request.json), channel_id=channel_id)\n except KeyError:\n abort(HTTPStatus.NOT_FOUND, \"channel not found\")\n\n return json({\"status\": \"ok\"})\n\n\nif __name__ == \"__main__\":\n sanic_app.run(host=\"0.0.0.0\", port=8000)\n```\n\nClient example (powered by [sseclient-py](https://github.com/mpetazzoni/sseclient) and [requests](https://github.com/requests/requests)):\n\n```python\nimport json\nimport pprint\nimport requests\nimport sseclient\n\nurl = \"http://127.0.0.1:8000/events\"\n# you may set channel_id parameter to receive special events\n# url = \"http://127.0.0.1:8000/events?channel_id=foo\"\n\nresponse = requests.get(url, stream=True)\nclient = sseclient.SSEClient(response)\nfor event in client.events():\n print(event.id)\n print(event.event)\n print(event.retry)\n pprint.pprint(json.loads(event.data))\n```\n\n## Requirements\n\n- [python](https://www.python.org/) 3.5+\n- [sanic](https://github.com/channelcat/sanic) 0.7.0+\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/inn0kenty/sanic_sse", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "sanic_sse", "package_url": "https://pypi.org/project/sanic_sse/", "platform": "", "project_url": "https://pypi.org/project/sanic_sse/", "project_urls": { "Homepage": "https://github.com/inn0kenty/sanic_sse" }, "release_url": "https://pypi.org/project/sanic_sse/0.2.1/", "requires_dist": [ "sanic>=18.12.0", "pylint; extra == \"dev\"", "mypy; extra == \"dev\"", "black; extra == \"dev\"", "pytest; extra == \"dev\"", "pytest-cov; extra == \"dev\"", "pytest-random-order; extra == \"dev\"", "pytest-asyncio; extra == \"dev\"", "bumpversion; extra == \"dev\"" ], "requires_python": ">=3.5", "summary": "Sanic sse package that adds Server-Sent Events compability to sanic application.", "version": "0.2.1" }, "last_serial": 4929220, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6ad0f70845fbe28bdaeef79978d5def4", "sha256": "3c100abc1f9a7c860f146db393d5582a50a3e539fd1514e22029930e273136bd" }, "downloads": -1, "filename": "sanic_sse-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6ad0f70845fbe28bdaeef79978d5def4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12486, "upload_time": "2018-08-16T18:23:05", "url": "https://files.pythonhosted.org/packages/13/44/c6bafb05df5550020d0a87b76d15a951b738fab86821c0bc9599d048c563/sanic_sse-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "277b211a8feb94d57de04f7a57d12b44", "sha256": "4170a7c8d003a1750bdb5d2d1a6d06ae9e23f2f3ecd86f02e4b4cf56c2e93a5c" }, "downloads": -1, "filename": "sanic_sse-0.1.0.tar.gz", "has_sig": false, "md5_digest": "277b211a8feb94d57de04f7a57d12b44", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6810, "upload_time": "2018-08-16T18:23:06", "url": "https://files.pythonhosted.org/packages/ab/cb/ba5ecaeaffce4cec421b66065d808327bc9758d36584906a78777b56d38f/sanic_sse-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "555b4d9c43bd657d9b5d9a3d9b4c72be", "sha256": "83bf86e9dd44ca34efa53ece443e64915806b2f306ad78dcd21c6a906b18bba5" }, "downloads": -1, "filename": "sanic_sse-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "555b4d9c43bd657d9b5d9a3d9b4c72be", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12702, "upload_time": "2018-08-17T09:38:11", "url": "https://files.pythonhosted.org/packages/45/e7/9d6966f149613739923dbe80cc70d9af63365a979d5c9cc1f0da700ca3b6/sanic_sse-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19a516ef8c008436aafa97929b3c8cce", "sha256": "1e6cb7dab0d0ca7e30cbf5fc3283159f5da0cf6a2e26c11786832a2c8a9f20cc" }, "downloads": -1, "filename": "sanic_sse-0.1.1.tar.gz", "has_sig": false, "md5_digest": "19a516ef8c008436aafa97929b3c8cce", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6879, "upload_time": "2018-08-17T09:38:12", "url": "https://files.pythonhosted.org/packages/e6/dc/a1d0a6e0d7fa7bb15a6a55d4c7b2fec55eb550df6386eea8a14b7d5e9170/sanic_sse-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4345c557828e45352f37f843d7ebeb21", "sha256": "22c9214f642467a671807d396a61b7f7640cf3e502de0721c3b85ba22a56a579" }, "downloads": -1, "filename": "sanic_sse-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4345c557828e45352f37f843d7ebeb21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 14666, "upload_time": "2018-08-17T10:34:48", "url": "https://files.pythonhosted.org/packages/44/d5/751e63c64fc01403e6f5d912a70aa9043b6ae55820da84b559893ce20e00/sanic_sse-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "393a79ab1de1cce3a10f0d87aac3832f", "sha256": "2ecf15c5c0fe531e363a7374b1a1e06a0a15cf08f551fc27ecc86979b139bc7c" }, "downloads": -1, "filename": "sanic_sse-0.2.0.tar.gz", "has_sig": false, "md5_digest": "393a79ab1de1cce3a10f0d87aac3832f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7072, "upload_time": "2018-08-17T10:34:49", "url": "https://files.pythonhosted.org/packages/fa/4a/7e29a5ba0b81517ab0aa7730d5c81636842483b19c11ce73b1d153d771c0/sanic_sse-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "6c00e857132318b3a5348c7df3033788", "sha256": "c0b52ab697566044ae2b82b46afb4129c444d4cb846bf314886fb554dcaff9ed" }, "downloads": -1, "filename": "sanic_sse-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6c00e857132318b3a5348c7df3033788", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 14770, "upload_time": "2019-03-12T09:23:57", "url": "https://files.pythonhosted.org/packages/c8/0e/e862dbe0e77ca7d84db24eb5206139498762e46ab0b1e3fa17fd08f48fbd/sanic_sse-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a0c23f81509c9a5d75226e9a40c2c92", "sha256": "3886cb22e7505ec6efe7af2680fe3d6d5bccec92fc4cf5f953bd363e6b7081a8" }, "downloads": -1, "filename": "sanic_sse-0.2.1.tar.gz", "has_sig": false, "md5_digest": "6a0c23f81509c9a5d75226e9a40c2c92", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7149, "upload_time": "2019-03-12T09:23:58", "url": "https://files.pythonhosted.org/packages/6c/35/59fde997f5f383350ed4d0439824ae5434da639fbbcf8c483694df787e96/sanic_sse-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6c00e857132318b3a5348c7df3033788", "sha256": "c0b52ab697566044ae2b82b46afb4129c444d4cb846bf314886fb554dcaff9ed" }, "downloads": -1, "filename": "sanic_sse-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6c00e857132318b3a5348c7df3033788", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 14770, "upload_time": "2019-03-12T09:23:57", "url": "https://files.pythonhosted.org/packages/c8/0e/e862dbe0e77ca7d84db24eb5206139498762e46ab0b1e3fa17fd08f48fbd/sanic_sse-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a0c23f81509c9a5d75226e9a40c2c92", "sha256": "3886cb22e7505ec6efe7af2680fe3d6d5bccec92fc4cf5f953bd363e6b7081a8" }, "downloads": -1, "filename": "sanic_sse-0.2.1.tar.gz", "has_sig": false, "md5_digest": "6a0c23f81509c9a5d75226e9a40c2c92", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 7149, "upload_time": "2019-03-12T09:23:58", "url": "https://files.pythonhosted.org/packages/6c/35/59fde997f5f383350ed4d0439824ae5434da639fbbcf8c483694df787e96/sanic_sse-0.2.1.tar.gz" } ] }