{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7" ], "description": "nose-picker\n===========\n\n**nose-picker** is a plugin that picks a subset of your unit tests (in django\ntoo!)\n\nThis plugin modifies nose's unit test discovery to only pick a (1/N) subset of\nunit tests to run. By passing in the ``--total-processes`` arguments, you pick\nthe denominator (the N above) which you want to run. The ``--which-process``\nargument controls which part of that subset to run, so if you had 5 subsets you\ncould pick 0, 1, 2, 3, or 4.\n\nHow does it work? Very simple! It hashes the filenames that nose is\nrunning through, does a modulo division by N, then sees if this file is \"its\".\nVery simple, but it lets you run multiple of these **nose-picker** enabled\nrunners in parallel, each running a separate subset of the unit tests!\n\nMotivation\n----------\n\nThe nose multiprocess plugin takes over the test runner when it runs, and thus\nis not amenable to environments where you need a custom test runner.\n**nose-picker** lets you keep your test runner!\n\nInstalling\n----------\n\nThrough ``pip``::\n\n pip install --user nose-picker\n\nSample Multiprocess Script\n--------------------------\n\nSomething like::\n\n def main():\n num_processes = int(multiprocessing.cpu_count() * 2.5)\n tests = []\n for i in range(num_processes):\n test_command = TEST_CMD_TEMPLATE % (\n i,\n num_processes,\n )\n tests.append(TestWatcher(test_command))\n\n returncode = 0\n for test_watcher in tests:\n test_watcher.join()\n if test_watcher.returncode > 0:\n returncode += test_watcher.returncode\n for line in test_watcher.stderr.splitlines():\n if not (\n line.endswith(' ... ok') or\n '... SKIP' in line\n ):\n sys.stderr.write(line + '\\n')\n\n return returncode\n\n\n class TestWatcher(threading.Thread):\n def __init__(self, command):\n super(TestWatcher, self).__init__()\n self.command = command\n self.stdout = ''\n self.stderr = ''\n self.start()\n self.returncode = 0\n\n def run(self):\n p = subprocess.Popen(\n self.command,\n shell=True,\n stdout=subprocess.PIPE,\n stderr=subprocess.PIPE,\n )\n self.stdout, self.stderr = p.communicate()\n self.returncode = p.returncode\n\nLicense\n-------\n\n**nose-picker** is copyright 2014 Eventbrite and Contributors, and is made\navailable under BSD-style license; see LICENSE for details.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/eventbrite/nose-picker", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "nose-picker", "package_url": "https://pypi.org/project/nose-picker/", "platform": "", "project_url": "https://pypi.org/project/nose-picker/", "project_urls": { "Homepage": "https://github.com/eventbrite/nose-picker" }, "release_url": "https://pypi.org/project/nose-picker/0.5.5/", "requires_dist": null, "requires_python": "", "summary": "nose plugin that picks a subset of your unit tests", "version": "0.5.5" }, "last_serial": 5513765, "releases": { "0.5": [ { "comment_text": "", "digests": { "md5": "84191d6b3b32c2b1565f2865b600d717", "sha256": "5158d0d617c0033659774a5347f52f7ee7ecbf4e5fb8cca775257a44ef1fbb85" }, "downloads": -1, "filename": "nose_picker-0.5-py2-none-any.whl", "has_sig": false, "md5_digest": "84191d6b3b32c2b1565f2865b600d717", "packagetype": "bdist_wheel", "python_version": "2.6", "requires_python": null, "size": 7638, "upload_time": "2014-06-04T15:55:25", "url": "https://files.pythonhosted.org/packages/cf/e8/8c306038a93547fa0948b103a4276e72926a4267cf1027da6a826110b726/nose_picker-0.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3da06ac7d6e700910024eb626d63ce9e", "sha256": "f6ed3ab42dcb85f61984f67f6594716bd5b08fcdccfb61fe13735823ea27355d" }, "downloads": -1, "filename": "nose-picker-0.5.tar.gz", "has_sig": false, "md5_digest": "3da06ac7d6e700910024eb626d63ce9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4070, "upload_time": "2014-06-04T15:55:13", "url": "https://files.pythonhosted.org/packages/dd/55/5b76b095f1392e09e2bafa65ea7731a051cce4e4a1b16c62cf03ac2b83c2/nose-picker-0.5.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "c1f85a579a4e297ea457ce84f8b75894", "sha256": "bbc2987ca389193030a0c3048c285766c5a3a6887b5eb48300652978e3074904" }, "downloads": -1, "filename": "nose-picker-0.5.1.tar.gz", "has_sig": false, "md5_digest": "c1f85a579a4e297ea457ce84f8b75894", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4382, "upload_time": "2014-06-10T23:41:58", "url": "https://files.pythonhosted.org/packages/f8/43/96bf3ac2914f44136d0ad8bc7b333a93af4d978efed7fecf28ed7b0a9476/nose-picker-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "cde733f75e636d5cd86c02557b052126", "sha256": "aebefe9ccb6ad7ea9c07e7c2c734dd4ab5d08bf46f53b9b25763a36c79b40056" }, "downloads": -1, "filename": "nose_picker-0.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cde733f75e636d5cd86c02557b052126", "packagetype": "bdist_wheel", "python_version": "2.6", "requires_python": null, "size": 8030, "upload_time": "2014-06-11T16:21:02", "url": "https://files.pythonhosted.org/packages/08/00/89f16ac35f8bd9bb74d5caeea49615fe0a9aa5e21ada2f4288cb61f246a3/nose_picker-0.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f45511b3ab99301eb4f0e02508b272e", "sha256": "e52415e5efc6beabf54b5c3c5c285e71f672981dae820460dd5405c7173f5673" }, "downloads": -1, "filename": "nose-picker-0.5.2.tar.gz", "has_sig": false, "md5_digest": "8f45511b3ab99301eb4f0e02508b272e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4557, "upload_time": "2014-06-11T16:20:59", "url": "https://files.pythonhosted.org/packages/df/72/1f6f20a3ee905fd77d18a7c22eb25308b1457aa86ee1f659ecaf83310126/nose-picker-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "327438f4efe896019a5c93be953ff154", "sha256": "c66ede03b33aa1db0462e4c7e14e992ceba83af6a4ff3588addc88584973d9f2" }, "downloads": -1, "filename": "nose_picker-0.5.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "327438f4efe896019a5c93be953ff154", "packagetype": "bdist_wheel", "python_version": "2.6", "requires_python": null, "size": 8035, "upload_time": "2014-06-11T17:01:19", "url": "https://files.pythonhosted.org/packages/36/78/205e1d0cb17b2f45d19cd1d4447b3bf7f655ff1f6544c528c057a2debc8f/nose_picker-0.5.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "33809b295dd26e2b9904f81bc9320dbb", "sha256": "486e628d2b1e6bf5f025200783c39f10dc50d198adf75107c0ed6e998845e077" }, "downloads": -1, "filename": "nose-picker-0.5.3.tar.gz", "has_sig": false, "md5_digest": "33809b295dd26e2b9904f81bc9320dbb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4560, "upload_time": "2014-06-11T17:01:17", "url": "https://files.pythonhosted.org/packages/e2/84/9304dda41d39df7939c9850d63b56a534ecacdffb6706dbd3f81c34fe77b/nose-picker-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "e30f972514c68bdedc0d3a0919c5c758", "sha256": "04b31ca254a4d53cb119fc43cd451ad3ace4c58acf995afe56d081ccf312d26b" }, "downloads": -1, "filename": "nose_picker-0.5.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e30f972514c68bdedc0d3a0919c5c758", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7225, "upload_time": "2019-07-05T17:29:30", "url": "https://files.pythonhosted.org/packages/e4/d7/be3a210de631e65d01d8925839086f925579c996020dcb20f294c6e29838/nose_picker-0.5.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bb081892ec814777fc78bde54896282", "sha256": "170360926e1fe23127c52ca00b637c3231af7dd27b5e25452247a755a10ec7bc" }, "downloads": -1, "filename": "nose-picker-0.5.4.tar.gz", "has_sig": false, "md5_digest": "6bb081892ec814777fc78bde54896282", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4646, "upload_time": "2019-07-05T17:29:31", "url": "https://files.pythonhosted.org/packages/15/ff/f60e344a29d064a0faed582ef586a5fbfd014ea6457817642c3dfc8d08e6/nose-picker-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "a1fa56da961ac09fb61035bae7c40ada", "sha256": "2dfe256f533f345fbefe899badcf4c4b1c10bac94b87e5bfd1caf900ebd16d32" }, "downloads": -1, "filename": "nose_picker-0.5.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a1fa56da961ac09fb61035bae7c40ada", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7247, "upload_time": "2019-07-10T20:02:44", "url": "https://files.pythonhosted.org/packages/6e/89/9b094e59fc801fd223ee7bf74ef88a010a46f3fbe37550d10b1649fa9c71/nose_picker-0.5.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "caf55f30267a019fdfe23e7d0bbbd3bc", "sha256": "e436ee03d9a7cfc2a8f1e918b44c7d977bf83333224d4c1842f2838753a386c2" }, "downloads": -1, "filename": "nose-picker-0.5.5.tar.gz", "has_sig": false, "md5_digest": "caf55f30267a019fdfe23e7d0bbbd3bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4678, "upload_time": "2019-07-10T20:02:45", "url": "https://files.pythonhosted.org/packages/5d/8a/f0f8548f4c30a54af9638982ecbb4c11c595a8bede04aa81e1d6f681ea27/nose-picker-0.5.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a1fa56da961ac09fb61035bae7c40ada", "sha256": "2dfe256f533f345fbefe899badcf4c4b1c10bac94b87e5bfd1caf900ebd16d32" }, "downloads": -1, "filename": "nose_picker-0.5.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a1fa56da961ac09fb61035bae7c40ada", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7247, "upload_time": "2019-07-10T20:02:44", "url": "https://files.pythonhosted.org/packages/6e/89/9b094e59fc801fd223ee7bf74ef88a010a46f3fbe37550d10b1649fa9c71/nose_picker-0.5.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "caf55f30267a019fdfe23e7d0bbbd3bc", "sha256": "e436ee03d9a7cfc2a8f1e918b44c7d977bf83333224d4c1842f2838753a386c2" }, "downloads": -1, "filename": "nose-picker-0.5.5.tar.gz", "has_sig": false, "md5_digest": "caf55f30267a019fdfe23e7d0bbbd3bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4678, "upload_time": "2019-07-10T20:02:45", "url": "https://files.pythonhosted.org/packages/5d/8a/f0f8548f4c30a54af9638982ecbb4c11c595a8bede04aa81e1d6f681ea27/nose-picker-0.5.5.tar.gz" } ] }