{ "info": { "author": "Pricing Assistant", "author_email": "contact@pricingassistant.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Other Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Utilities" ], "description": "# MRQ\n\n[![Build Status](https://travis-ci.org/pricingassistant/mrq.svg?branch=master)](https://travis-ci.org/pricingassistant/mrq) [![MIT License](https://img.shields.io/github/license/pricingassistant/mrq.svg)](LICENSE)\n\n[MRQ](http://pricingassistant.github.io/mrq) is a distributed task queue for python built on top of mongo, redis and gevent.\n\nFull documentation is available on [readthedocs](http://mrq.readthedocs.org/en/latest/)\n\n# Why?\n\nMRQ is an opinionated task queue. It aims to be simple and beautiful like [RQ](http://python-rq.org) while having performances close to [Celery](http://celeryproject.org)\n\nMRQ was first developed at [Pricing Assistant](http://pricingassistant.com) and its initial feature set matches the needs of worker queues with heterogenous jobs (IO-bound & CPU-bound, lots of small tasks & a few large ones).\n\n# Main Features\n\n * **Simple code:** We originally switched from Celery to RQ because Celery's code was incredibly complex and obscure ([Slides](http://www.slideshare.net/sylvinus/why-and-how-pricing-assistant-migrated-from-celery-to-rq-parispy-2)). MRQ should be as easy to understand as RQ and even easier to extend.\n * **Great [dashboard](http://mrq.readthedocs.org/en/latest/dashboard/):** Have visibility and control on everything: queued jobs, current jobs, worker status, ...\n * **Per-job logs:** Get the log output of each task separately in the dashboard\n * **Gevent worker:** IO-bound tasks can be done in parallel in the same UNIX process for maximum throughput\n * **Supervisord integration:** CPU-bound tasks can be split across several UNIX processes with a single command-line flag\n * **Job management:** You can retry, requeue, cancel jobs from the code or the dashboard.\n * **Performance:** Bulk job queueing, easy job profiling\n * **Easy [configuration](http://mrq.readthedocs.org/en/latest/configuration):** Every aspect of MRQ is configurable through command-line flags or a configuration file\n * **Job routing:** Like Celery, jobs can have default queues, timeout and ttl values.\n * **Builtin scheduler:** Schedule tasks by interval or by time of the day\n * **Strategies:** Sequential or parallel dequeue order, also a burst mode for one-time or periodic batch jobs.\n * **Subqueues:** Simple command-line pattern for dequeuing multiple sub queues, using auto discovery from worker side.\n * **Thorough [testing](http://mrq.readthedocs.org/en/latest/tests):** Edge-cases like worker interrupts, Redis failures, ... are tested inside a Docker container.\n * **Greenlet tracing:** See how much time was spent in each greenlet to debug CPU-intensive jobs.\n * **Integrated memory leak debugger:** Track down jobs leaking memory and find the leaks with objgraph.\n\n# Dashboard Screenshots\n\n![Job view](http://i.imgur.com/xaXmrvX.png)\n\n![Worker view](http://i.imgur.com/yYUMCbm.png)\n\n# Get Started\n\nThis 5-minute tutorial will show you how to run your first jobs with MRQ.\n\n## Installation\n\n - Make sure you have installed the [dependencies](dependencies.md) : Redis and MongoDB\n - Install MRQ with `pip install mrq`\n - Start a mongo server with `mongod &`\n - Start a redis server with `redis-server &`\n\n\n## Write your first task\n\nCreate a new directory and write a simple task in a file called `tasks.py` :\n\n```makefile\n$ mkdir test-mrq && cd test-mrq\n$ touch __init__.py\n$ vim tasks.py\n```\n\n```python\nfrom mrq.task import Task\nimport urllib2\n\n\nclass Fetch(Task):\n\n def run(self, params):\n\n with urllib2.urlopen(params[\"url\"]) as f:\n t = f.read()\n return len(t)\n```\n\n## Run it synchronously\n\nYou can now run it from the command line using `mrq-run`:\n\n```makefile\n$ mrq-run tasks.Fetch url http://www.google.com\n\n2014-12-18 15:44:37.869029 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...\n2014-12-18 15:44:37.880115 [DEBUG] mongodb_jobs: ... connected.\n2014-12-18 15:44:37.880305 [DEBUG] Starting tasks.Fetch({'url': 'http://www.google.com'})\n2014-12-18 15:44:38.158572 [DEBUG] Job None success: 0.278229s total\n17655\n```\n\n## Run it asynchronously\n\nLet's schedule the same task 3 times with different parameters:\n\n```makefile\n$ mrq-run --queue fetches tasks.Fetch url http://www.google.com &&\n mrq-run --queue fetches tasks.Fetch url http://www.yahoo.com &&\n mrq-run --queue fetches tasks.Fetch url http://www.wordpress.com\n\n2014-12-18 15:49:05.688627 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...\n2014-12-18 15:49:05.705400 [DEBUG] mongodb_jobs: ... connected.\n2014-12-18 15:49:05.729364 [INFO] redis: Connecting to Redis at 127.0.0.1...\n5492f771520d1887bfdf4b0f\n2014-12-18 15:49:05.957912 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...\n2014-12-18 15:49:05.967419 [DEBUG] mongodb_jobs: ... connected.\n2014-12-18 15:49:05.983925 [INFO] redis: Connecting to Redis at 127.0.0.1...\n5492f771520d1887c2d7d2db\n2014-12-18 15:49:06.182351 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...\n2014-12-18 15:49:06.193314 [DEBUG] mongodb_jobs: ... connected.\n2014-12-18 15:49:06.209336 [INFO] redis: Connecting to Redis at 127.0.0.1...\n5492f772520d1887c5b32881\n```\n\nYou can see that instead of executing the tasks and returning their results right away, `mrq-run` has added them to the queue named `fetches` and printed their IDs.\n\nNow start MRQ's dasbhoard with `mrq-dashboard &` and go check your newly created queue and jobs on [localhost:5555](http://localhost:5555/#jobs)\n\nThey are ready to be dequeued by a worker. Start one with `mrq-worker` and follow it on the dashboard as it executes the queued jobs in parallel.\n\n```makefile\n$ mrq-worker fetches\n\n2014-12-18 15:52:57.362209 [INFO] Starting Gevent pool with 10 worker greenlets (+ report, logs, adminhttp)\n2014-12-18 15:52:57.388033 [INFO] redis: Connecting to Redis at 127.0.0.1...\n2014-12-18 15:52:57.389488 [DEBUG] mongodb_jobs: Connecting to MongoDB at 127.0.0.1:27017/mrq...\n2014-12-18 15:52:57.390996 [DEBUG] mongodb_jobs: ... connected.\n2014-12-18 15:52:57.391336 [DEBUG] mongodb_logs: Connecting to MongoDB at 127.0.0.1:27017/mrq...\n2014-12-18 15:52:57.392430 [DEBUG] mongodb_logs: ... connected.\n2014-12-18 15:52:57.523329 [INFO] Fetching 1 jobs from ['fetches']\n2014-12-18 15:52:57.567311 [DEBUG] Starting tasks.Fetch({u'url': u'http://www.google.com'})\n2014-12-18 15:52:58.670492 [DEBUG] Job 5492f771520d1887bfdf4b0f success: 1.135268s total\n2014-12-18 15:52:57.523329 [INFO] Fetching 1 jobs from ['fetches']\n2014-12-18 15:52:57.567747 [DEBUG] Starting tasks.Fetch({u'url': u'http://www.yahoo.com'})\n2014-12-18 15:53:01.897873 [DEBUG] Job 5492f771520d1887c2d7d2db success: 4.361895s total\n2014-12-18 15:52:57.523329 [INFO] Fetching 1 jobs from ['fetches']\n2014-12-18 15:52:57.568080 [DEBUG] Starting tasks.Fetch({u'url': u'http://www.wordpress.com'})\n2014-12-18 15:53:00.685727 [DEBUG] Job 5492f772520d1887c5b32881 success: 3.149119s total\n2014-12-18 15:52:57.523329 [INFO] Fetching 1 jobs from ['fetches']\n2014-12-18 15:52:57.523329 [INFO] Fetching 1 jobs from ['fetches']\n```\n\nYou can interrupt the worker with Ctrl-C once it is finished.\n\n## Going further\n\nThis was a preview on the very basic features of MRQ. What makes it actually useful is that:\n\n* You can run multiple workers in parallel. Each worker can also run multiple greenlets in parallel.\n* Workers can dequeue from multiple queues\n* You can queue jobs from your Python code to avoid using `mrq-run` from the command-line.\n\nThese features will be demonstrated in a future example of a simple web crawler.\n\n\n# More\n\nFull documentation is available on [readthedocs](http://mrq.readthedocs.org/en/latest/)\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/pricingassistant/mrq", "keywords": "worker,task,distributed,queue,asynchronous,redis,mongodb,job,processing,gevent", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "mrq-custom", "package_url": "https://pypi.org/project/mrq-custom/", "platform": "any", "project_url": "https://pypi.org/project/mrq-custom/", "project_urls": { "Homepage": "http://github.com/pricingassistant/mrq" }, "release_url": "https://pypi.org/project/mrq-custom/0.9.21/", "requires_dist": [ "argparse (>=1.1)", "redis (==2.10.6)", "pymongo (>=3.0.1)", "gevent (>=1.2.2)", "ujson (>=1.33)", "hiredis (>=0.1.5)", "psutil (<6.0,>=5.1.2)", "objgraph (>=1.8.1)", "termcolor (>=1.1.0)", "future (>=0.15.2)", "hiro (==0.5)", "Flask (>=0.11.1)" ], "requires_python": "", "summary": "A simple yet powerful distributed worker task queue in Python", "version": "0.9.21" }, "last_serial": 5233746, "releases": { "0.9.12": [ { "comment_text": "", "digests": { "md5": "8e08baae691b447a0bc59677b8f3c18e", "sha256": "cd7c982218df24ccffcf3f58aaedf71b3ce32cfdd7030af593dacd9a97fc1910" }, "downloads": -1, "filename": "mrq_custom-0.9.12-py3-none-any.whl", "has_sig": false, "md5_digest": "8e08baae691b447a0bc59677b8f3c18e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562607, "upload_time": "2019-04-23T13:44:01", "url": "https://files.pythonhosted.org/packages/6e/0b/6bc2dd68abb1f0c299de5a7e89d0656be730753271b83643f2501459ba0c/mrq_custom-0.9.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "00d42a33e0d5055c3f1b0e0c262cf511", "sha256": "f659c68be06cfc2944fe96cf1fd6e219ad25529edb81e7b72a250484faa46528" }, "downloads": -1, "filename": "mrq-custom-0.9.12.tar.gz", "has_sig": false, "md5_digest": "00d42a33e0d5055c3f1b0e0c262cf511", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 534001, "upload_time": "2019-04-23T13:44:12", "url": "https://files.pythonhosted.org/packages/9f/f2/28f1eef34376c6dba9142869a980246fd842dd342929ef1f34ce5f7a74f6/mrq-custom-0.9.12.tar.gz" } ], "0.9.14": [ { "comment_text": "", "digests": { "md5": "2805f1b3807d11e4b5ceba138569fa70", "sha256": "5532130c74761a3ec042b85792d4c20e54e9728290237ecc3f54cc748ff0dde1" }, "downloads": -1, "filename": "mrq_custom-0.9.14-py3-none-any.whl", "has_sig": false, "md5_digest": "2805f1b3807d11e4b5ceba138569fa70", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562717, "upload_time": "2019-04-24T22:17:00", "url": "https://files.pythonhosted.org/packages/32/31/d2c826af65491273c78df03a5c7cfa21b78915824f514cbbf69856f563cf/mrq_custom-0.9.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87db80448ca84f6f6d43455e1ad58078", "sha256": "f940433b3f4bae881919c7da07261f490f4e9cadbd691905d0a589a1f5463f58" }, "downloads": -1, "filename": "mrq-custom-0.9.14.tar.gz", "has_sig": false, "md5_digest": "87db80448ca84f6f6d43455e1ad58078", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 535791, "upload_time": "2019-04-24T22:17:04", "url": "https://files.pythonhosted.org/packages/73/4e/bef6631880a6c604058bbe2ea27274bcb0a1e52cd8ae7b04191c3157035c/mrq-custom-0.9.14.tar.gz" } ], "0.9.15": [ { "comment_text": "", "digests": { "md5": "f8c01cb0775d65c60164309288a24d6a", "sha256": "d77f6c95e6d927f2d528bd156c424ef5c75715b185e6aa503076a122f7f25b4a" }, "downloads": -1, "filename": "mrq_custom-0.9.15-py3-none-any.whl", "has_sig": false, "md5_digest": "f8c01cb0775d65c60164309288a24d6a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 565989, "upload_time": "2019-04-25T20:22:52", "url": "https://files.pythonhosted.org/packages/18/b6/ec958c40a754d5ade912d2a6d4d7c7296c5d6369b4b77582e2b20f349146/mrq_custom-0.9.15-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bb2cf3cbbff6794635f91205f4d7a23", "sha256": "18677a65a8e7e4dcf370a59d1dfc1074769d4c467f7542a3506435518e75a0fc" }, "downloads": -1, "filename": "mrq-custom-0.9.15.tar.gz", "has_sig": false, "md5_digest": "1bb2cf3cbbff6794635f91205f4d7a23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 535831, "upload_time": "2019-04-25T20:22:57", "url": "https://files.pythonhosted.org/packages/21/86/e05e0e2a559b3e843086c632b1a3e53809154ab5f059d3beb9f1c4ab8370/mrq-custom-0.9.15.tar.gz" } ], "0.9.16": [ { "comment_text": "", "digests": { "md5": "fd1e0fbae74e429bccc5df2ddfafbbf0", "sha256": "f968d7bc6538536dc1e7d89f3810a5defa2875d8d6d4bee98b26248d5c9fea18" }, "downloads": -1, "filename": "mrq_custom-0.9.16-py3-none-any.whl", "has_sig": false, "md5_digest": "fd1e0fbae74e429bccc5df2ddfafbbf0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562754, "upload_time": "2019-04-26T09:36:40", "url": "https://files.pythonhosted.org/packages/3b/93/7736cbab3602277ea313f21b670a55ae7eb7db31b646e078994aebea03f8/mrq_custom-0.9.16-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f26d7f62c9f44892d05d961a97f406e", "sha256": "17f93b73ebec945547ff9d7125e3147d7f99302d73249f17840db390b7326b84" }, "downloads": -1, "filename": "mrq-custom-0.9.16.tar.gz", "has_sig": false, "md5_digest": "2f26d7f62c9f44892d05d961a97f406e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 537673, "upload_time": "2019-04-26T09:36:44", "url": "https://files.pythonhosted.org/packages/6f/91/5d882ac91eb83d696c0382b3dd021f9102f2c6f63ab635ad63371f573a3c/mrq-custom-0.9.16.tar.gz" } ], "0.9.17": [ { "comment_text": "", "digests": { "md5": "23e23fe4258b184fba789dbf43001a3a", "sha256": "f0cd9eee71579afbfb1ad2f4b674415934093e2389588e6de4b298565d88d5a3" }, "downloads": -1, "filename": "mrq_custom-0.9.17-py3-none-any.whl", "has_sig": false, "md5_digest": "23e23fe4258b184fba789dbf43001a3a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562754, "upload_time": "2019-04-26T09:54:20", "url": "https://files.pythonhosted.org/packages/90/99/18fbba62ecbce240561e73159c2bb0756fde60086a7a932b2c2e6d91e27a/mrq_custom-0.9.17-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e35f1ca46e1977c8e262df708bd811b", "sha256": "13e1d17a126d27f104294006be2f82003a3fe802cfbb7ecc5167bf2546ef85ec" }, "downloads": -1, "filename": "mrq-custom-0.9.17.tar.gz", "has_sig": false, "md5_digest": "8e35f1ca46e1977c8e262df708bd811b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 537679, "upload_time": "2019-04-26T09:54:24", "url": "https://files.pythonhosted.org/packages/71/5d/db2f13d8099ba4a105f8becaf3dbf222905b9253d0953fd4c714d46a993e/mrq-custom-0.9.17.tar.gz" } ], "0.9.18": [ { "comment_text": "", "digests": { "md5": "39189f561bb3b2224f9aac0d7888f764", "sha256": "6e982de73c11c37f15a2628102387332da996b86117b30b6f27c58bfe5b22b81" }, "downloads": -1, "filename": "mrq_custom-0.9.18-py3-none-any.whl", "has_sig": false, "md5_digest": "39189f561bb3b2224f9aac0d7888f764", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 566000, "upload_time": "2019-04-26T21:11:45", "url": "https://files.pythonhosted.org/packages/d2/e0/445a98a8760c86e26857e1bd72b4cb1e4d5e067813c8b5d420f2fe1ed7fc/mrq_custom-0.9.18-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "360e39e456957845c2eb4b86eea856c9", "sha256": "3728d46b382df34f2d0b9671bad596c6efebc4c8bcc8d7f0c1fe106379712b6f" }, "downloads": -1, "filename": "mrq-custom-0.9.18.tar.gz", "has_sig": false, "md5_digest": "360e39e456957845c2eb4b86eea856c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 535835, "upload_time": "2019-04-26T21:11:51", "url": "https://files.pythonhosted.org/packages/0c/3f/ee61e6b94dd65ec46e78c1824d47bfb43bb6f7272a8e0a928b8ee014f5ac/mrq-custom-0.9.18.tar.gz" } ], "0.9.19": [ { "comment_text": "", "digests": { "md5": "64b4958650a571f619b14da7ed819420", "sha256": "e851381f80d7b560a5a6b8d43c8eefce481066cfc0f3ce487ee9e8cccde1968d" }, "downloads": -1, "filename": "mrq_custom-0.9.19-py3-none-any.whl", "has_sig": false, "md5_digest": "64b4958650a571f619b14da7ed819420", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562782, "upload_time": "2019-04-28T12:00:50", "url": "https://files.pythonhosted.org/packages/5d/a7/9a0cc67d5e912b9977c5e4c27849fa242fda7564f22ed5cecba03b61f71c/mrq_custom-0.9.19-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4877b85fd2ccf4f92f3153c82105ffa", "sha256": "6e06b5f3874a88f77c205d7262a954bc233bb13425f2ab0e6b5f14befc685dd5" }, "downloads": -1, "filename": "mrq-custom-0.9.19.tar.gz", "has_sig": false, "md5_digest": "b4877b85fd2ccf4f92f3153c82105ffa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 537705, "upload_time": "2019-04-28T12:00:55", "url": "https://files.pythonhosted.org/packages/55/c3/3b0a4e1abc987572f351e3e94929760ac4fd85d1fd69ff6b6ed302abf53e/mrq-custom-0.9.19.tar.gz" } ], "0.9.20": [ { "comment_text": "", "digests": { "md5": "e802efdd9f85f1fa347d00ee3c61e2c6", "sha256": "97c5b15bf887f35ee93f64b7c51a3ca352759b8f318cc23703ba88b1df967bb2" }, "downloads": -1, "filename": "mrq_custom-0.9.20-py3-none-any.whl", "has_sig": false, "md5_digest": "e802efdd9f85f1fa347d00ee3c61e2c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562780, "upload_time": "2019-04-28T12:17:17", "url": "https://files.pythonhosted.org/packages/42/da/253b03e6223fdf8b130d39bfc046f4f313105f710c69b410387f30876c8a/mrq_custom-0.9.20-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7d2bd49ce3c2eb0cd8a1918f6c92538", "sha256": "45437c829ad2676f4c59913de746b5824c7e8e4d53b467060062b2dbe1c45889" }, "downloads": -1, "filename": "mrq-custom-0.9.20.tar.gz", "has_sig": false, "md5_digest": "f7d2bd49ce3c2eb0cd8a1918f6c92538", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 537699, "upload_time": "2019-04-28T12:17:22", "url": "https://files.pythonhosted.org/packages/3a/5a/740a87112f31b4b8744ca2b5fa00080f47eaf6a4dbe5600354ac6c99c54c/mrq-custom-0.9.20.tar.gz" } ], "0.9.21": [ { "comment_text": "", "digests": { "md5": "40f9819d91cec005ef0ad86ae4373eca", "sha256": "e9c7e901c72501398ccde42fb277fd62f64903800134068dfa8d0dbf360dfd62" }, "downloads": -1, "filename": "mrq_custom-0.9.21-py3-none-any.whl", "has_sig": false, "md5_digest": "40f9819d91cec005ef0ad86ae4373eca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562797, "upload_time": "2019-05-06T15:51:35", "url": "https://files.pythonhosted.org/packages/a1/f9/7fe40ea07d7b28a4a02252742ea11f556fd735989a154ee3277082eb3968/mrq_custom-0.9.21-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20a6f0535795b35665c48243420d5242", "sha256": "69f7defbdbb3a6c4b1b65c3d5310555751f03b967e2de9e504430432a22541d7" }, "downloads": -1, "filename": "mrq-custom-0.9.21.tar.gz", "has_sig": false, "md5_digest": "20a6f0535795b35665c48243420d5242", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 536376, "upload_time": "2019-05-06T15:51:39", "url": "https://files.pythonhosted.org/packages/5b/36/bd6f43523fb27dc3aca22ef2afbce015aa1e2dd1c717c6526fcdfd485688/mrq-custom-0.9.21.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "40f9819d91cec005ef0ad86ae4373eca", "sha256": "e9c7e901c72501398ccde42fb277fd62f64903800134068dfa8d0dbf360dfd62" }, "downloads": -1, "filename": "mrq_custom-0.9.21-py3-none-any.whl", "has_sig": false, "md5_digest": "40f9819d91cec005ef0ad86ae4373eca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 562797, "upload_time": "2019-05-06T15:51:35", "url": "https://files.pythonhosted.org/packages/a1/f9/7fe40ea07d7b28a4a02252742ea11f556fd735989a154ee3277082eb3968/mrq_custom-0.9.21-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20a6f0535795b35665c48243420d5242", "sha256": "69f7defbdbb3a6c4b1b65c3d5310555751f03b967e2de9e504430432a22541d7" }, "downloads": -1, "filename": "mrq-custom-0.9.21.tar.gz", "has_sig": false, "md5_digest": "20a6f0535795b35665c48243420d5242", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 536376, "upload_time": "2019-05-06T15:51:39", "url": "https://files.pythonhosted.org/packages/5b/36/bd6f43523fb27dc3aca22ef2afbce015aa1e2dd1c717c6526fcdfd485688/mrq-custom-0.9.21.tar.gz" } ] }