{ "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" } ] }