{ "info": { "author": "Grig Gheorghiu and Michal Kwiatkowski", "author_email": "grig@gheorghiu.net and michal@trivas.pl", "bugtrack_url": null, "classifiers": [], "description": "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nCheesecake: How tasty is your code?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. contents:: **Table of Contents**\n\nSummary\n-------\n\nThe idea of the Cheesecake project is to rank Python packages based on various \nempirical \"kwalitee\" factors, such as:\n\n * whether the package can be downloaded from PyPI given its name\n * whether the package can be unpacked\n * whether the package can be installed into an alternate directory\n * existence of certain files such as README, INSTALL, LICENSE, setup.py etc.\n * percentage of modules/functions/classes/methods with docstrings\n * pylint score\n * ... and many others\n\nCurrently, the Cheesecake index is computed for invidual packages obtained \nthrough a variety of methods (detailed below). One of the goals of the \nCheesecake project is to automatically compute the Cheesecake index for \nall packages uploaded to the PyPI Cheese Shop (possibly at upload time) and \nto maintain a collection of Web pages with statistics related to the \nvarious indexes of the packages.\n\nCheesecake currently computes 3 types of indexes:\n\n * installability index\n * documentation index\n * code kwalitee index\n\nThe algorithms for computing each index type are detailed below.\n\nWhy Cheesecake?\n---------------\n\nThe concept of \"kwalitee\" originated in the Perl community. Here's a relevant\nquote:\n\n * It looks like quality, it sounds like quality, but it's not quite quality.*\n\nKwalitee is an empiric measure of how good a specific body of code is. It \ndefines quality indicators and measures the code along them. It is currently \nused by the `CPANTS Testing Service `_\nto evaluate the 'goodness' of CPAN packages.\n\nSince the Python package repository (aka `PyPI `_) \nis hosted at the Cheese Shop,\nit stands to reason that the quality indicator of a PyPI package should be \ncalled the Cheesecake index!\n\nUsage examples\n--------------\n\nTo compute the Cheesecake index for a given project, run the cheesecake_index\nscript from the command line and indicate either:\n\n * the package short name (e.g. twill) or\n * the package URL (e.g. http://darcs.idyll.org/~t/projects/twill-0.7.4.tar.gz) or\n * the package path on the file system (e.g. /tmp/twill-latest.tar.gz)\n\nIn all cases, the cheesecake script will attempt to download the package\nif necessary, then to unpack it in a sandbox directory (/tmp/cheesecake_sandbox \nby default). If either of these operations fails, the Cheesecake index for \nthe package will be 0. If the package can be successfully unpacked, the \ncheesecake script will compute the values for a variety of indexes detailed\nin the algorithm given at the end of this file.\n\nIf the package can be successfully downloaded and unpacked, a log file is\ncreated in the system /tmp directory and named .log (e.g. the log file \nfor twill-0.7.4.tar.gz is /tmp/twill-0.7.4.tar.gz.log).\nThe log file is automatically deleted after the Cheesecake index is\ncomputed, except for situations when errors have occured.\n\nCommand-line examples:\n\n 1. Compute the Cheesecake index for the Durus package by using setuptools\n utilities to download the package from PyPI::\n\n python cheesecake_index --name=Durus\n\n 2. Compute the Cheesecake index for the Durus package by indicating its URL::\n\n python cheesecake_index --url=http://www.mems-exchange.org/software/durus/Durus-3.1.tar.gz\n\n 3. Compute the Cheesecake index for the twill package by indicating its path \n on the local file system::\n\n python cheesecake_index --path=/tmp/twill-latest.tar.gz\n\n 4. To increase the verbosity of the output, use the -v or --verbose option. \n For more options, run cheesecake_index with -h or --help.\n\nRequirements\n------------\n\n* `pylint `_ is required for\n part of the code kwalitee index computation \n* `setuptools `_ is\n required for the installability index computation\n\nUnit tests\n----------\n\nWe use `nose `_ for automatic\ntesting of our project, so if you want to test Cheesecake on your machine, please\ninstall that first. Running the standard set of Cheesecake unit test is as easy as::\n\n python setup.py test\n\nThis command is equivalent to::\n\n nosetests --verbose --with-doctest --doctest-tests --include unit --exe\n\nWe also have a set of functional tests, which can be run by issuing this command::\n\n nosetests --verbose --include functional\n\nFunctional tests can take a bit longer to complete, as they test cheesecake_index\nscript as a whole (as opposed to testing modules and classes separately).\n\nIf you happen to find any of our tests failing, please don't hesitate to open a\nticket on GitHub.\n\nMailing lists\n-------------\n\n* Developer mailing list: http://lists2.idyll.org/listinfo/cheesecake-dev\n* User mailing list: http://lists2.idyll.org/listinfo/cheesecake-users\n\nLicense\n-------\n\nCheesecake is licensed under the Python Software Foundation license, \nthe same license that governs Python itself. The text of the license is\navailable in the ``LICENSE`` file in the source code distribution and\ncan also be downloaded from \nhttp://www.opensource.org/licenses/PythonSoftFoundation.php.\n\nAuthors contact info\n--------------------\n\nGrig Gheorghiu\n\n:Email: \n:Web site: http://agiletesting.blogspot.com\n\nMichal Kwiatkowski\n\n:Email: \n:Web site: http://trivas.pl\n\nNote: clipart for the cheesecake slice logo used with permission from\nKazumi Hatasa, Director, the Japanese School at Middlebury College,\nPurdue University.\n\nAlgorithm for computing the Cheesecake index\n--------------------------------------------\n\nThe overall Cheesecake score is the sum of values of 3 main indexes\n(installability, documentation and code kwalitee). The values of these\nindexes rely on values of their subindexes and so on. The whole index tree\nand corresponding values for each leaf are presented below:\n\n* Installability\n\n * package is listed on and can be downloaded from PyPI: 50\n * package can be downloaded from given URL: 25\n * package can be unpacked without problems: 25\n * unpacked package directory is the same as package name: 15\n * package has setup.py: 25\n * package can be installed to given directory via \"setup.py install\": 50\n * package contains generated files, like .pyc: -20\n\n* Documentation\n\n * package contains files listed below\n\n * README: 30\n * LICENCE/COPYING: 30 [#oneof]_\n * ANNOUNCE/CHANGELOG: 20 [#oneof]_\n * INSTALL: 20\n * AUTHORS: 10\n * FAQ: 10\n * NEWS: 10\n * THANKS: 10\n * TODO: 10\n\n * package contains directories listed below\n\n * doc/docs: 30 [#oneof]_\n * test/tests: 30 [#oneof]_\n * demo/example/examples: 10 [#oneof]_\n\n * code is documented by docstrings: 100 [#docstrings]_\n * docstrings have proper formatting (like epytext or reST): 30 [#formatted]_\n\n* Code Kwalitee\n\n * package has high pylint score: 50\n * package has unit tests: 30\n * (optional) package doesn't follow PEP8 conventions [#PEP8]_: -2 for each error type and -1 for each warning type\n\nThe final score depends on how well the package scores for all indexes\nlisted above. The score is presented in absolute range (number of points)\nand relative (percent of points obtained compared to maximum possible points).\n\n.. [#oneof] It is enough for a package to contain only one of listed files.\n.. [#docstrings] Number of points is proportional to percent of documentable objects\n (module, class or function) that have docstrings. For example, if\n you have 50 documentable objects and 32 of them have docstrings\n your code will get 64 points (because 64% of objects are documented).\n.. [#formatted] Number of points depends on number of docstrings that are found\n to contain one of known markup. Currently ReST, epytext and javadoc are\n recognized. We give 10 points for 25% of formatted docstrings, 20 points\n for 50% and 30 points for 75%.\n.. [#PEP8] PEP8 defines a good coding style for Python, see\n `PEP8 document `_ for details.\n\nSample output\n-------------\n\n::\n\n $ python cheesecake_index -n nose --with-pep8\n py_pi_download ......................... 50 (downloaded package nose-0.9.1.tar.gz following 1 link from http://somethingaboutorange.com/mrl/projects/nose/nose-0.9.1.tar.gz)\n unpack ................................. 25 (package unpacked successfully)\n unpack_dir ............................. 15 (unpack directory is nose-0.9.1 as expected)\n setup.py ............................... 25 (setup.py found)\n install ................................ 50 (package installed in /tmp/cheesecakeOzL_mb/tmp_install_nose-0.9.1)\n generated_files ........................ 0 (0 .pyc and 0 .pyo files found)\n ---------------------------------------------\n INSTALLABILITY INDEX (ABSOLUTE) ........ 165\n INSTALLABILITY INDEX (RELATIVE) ........ 100 (165 out of a maximum of 165 points is 100%)\n\n required_files ......................... 110 (4 files and 2 required directories found)\n docstrings ............................. 43 (found 139/329=42.25% objects with docstrings)\n formatted_docstrings ................... 0 (found 53/329=16.11% objects with formatted docstrings)\n ---------------------------------------------\n DOCUMENTATION INDEX (ABSOLUTE) ......... 153\n DOCUMENTATION INDEX (RELATIVE) ......... 44 (153 out of a maximum of 350 points is 44%)\n\n unit_tested ............................ 30 (has unit tests)\n pylint ................................. 37 (pylint score was 7.29 out of 10)\n pep8 ................................... -16 (pep8.py check: 7 error types, 2 warning types)\n ---------------------------------------------\n CODE KWALITEE INDEX (ABSOLUTE) ......... 51\n CODE KWALITEE INDEX (RELATIVE) ......... 64 (51 out of a maximum of 80 points is 64%)\n\n\n =============================================\n OVERALL CHEESECAKE INDEX (ABSOLUTE) .... 369\n OVERALL CHEESECAKE INDEX (RELATIVE) .... 62 (369 out of a maximum of 595 points is 62%)\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pycheesecake.org/", "keywords": "cheesecake quality index kwalitee cheeseshop pypi", "license": "PSF", "maintainer": null, "maintainer_email": null, "name": "Cheesecake", "package_url": "https://pypi.org/project/Cheesecake/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Cheesecake/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://pycheesecake.org/" }, "release_url": "https://pypi.org/project/Cheesecake/0.6.2/", "requires_dist": null, "requires_python": null, "summary": "Computes \"goodness\" index for Python packages based on various empirical \"kwalitee\" factors", "version": "0.6.2" }, "last_serial": 2088540, "releases": { "0.6": [ { "comment_text": "", "digests": { "md5": "c5ceca8b26ddaf211ca49132229bcc65", "sha256": "741ab02536bde6917fa7530d8288bc9c93ad2c96345950ee214ebd30dd61fdca" }, "downloads": -1, "filename": "Cheesecake-0.6-py2.3.egg", "has_sig": false, "md5_digest": "c5ceca8b26ddaf211ca49132229bcc65", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 336232, "upload_time": "2006-08-15T16:59:10", "url": "https://files.pythonhosted.org/packages/3d/76/bd2b964d1c1f485978004731b714d9d764a9e1e1f9b29695b1ddc7a71391/Cheesecake-0.6-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "a2f7317992a512dad246a2c40ce7e8a6", "sha256": "a37303912404bd25565ad16aaff592eff0eba9229f5919c2dd40203d29ed5aaf" }, "downloads": -1, "filename": "Cheesecake-0.6-py2.4.egg", "has_sig": false, "md5_digest": "a2f7317992a512dad246a2c40ce7e8a6", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 96736, "upload_time": "2006-08-15T16:59:38", "url": "https://files.pythonhosted.org/packages/d2/6a/0ae2114656515b82d7e3c7d3c0736cf64dc9ad70e4111bff8779a19577cb/Cheesecake-0.6-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "c676092195d9c4544a36d46311a0eca9", "sha256": "79b6f2a82efdb96015e08c4a954cb3de79901414fc3d392dbbde551cdfd14ff0" }, "downloads": -1, "filename": "cheesecake-0.6.tar.gz", "has_sig": false, "md5_digest": "c676092195d9c4544a36d46311a0eca9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 304861, "upload_time": "2006-08-15T17:00:18", "url": "https://files.pythonhosted.org/packages/e3/79/1e6df08f271ffc6b25a8133cbb8de1ed8cd66ea406ec9f64d66bbc8d48de/cheesecake-0.6.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "6a19de9385bf0a0e61d5820f5b4be748", "sha256": "d1ed46a2b6a3adab1537dd8d4dae83f49145beb2e260d6d8afc44c98b914b06a" }, "downloads": -1, "filename": "Cheesecake-0.6.1-py2.3.egg", "has_sig": false, "md5_digest": "6a19de9385bf0a0e61d5820f5b4be748", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 402119, "upload_time": "2007-02-09T01:32:50", "url": "https://files.pythonhosted.org/packages/8e/6f/7fd20b306bde6cd3438ed295db85adc6e2663a941c4c6b921fc2b63df25f/Cheesecake-0.6.1-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "a3bd1eb4d01eacf731a53359ba940829", "sha256": "f7d5f5baee588a1c692ed71da556e28d64717f387a413be517c36e26cb09d9b8" }, "downloads": -1, "filename": "Cheesecake-0.6.1-py2.4.egg", "has_sig": false, "md5_digest": "a3bd1eb4d01eacf731a53359ba940829", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 117791, "upload_time": "2007-02-09T01:33:13", "url": "https://files.pythonhosted.org/packages/bd/2a/5368e8c36be7b82a428278be27906f8f4061bf259b9176c7c19a035e9834/Cheesecake-0.6.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "f9e19123281f812e27674140bfb19b7e", "sha256": "97b759a8f1e78823d05ff058c88fd1b12d79105e893a3ec9a0de87bfb745a50f" }, "downloads": -1, "filename": "cheesecake-0.6.1.tar.gz", "has_sig": false, "md5_digest": "f9e19123281f812e27674140bfb19b7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 268576, "upload_time": "2007-02-09T01:32:13", "url": "https://files.pythonhosted.org/packages/3c/4e/eebe85f40cc4ab756073c5ffb6890d6133fd77802cc45031336ea3b38c0b/cheesecake-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "039c2225a45e3c691d105a3ca48ad6db", "sha256": "bbdfd1877b3266b32cc1f9973792b3f7e637600d84cadbb702851c3cecfa6ead" }, "downloads": -1, "filename": "Cheesecake-0.6.2-py2.7.egg", "has_sig": false, "md5_digest": "039c2225a45e3c691d105a3ca48ad6db", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 118140, "upload_time": "2016-04-28T11:29:21", "url": "https://files.pythonhosted.org/packages/25/7b/9b82c651c905eba23784da19391a6a9e7414cf63c5b8c3fa67b7412fa483/Cheesecake-0.6.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "6bc6bbede7a8f2ef29376d2f85c04ca1", "sha256": "da6e36c945540e998aa5e0016abccac40a679628c4423f79499f2c6f59506a21" }, "downloads": -1, "filename": "Cheesecake-0.6.2.tar.gz", "has_sig": false, "md5_digest": "6bc6bbede7a8f2ef29376d2f85c04ca1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51976, "upload_time": "2016-04-28T11:29:15", "url": "https://files.pythonhosted.org/packages/6f/5e/1b695f810a314262497c747a12751f247dff1d8b26e08746f6aba83d3482/Cheesecake-0.6.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "039c2225a45e3c691d105a3ca48ad6db", "sha256": "bbdfd1877b3266b32cc1f9973792b3f7e637600d84cadbb702851c3cecfa6ead" }, "downloads": -1, "filename": "Cheesecake-0.6.2-py2.7.egg", "has_sig": false, "md5_digest": "039c2225a45e3c691d105a3ca48ad6db", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 118140, "upload_time": "2016-04-28T11:29:21", "url": "https://files.pythonhosted.org/packages/25/7b/9b82c651c905eba23784da19391a6a9e7414cf63c5b8c3fa67b7412fa483/Cheesecake-0.6.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "6bc6bbede7a8f2ef29376d2f85c04ca1", "sha256": "da6e36c945540e998aa5e0016abccac40a679628c4423f79499f2c6f59506a21" }, "downloads": -1, "filename": "Cheesecake-0.6.2.tar.gz", "has_sig": false, "md5_digest": "6bc6bbede7a8f2ef29376d2f85c04ca1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51976, "upload_time": "2016-04-28T11:29:15", "url": "https://files.pythonhosted.org/packages/6f/5e/1b695f810a314262497c747a12751f247dff1d8b26e08746f6aba83d3482/Cheesecake-0.6.2.tar.gz" } ] }