{ "info": { "author": "Matthew Wilkes", "author_email": "matthew@matthewwilkes.co.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Topic :: Software Development", "Topic :: System :: Software Distribution", "Topic :: Utilities" ], "description": "Mr. Parker\n==========\n\n\"With great power comes great responsibility\" - Uncle Ben\n\nBus Factor\n----------\n\nAt the 2009 Plone Conference the quote \"we usually think of buses as things that\nkill programmers\" was overheard. A few days later, at the sprint, it was noticed\nthat a few core packages for Plone 4.0 could only be released by one person.\nThis package is designed to combat this by ensuring that a given package has\nmore than a certain number of authorised admins on PyPI.\n\nSyntax\n------\n\nThis creates a console script called ``parker`` as follows:\n\n::\n\n parker [--factor=2] \n [--versions-cfg ] \n [--repository=http://pypi.python.org/pypi] [packagename(s)]\n\n:--factor: (also -f) This determines the minimum number of people that have access before an error is raised. The default is 2.\n:--versions-cfg: (also -c) If this option is provided a ``zc.buildout`` versions file will be parsed for the package names\n:--repository: (also -r) A repository URL that follows the baroque lookup logic assumptions\n:packagename(s): Required if --versions-cfg isn't specified. Contains one or more packages to check, space separated.\n\nBaroque Lookup Logic\n--------------------\n\nUnfortunately, the API doesn't allow us to find what users have access to a\npackage, so we need to screen scrape. We expect HTML of the following format:\n\n::\n\n
  • \n Package Index Owner:\n deo, smcmahon, MatthewWilkes\n
  • \n\n
  • \n Package Index Maintainer:\n JoeBob\n
  • \n\nThat is, a list element that contains Package Index : and a comma\nseparated list, once the tags have been removed.\n\nFirst, the li tags are extracted\n\n::\n\n (?<=li\\>)[\\S\\s]*?(?=\\<\\/li\\>)\n\nThen, the role name is extracted:\n\n::\n\n \"Package Index ([a-zA-Z]*)\"\n\nand the names are found with:\n\n::\n\n set(a[0] for a in re.compile(\"([a-zA-Z]+,?)+?\").findall(li) \n if a[0] not in ['Package','Index',rolename,'span','strong'])\n\nYes, it is ugly. I know. I wish there was an API for this, or that the markup\nwas easily scrape-able. For now, this will do.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://dev.plone.org/collective/browser/mr.parker", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "mr.parker", "package_url": "https://pypi.org/project/mr.parker/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/mr.parker/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://dev.plone.org/collective/browser/mr.parker" }, "release_url": "https://pypi.org/project/mr.parker/1.0/", "requires_dist": null, "requires_python": null, "summary": "Ensures that the PyPI bus factor for a package is above a certain threshold.", "version": "1.0" }, "last_serial": 795046, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "6cbc8cbf8db2f802aa1f1013544f028a", "sha256": "8c24d9b81ae4aa5b64d4dece1ae28d3f1a104cc728c15b876363db0ff2d95b69" }, "downloads": -1, "filename": "mr.parker-1.0.zip", "has_sig": true, "md5_digest": "6cbc8cbf8db2f802aa1f1013544f028a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9297, "upload_time": "2009-10-31T15:43:29", "url": "https://files.pythonhosted.org/packages/be/c0/a59ac031546ec19a694f858ebab319aebb5884618aeb631fb716b7971474/mr.parker-1.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6cbc8cbf8db2f802aa1f1013544f028a", "sha256": "8c24d9b81ae4aa5b64d4dece1ae28d3f1a104cc728c15b876363db0ff2d95b69" }, "downloads": -1, "filename": "mr.parker-1.0.zip", "has_sig": true, "md5_digest": "6cbc8cbf8db2f802aa1f1013544f028a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9297, "upload_time": "2009-10-31T15:43:29", "url": "https://files.pythonhosted.org/packages/be/c0/a59ac031546ec19a694f858ebab319aebb5884618aeb631fb716b7971474/mr.parker-1.0.zip" } ] }