{ "info": { "author": "Marcin Lulek", "author_email": "info@webreactor.eu", "bugtrack_url": null, "classifiers": [ "Framework :: Django", "Framework :: Flask", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Communications :: Chat", "Topic :: Communications :: Conferencing", "Topic :: Internet :: WWW/HTTP" ], "description": "# Channelstream\n\n[![Build Status]](https://travis-ci.org/Channelstream/channelstream)\n\nThis is a websocket-based communication server for python applications,\nyour applications communicate with it via simple JSON REST API.\n\nVisit http://channelstream.org for more information.\n\n## Installation and Setup\n\nObtain source from github and do:\n\n YOUR_PYTHON_ENV/bin/pip install channelstream\n\nGenerate new configuration:\n\n YOUR_PYTHON_ENV/bin/channelstream_utils make_config -o config.ini\n\nStart the server:\n\n YOUR_PYTHON_ENV/bin/channelstream -i config.ini\n\nThe server can be configured via ini files (channelstream -i filename), example:\n\n\n## Demos\n\nThis repository provides demonstrative applications on how to connect with the server\nand send information to clients.\n\nYou have a simple notification demo built on flask:\n\n cd demo/notification/\n YOUR_PYTHON_ENV/bin/pip install flask\n YOUR_PYTHON_ENV/bin/flask run\n\nNow you can open multiple browser windows to http://127.0.0.1:5000/ and test notifications.\n\nThere is also more complex chat application demo included, it showcases\nmultiple channel subscriptions, message edits and user state changing.\n\n YOUR_PYTHON_ENV/bin/python demo/chat/app.py\n\nOpen your browser and point it to following url:\n\n http://127.0.0.1:6543\n\nTo run the demo you will need to have the `requests` package installed in your environment.\n\n### Security and communication model\n\nChannelstream provides API explorer that you can use to interact with various\nendpoints, it is available by default under http://127.0.0.1:8000/api-explorer.\n\nTo send information client interacts only with your normal www application.\nYour app handled authentication and processing messages from client, then passed\nthem as signed message to channelstream server for broadcast.\n\nwebsocket client -> webapp (security and transformation happens here) -> REST call to socket server -> broadcast to other clients\n\nThis model is easy to implement, secure, easy to scale and allows all kind of\nlanguages/apps/work queues to interact with socket server.\n\nAll messages need to be signed with a HMAC of destination endpoint ::\n\n import requests\n from itsdangerous import TimestampSigner\n signer = TimestampSigner(SERVER_SECRET)\n sig_for_server = signer.sign('/connect')\n secret_headers = {'x-channelstream-secret': sig_for_server,\n 'Content-Type': 'application/json'}\n response = requests.post(url, data=json.dumps(payload),\n headers=secret_headers).json()\n\n## Data format and endpoints\n\nPlease consult API Explorer (http://127.0.0.1:8000/api-explorer) for in depth information\nabout endpoints.\n\nSome examples:\n\n* /connect **POST** connects users to the server\n* /subscribe **POST** Subscribes connection to new channels\n* /unsubscribe **POST** Removes connection from channels\n* /user_state **POST** set the state of specific user\n* /message **POST** Send message to channels and/or users\n* /message **DELETE** Delete message from history and emit changes\n* /message **PATCH** Edit existing message in history and emit changes\n* /channel_config **POST** Set channel configuration\n* /info **POST** Returns channel information\n\nClient API\n\n* /ws **GET** Handles websocket connections\n* /listen **GET** Handles long polling connections\n* /disconnect **GET** Permanently remove connection from server\n* /disconnect **POST** Permanently remove connection from server\n\n\nAdmin API\n\n* /admin/admin.json **GET** Return server information in json format for admin panel purposes\n* /admin/admin.json **POST** Return server information in json format for admin panel purposes\n\n### Responses to js client\n\nResponses to client are in form of **list** containing **objects**:\n\nexamples:\n\n**new message** ::\n\n {\n \"date\": \"2011-09-15T11:36:18.471862\",\n \"message\": MSG_PAYLOAD,\n \"type\": \"message\",\n \"user\": \"NAME_OF_POSTER\",\n \"channel\": \"CHAN_NAME\"\n }\n\n**presence info** ::\n\n {\n \"date\": \"2011-09-15T11:43:47.434905\",\n \"message\": {\"action\":\"joined/parted\"},\n \"type\": \"presence\",\n \"user\": \"NAME_OF_POSTER\",\n \"channel\": \"CHAN_NAME\"\n }\n\nCurrently following message types are emited: `message`, `message:edit`,\n`message:delete`, `presence`, `user_state_change`.\n\n[Build Status]: https://travis-ci.org/Channelstream/channelstream.svg?branch=master", "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/Channelstream/channelstream", "keywords": "websockets async communication chat notification django flask pyramid", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "channelstream", "package_url": "https://pypi.org/project/channelstream/", "platform": "", "project_url": "https://pypi.org/project/channelstream/", "project_urls": { "Homepage": "https://github.com/Channelstream/channelstream" }, "release_url": "https://pypi.org/project/channelstream/0.7.0/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Websocket server supporting channels/users communication", "version": "0.7.0" }, "last_serial": 5417543, "releases": { "0.0": [], "0.1": [ { "comment_text": "", "digests": { "md5": "5530102bc5c8641a77fd742940becc5e", "sha256": "92b4c38f135cc4d68380fed78521a1f4f3221531fc7f92b3658662d22486a253" }, "downloads": -1, "filename": "channelstream-0.1.tar.gz", "has_sig": false, "md5_digest": "5530102bc5c8641a77fd742940becc5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15526, "upload_time": "2014-10-09T22:21:46", "url": "https://files.pythonhosted.org/packages/c9/28/6888012580364f09a5089af99122c33da44ceacb2fe7c83b682e60a76d69/channelstream-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "9a5b479070cc52baa4ac3c0989d26657", "sha256": "9fb766ea6f257e65ff249bc19dceff76d4df562019a65f56ee05cc36762398bc" }, "downloads": -1, "filename": "channelstream-0.2.tar.gz", "has_sig": false, "md5_digest": "9a5b479070cc52baa4ac3c0989d26657", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14707, "upload_time": "2015-04-09T12:39:43", "url": "https://files.pythonhosted.org/packages/81/fc/8ff3084054ab76327315ba8ec344d5b492137c85b2d4d749b38ac6caf93f/channelstream-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "50b7858ab2351c2487762c6523351522", "sha256": "3500fcd01235f78a5839a3a0f205fdf320ee47a0c63b74045079a989c252dd1a" }, "downloads": -1, "filename": "channelstream-0.3.tar.gz", "has_sig": false, "md5_digest": "50b7858ab2351c2487762c6523351522", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15205, "upload_time": "2015-10-07T11:32:03", "url": "https://files.pythonhosted.org/packages/88/a7/c19fcdff0406a0be144db1f0e63361627a66fae0799a21cafa54a5cd4fbc/channelstream-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "282a089c4f2f8775ad6dbfa2a54f908c", "sha256": "da07674082e8258ff61c467109f679fa5d661685b67e949eba0e0ebe54f2df07" }, "downloads": -1, "filename": "channelstream-0.3.1.tar.gz", "has_sig": false, "md5_digest": "282a089c4f2f8775ad6dbfa2a54f908c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15238, "upload_time": "2015-10-07T13:34:29", "url": "https://files.pythonhosted.org/packages/d8/ea/34b68c8a3d1173d6d0d7f0a06c7f1b193134f56ef9193f7aa71f05a7f3bf/channelstream-0.3.1.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "37598823b37838964666450d74411a3e", "sha256": "d83c3ad7f1d49376aa6d039388ffdca0b9e6e574d46f065a01febbbe2d363a97" }, "downloads": -1, "filename": "channelstream-0.4.tar.gz", "has_sig": false, "md5_digest": "37598823b37838964666450d74411a3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16669, "upload_time": "2015-10-19T09:35:23", "url": "https://files.pythonhosted.org/packages/a9/df/408dcd880111fd5348f27d97d820f8087c8198c6e3972dd2bce6046ce553/channelstream-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "b46b3f04d82d0e63df1eaec51b0e2d9d", "sha256": "a75f8eca33310872402247978af5e1e129c2b0d184518624756096b3cad18f00" }, "downloads": -1, "filename": "channelstream-0.4.1.tar.gz", "has_sig": false, "md5_digest": "b46b3f04d82d0e63df1eaec51b0e2d9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19809, "upload_time": "2015-12-01T14:41:52", "url": "https://files.pythonhosted.org/packages/96/b8/56709bd36597c8d9910f68756f3160eff87143c1415c4e4645ad58c6723f/channelstream-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "5857cc2b1cef993088817ccc31285254", "sha256": "0213a26035652b79a33e6a8ee749d9f2f31fbc1a8b443caa8ae2e7a8ceb27d00" }, "downloads": -1, "filename": "channelstream-0.4.2.tar.gz", "has_sig": false, "md5_digest": "5857cc2b1cef993088817ccc31285254", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19816, "upload_time": "2015-12-08T10:50:41", "url": "https://files.pythonhosted.org/packages/91/e7/b5faffc810e5e31aa01e74e43f9d66aaf52034d03e54c2782c474cb3e8a7/channelstream-0.4.2.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "b077ad560312cfdd26fc99bcdd254ad8", "sha256": "68941f9b0a4cc130b79c8e9c3768aa905b5567cff7b6552aa0e77d82b701fed6" }, "downloads": -1, "filename": "channelstream-0.5.1.tar.gz", "has_sig": false, "md5_digest": "b077ad560312cfdd26fc99bcdd254ad8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20456, "upload_time": "2016-06-06T07:49:15", "url": "https://files.pythonhosted.org/packages/80/6c/00f8321e5dc1d301bbd47dcace0d50d7177e517cf7cbbf8d98c48742be7a/channelstream-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "1c5eb2a8a405be6f1073da94da6d81d3", "sha256": "359bf5316688341e54a881a7b331c2388fc7ec32a4f4818c92d3c1425b2775e1" }, "downloads": -1, "filename": "channelstream-0.5.2.tar.gz", "has_sig": false, "md5_digest": "1c5eb2a8a405be6f1073da94da6d81d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20621, "upload_time": "2016-08-03T10:14:36", "url": "https://files.pythonhosted.org/packages/2b/31/29a8e085cf5bf97fa88e7b947adabfc581a18a3463adf77fb6dada34a65f/channelstream-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "6b96c78c73ddade53375e68982d20dd6", "sha256": "fc498d20b54ea79235a4c038850111e601aa2b20003dfe7a59bf021284db471d" }, "downloads": -1, "filename": "channelstream-0.6.0.tar.gz", "has_sig": false, "md5_digest": "6b96c78c73ddade53375e68982d20dd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 404016, "upload_time": "2016-10-12T22:53:09", "url": "https://files.pythonhosted.org/packages/bc/82/526630a45f91a005b947d656e4b2a113895f44468838d444c718612d3e1f/channelstream-0.6.0.tar.gz" } ], "0.6.10": [ { "comment_text": "", "digests": { "md5": "8939962e28fa610f70832e7180a40a80", "sha256": "881459772245d695b8c4bfbbc0e16ab4451ed9cf1a2371a1398c441aad329c25" }, "downloads": -1, "filename": "channelstream-0.6.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8939962e28fa610f70832e7180a40a80", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 398095, "upload_time": "2018-11-08T00:24:42", "url": "https://files.pythonhosted.org/packages/1b/ce/4a354b3c9162e4e6bfbc8d10572659d25a92a69adc9bc235ac3e7c232bf9/channelstream-0.6.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8115261bc59191fb9230b9ed2cd6e2e4", "sha256": "42cf56ea47d65011fad9228da57c8aa396e57610374c115d06abbb4758d24582" }, "downloads": -1, "filename": "channelstream-0.6.10.tar.gz", "has_sig": false, "md5_digest": "8115261bc59191fb9230b9ed2cd6e2e4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 356761, "upload_time": "2018-11-08T00:24:44", "url": "https://files.pythonhosted.org/packages/4c/30/bfb637a7e261be7045589613e57a0c1f2655f3ce1385f254195eb6166d0c/channelstream-0.6.10.tar.gz" } ], "0.6.11": [ { "comment_text": "", "digests": { "md5": "244793e6dd61d2a391a0f479d421ce54", "sha256": "c2b3ab11efcdaf41a1a654c8a7ac77e12ef2be51c77dfdb5d9e0b80b7ba66bdf" }, "downloads": -1, "filename": "channelstream-0.6.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "244793e6dd61d2a391a0f479d421ce54", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 398121, "upload_time": "2019-01-31T20:56:04", "url": "https://files.pythonhosted.org/packages/83/20/dfe2cb75f02672ffffd7dd2f502bc3dc83731e42c3fce2c786f00b1e7758/channelstream-0.6.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da0a4ca545149c7a2c60e56451b1db67", "sha256": "5549fb4226d76eb9d1e9967ac19150ce92e39c8c1fe1b476655225a726fe009d" }, "downloads": -1, "filename": "channelstream-0.6.11.tar.gz", "has_sig": false, "md5_digest": "da0a4ca545149c7a2c60e56451b1db67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 356788, "upload_time": "2019-01-31T20:56:07", "url": "https://files.pythonhosted.org/packages/82/74/18ddbdd05c00cb992fc1cbbc25f7f6bd8c648e5ccfad7db20cd1c6b1169c/channelstream-0.6.11.tar.gz" } ], "0.6.12": [ { "comment_text": "", "digests": { "md5": "34ddcc739f09fa80bb9748fb93be3b18", "sha256": "6704f55d1ec111e2bc66afb827640588547ea71143feddd019f19464789dc714" }, "downloads": -1, "filename": "channelstream-0.6.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "34ddcc739f09fa80bb9748fb93be3b18", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 399949, "upload_time": "2019-02-05T19:30:01", "url": "https://files.pythonhosted.org/packages/46/9d/04bdc8a81c5058d448f1c61b0a4701bcd4bb0144a2c811c83a967e10edb8/channelstream-0.6.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "706a59a48a5f17e6d9f63a2ef0f35a01", "sha256": "46785ca6723f5bde8d08dfc1726ff621d5324505c0888fdbe49c77226902fa38" }, "downloads": -1, "filename": "channelstream-0.6.12.tar.gz", "has_sig": false, "md5_digest": "706a59a48a5f17e6d9f63a2ef0f35a01", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 354904, "upload_time": "2019-02-05T19:30:05", "url": "https://files.pythonhosted.org/packages/d5/bb/8cfd46e1a25438266cae57ac6ce847ad41a0a30bf0b3c37b59df5b9441c2/channelstream-0.6.12.tar.gz" } ], "0.6.13": [ { "comment_text": "", "digests": { "md5": "f546594c297b2a67eb54dd759fae6346", "sha256": "574816ceae001f34550565bcf82d9ae71da49036c8671c23eba67868dcf68319" }, "downloads": -1, "filename": "channelstream-0.6.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f546594c297b2a67eb54dd759fae6346", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 401605, "upload_time": "2019-02-07T10:42:45", "url": "https://files.pythonhosted.org/packages/3e/f0/0f622b441dd750305e529797edddac8f6cef3aac4c36045cce420206e3a4/channelstream-0.6.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74ab32af3e2947a9b1f492e5d14baa88", "sha256": "357fe33501fd79d53033b91ce01e1593851476a2a6220763d061a293e832b3cd" }, "downloads": -1, "filename": "channelstream-0.6.13.tar.gz", "has_sig": false, "md5_digest": "74ab32af3e2947a9b1f492e5d14baa88", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 356114, "upload_time": "2019-02-07T10:42:48", "url": "https://files.pythonhosted.org/packages/ca/5c/ffe5936fb546429b343d7f026ee767cf2fcbf881d51063d26196fda2d70a/channelstream-0.6.13.tar.gz" } ], "0.6.14": [ { "comment_text": "", "digests": { "md5": "eb4b5d59c8764a44b47dcb183a583b99", "sha256": "8927f44aae4dad80ee7bdaa184583e674ba73a5abbc8dd8ae68605515d7428b5" }, "downloads": -1, "filename": "channelstream-0.6.14-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "eb4b5d59c8764a44b47dcb183a583b99", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 401618, "upload_time": "2019-02-09T10:36:34", "url": "https://files.pythonhosted.org/packages/3e/3d/f449c44eb6d2d4e354bad4209387d09776e1662a60136562a50112b98b55/channelstream-0.6.14-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1aeab2580756b24823edf5da21166bdb", "sha256": "a389affc1f1e28b493f10800267b5b0be609e91303b6f8a966881999872cfe61" }, "downloads": -1, "filename": "channelstream-0.6.14.tar.gz", "has_sig": false, "md5_digest": "1aeab2580756b24823edf5da21166bdb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 356106, "upload_time": "2019-02-09T10:36:37", "url": "https://files.pythonhosted.org/packages/d4/2d/86d6757ccd06ce673ee224123471da3d45251d061da7c580bfc259bad853/channelstream-0.6.14.tar.gz" } ], "0.6.9": [ { "comment_text": "", "digests": { "md5": "bcc6b63ef4dc625140793ffd2a9a88a6", "sha256": "ced5f7609db83b4d56aae7bbe6f4013bd14b0aa79da9dbcdce29d85e5260b293" }, "downloads": -1, "filename": "channelstream-0.6.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bcc6b63ef4dc625140793ffd2a9a88a6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 398074, "upload_time": "2018-11-02T12:52:46", "url": "https://files.pythonhosted.org/packages/63/26/b1ab9bc9657569e232b77a7579c595d3d7113a08f2c5eec7ea1cd182a6fa/channelstream-0.6.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a13aedbdf49250c447cc107245275cc4", "sha256": "2c08b12a48351243a884e11c070d18b317101ab92941ac6957ee0b9ce7ca96de" }, "downloads": -1, "filename": "channelstream-0.6.9.tar.gz", "has_sig": false, "md5_digest": "a13aedbdf49250c447cc107245275cc4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 356591, "upload_time": "2018-11-02T12:52:49", "url": "https://files.pythonhosted.org/packages/40/f4/e60d42322d3bd07d7883403cdb871eed906a2b50e29ba650defa166f9f7c/channelstream-0.6.9.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "e0a969497cea5eba095e17c19e46b23c", "sha256": "429778f1e79aeb0bafc33e1b7dcc57d4659490405e144518d18802141226d8d6" }, "downloads": -1, "filename": "channelstream-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0a969497cea5eba095e17c19e46b23c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 616713, "upload_time": "2019-06-18T22:30:56", "url": "https://files.pythonhosted.org/packages/f5/3c/2b3ce50485e15c72de1c479664418cc871301a6b34e5009873c456feda49/channelstream-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eced2f7f680e7ac02f1b9e8b1ab16de6", "sha256": "c0cd609096f655be6844172d24cc6dbca78fb029c84ec7cb8c99ae51c57b84ed" }, "downloads": -1, "filename": "channelstream-0.7.0.tar.gz", "has_sig": false, "md5_digest": "eced2f7f680e7ac02f1b9e8b1ab16de6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 560135, "upload_time": "2019-05-18T13:01:19", "url": "https://files.pythonhosted.org/packages/02/cd/b3fd13453ed2f2a6f8da4652ba6577f45a619ddd9bc4d38625d3a697e657/channelstream-0.7.0.tar.gz" } ], "0.7.0rc1": [ { "comment_text": "", "digests": { "md5": "d129e2553484a666f097db41ccf6cc0e", "sha256": "6b88a5944cd8fa5db63c77986c96529cca241fbaa397afc3e2fe34428c459088" }, "downloads": -1, "filename": "channelstream-0.7.0rc1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d129e2553484a666f097db41ccf6cc0e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 616647, "upload_time": "2019-05-12T16:10:43", "url": "https://files.pythonhosted.org/packages/90/51/4c4138b55e9387eb9cacd0659fe5061535fceba4b2289720285a3697597e/channelstream-0.7.0rc1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a3f51e38e3aa36a86b9804d51657d48", "sha256": "3eae2931dc2f0433a26b4da329cd3c4e6235f561ac591ee35611f8f375b2d6a6" }, "downloads": -1, "filename": "channelstream-0.7.0rc1.tar.gz", "has_sig": false, "md5_digest": "8a3f51e38e3aa36a86b9804d51657d48", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 560262, "upload_time": "2019-05-12T16:10:46", "url": "https://files.pythonhosted.org/packages/c2/1b/22dbebad874c52dc1c599def2cf14f31dc7e049d04b6b69d78960807f5cc/channelstream-0.7.0rc1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e0a969497cea5eba095e17c19e46b23c", "sha256": "429778f1e79aeb0bafc33e1b7dcc57d4659490405e144518d18802141226d8d6" }, "downloads": -1, "filename": "channelstream-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e0a969497cea5eba095e17c19e46b23c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 616713, "upload_time": "2019-06-18T22:30:56", "url": "https://files.pythonhosted.org/packages/f5/3c/2b3ce50485e15c72de1c479664418cc871301a6b34e5009873c456feda49/channelstream-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eced2f7f680e7ac02f1b9e8b1ab16de6", "sha256": "c0cd609096f655be6844172d24cc6dbca78fb029c84ec7cb8c99ae51c57b84ed" }, "downloads": -1, "filename": "channelstream-0.7.0.tar.gz", "has_sig": false, "md5_digest": "eced2f7f680e7ac02f1b9e8b1ab16de6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 560135, "upload_time": "2019-05-18T13:01:19", "url": "https://files.pythonhosted.org/packages/02/cd/b3fd13453ed2f2a6f8da4652ba6577f45a619ddd9bc4d38625d3a697e657/channelstream-0.7.0.tar.gz" } ] }