{
"info": {
"author": "Alexey Pirogov",
"author_email": "pirogov@bars-open.ru",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Natural Language :: Russian",
"Operating System :: OS Independent",
"Programming Language :: Python"
],
"description": "## PushMe\n\n### WTF?\n\n**PushMe** - \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437:\n\n- *Socket* \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440 *SockJS-Tornado*\n- \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 *Web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430* \u0432 *Socket-\u0441\u0435\u0440\u0432\u0435\u0440*. \u041e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c:\n\n - *SnakeMQ* - pure-python \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0425\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.\n\n- API \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c. \u041c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432:\n\n - *actions/views* *Web-\u0441\u0435\u0440\u0432\u0435\u0440\u0430*\n - \u0437\u0430\u0434\u0430\u0447\u0430\u0445 *Celery*\n - \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445\n\n### \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n\u0412\u0441\u0451 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e:\n\n pip install pushme\n\n### \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\n\n#### \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Tornado \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n\n\u0421\u0435\u0440\u0432\u0435\u0440 Tornado \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:\n\n python -m pushme.server [options]\n\n\u0421\u0435\u0440\u0432\u0435\u0440 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:\n\n python -m pushme.queue [options]\n\n\u041e\u043f\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e - \u0443\u043a\u0430\u0437\u0430\u0432 \u043a\u043b\u044e\u0447 ```--help```.\n\n```--mq-host```/```--mq-port``` \u0434\u043b\u044f \u0442\u043e\u0440\u043d\u0430\u0434\u043e, \u044d\u0442\u043e \u0445\u043e\u0441\u0442 \u0438 \u043f\u043e\u0440\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.\n\n\u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u043d\u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0442\u043e *\u043e\u0447\u0435\u0440\u0435\u0434\u044c* \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043d\u0430 ```localhost:4000```, \u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f *Tornado* \u0438 \u0442\u0443\u0434\u0435 \u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0448\u0435\u043d\u0438\u044f \u0438\u0437 *API*, \u0441\u0430\u043c \u0436\u0435 *Tornado* \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u043d\u0430 ```localhost:9999```.\n\n#### \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\n\n\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u043a\u0430:\n\n \n \n \n\n\u0413\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435:\n\n Ext.onReady(function(){\n ...\n //\n pushMeConnection.connect(\n 'http://localhost', // \u0445\u043e\u0441\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d Tornado\n 9999, // \u043f\u043e\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 Tornado\n 123 // id \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\n );\n });\n\n```id``` \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u0442\u044c\u043d\u044b\u043c!\n\n\u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0432 ```settings.INSTALLED_APPS``` \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:\n\n 'pushme',\n\n#### \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 API\n\n\u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435:\n\n from pushme.mq import get_sender\n sender = get_sender(\n 'snakemq', # backend \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n ('localhost', 4000) # \u0441\u043e\u043a\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n )\n sender.send(\n data='Hello!', # \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\n uid=123, # uid \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, None \u0434\u043b\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u043c\n topic='ping' # topic \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u043c.\u0431. None)\n )\n\n\u041d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435:\n\n // \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n var callbackId = pushMeConnection.subscribe(\n function(msg) {\n console.log(msg);\n },\n 'ping' // topic, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0449\u0435\u043d\u0438\u044f\n );\n ...\n // \u043e\u0442\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n pushMeConnection.unsubscribe(callbackId);\n\n\u0415\u0441\u043b\u0438 ```topic``` \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0430 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0412\u0441\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 topic \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c. \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u043a\u0430, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f:\n\n var fanout = pushMeConnection.subscribe(\n function(msg, topic) {\n console.log(topic, ':', msg);\n }};",
"description_content_type": null,
"docs_url": null,
"download_url": "UNKNOWN",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://bitbucket.org/barsgroup/pushme",
"keywords": null,
"license": "MIT",
"maintainer": null,
"maintainer_email": null,
"name": "m3-pushme",
"package_url": "https://pypi.org/project/m3-pushme/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/m3-pushme/",
"project_urls": {
"Download": "UNKNOWN",
"Homepage": "https://bitbucket.org/barsgroup/pushme"
},
"release_url": "https://pypi.org/project/m3-pushme/0.1.5/",
"requires_dist": null,
"requires_python": null,
"summary": "\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0443",
"version": "0.1.5"
},
"last_serial": 1237290,
"releases": {
"0.1.5": [
{
"comment_text": "",
"digests": {
"md5": "0fe09d78fcaa8b63a9e763a0c01f6dbf",
"sha256": "7d55902820512385d3451827f220ef3c3e521088cff0314ab9938befff1ccd89"
},
"downloads": -1,
"filename": "m3-pushme-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "0fe09d78fcaa8b63a9e763a0c01f6dbf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21012,
"upload_time": "2014-09-24T09:38:59",
"url": "https://files.pythonhosted.org/packages/76/6b/3f4a77f45eadcc70d1996bd909d2001e1626909f726a318708ae891d3500/m3-pushme-0.1.5.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "0fe09d78fcaa8b63a9e763a0c01f6dbf",
"sha256": "7d55902820512385d3451827f220ef3c3e521088cff0314ab9938befff1ccd89"
},
"downloads": -1,
"filename": "m3-pushme-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "0fe09d78fcaa8b63a9e763a0c01f6dbf",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21012,
"upload_time": "2014-09-24T09:38:59",
"url": "https://files.pythonhosted.org/packages/76/6b/3f4a77f45eadcc70d1996bd909d2001e1626909f726a318708ae891d3500/m3-pushme-0.1.5.tar.gz"
}
]
}