{ "info": { "author": "Mark Fink", "author_email": "mark@mark-fink.de", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6" ], "description": "|License| |GitHub issues|\n\nmetrics\n=======\n\nThe original idea of metrics was a platform that can be extended with\nmany different metrics. At the time I will focus only on SLOC and McCabe\ncomplexity metrics. *metrics* is build in a way to support many, many\nlanguages `supported languages `__.\nCurrently we test support for Python, C, C++, Go and JavaScript.\n\nThe SLOC metric counts the lines but excludes empty lines and comments.\nThis is sometimes referred to as the *source lines of code* (SLOC). In\nliterature this is often also referred as physical lines of code. I\nsimplified it to something which to my understanding is the common\ndenominator for the metric packages I looked into (CCCC, SLOCCount,\nPyMetrics, Eclipse-Metrics, Ohcount).\n\ninstallation\n============\n\n**metrics** is released as a Python package so you can apply the std.\nPython mechanism for installation:\n\n.. code:: bash\n\n $ pip install metrics\n\nSome plugins are available to collect information from a typical\ndevelopment environment. If you have a similar environment you can\ninstall them as well in one go:\n\n.. code:: bash\n\n $ pip install metrics metrics.bumpversion metrics.gitinfo metrics.pylint metrics.pytest-cov\n\nSample use\n==========\n\nGet an overview on a package (number of files, used languages, and\nmetrics):\n\n.. code:: bash\n\n $ metrics **/*\n Metrics Summary:\n Files Language SLOC Comment McCabe \n ----- ------------------------------ ----------- ------- ------ \n 6 C 14 3 0 \n 3 C++ 1114 236 108 \n 1 INI 5 0 0 \n 2 Java 27 8 1 \n 3 JavaScript 1453 54 169 \n 1 markdown 7 0 0 \n 18 Python 1038 425 238 \n 11 Text only 0 0 0 \n ----- ------------------------------ ----------- ------- ------ \n 45 Total 3658 726 516 \n\nNote how you can use glob file pattern or a list of files\u2026\n\nUsage help:\n\n.. code:: bash\n\n $ metrics --help\n Options:\n --version show program's version number and exit\n -h, --help show this help message and exit\n -f IN_FILE_LIST, --files=IN_FILE_LIST\n File containing list of path names to modules for\n analysis.\n -q, --quiet suppress normal summary output to stdout. (Default is\n False)\n --format=OUTPUT_FORMAT_STR\n Choose an output format for a parser to read. Valid\n choices: xml, csv, json\n\nGet a detailed report:\n\n.. code:: bash\n\n $ metrics -q --format=csv metrics/metrics.py\n filename,sloc,comments,ratio_comment_to_code,mccabe,language\n metrics/metrics.py,21,14,0.67,1,Python\n\nSame detailed report but output to csv file:\n\n.. code:: bash\n\n $ metrics -q --format=csv metrics/metrics.py > output.csv\n\nPlugins for metrics\n===================\n\nSome plugins are available to collect information from a typical\ndevelopment environment. Please visit the plugin page for details:\n\n- `version from\n .bumpversion.cfg `__\n- `Git changes, commiters,\n \u2026 `__\n- `Pylint lint score `__\n- `test coverage `__\n\nSample \u201c.metrics\u201d file results (with plugins installed)\n\n.. code:: json\n\n {\n \"build\": {\n \"active_branch\": \"master\",\n \"committed_datetime\": \"2018-04-28T12:19:14+02:00\",\n \"committed_ts\": 1524910754,\n \"committers\": [\n \"mark\"\n ],\n \"origin\": \"git@github.com:markfink/metrics.gitinfo.git\",\n \"sha\": \"4c355c2f6ffef88252e565f6ef5006468e410187\",\n \"sha_start\": \"f7ba6f27ee8c34991acd3cd6ef14c8bd6ed9c34e\",\n \"summary\": \"Bump version: 0.0.4 \\u2192 0.0.5\",\n \"version\": \"0.0.5\"\n },\n \"files\": {\n \"metrics_gitinfo/__init__.py\": {\n \"age_days\": 25.81871527777778,\n \"block_positions\": [],\n \"change_frequency\": 6,\n \"comments\": 1,\n \"committers_count\": 1,\n \"language\": \"Python\",\n \"lines_added\": [\n 3\n ],\n \"lines_deleted\": [\n 3\n ],\n \"mccabe\": 0,\n \"pylint_score\": 5.0,\n \"ratio_comment_to_code\": 0.5,\n \"sloc\": 2,\n \"test_coverage\": 0.0,\n \"test_missing\": \"2-3\"\n },\n \"metrics_gitinfo/file_info.py\": {\n \"age_days\": 0.01931712962962963,\n \"block_positions\": [\n {\n \"end\": 17,\n \"name\": \"get_file_info\",\n \"start\": 5,\n \"type\": \"Function\"\n }\n ],\n \"change_frequency\": 1,\n \"comments\": 4,\n \"committers_count\": 1,\n \"language\": \"Python\",\n \"mccabe\": 1,\n \"pylint_score\": 10.0,\n \"ratio_comment_to_code\": 0.44,\n \"sloc\": 9,\n \"test_coverage\": 0.0,\n \"test_missing\": \"2-17\"\n },\n \"metrics_gitinfo/git_diff_muncher.py\": {\n \"age_days\": 24.06056712962963,\n \"block_positions\": [\n {\n \"end\": 17,\n \"name\": \"GitDiffError\",\n \"start\": 10,\n \"type\": \"Class\"\n },\n {\n \"end\": 81,\n \"name\": \"parse_diff_lines\",\n \"start\": 18,\n \"type\": \"Function\"\n },\n {\n \"end\": 111,\n \"name\": \"_parse_hunk_line\",\n \"start\": 82,\n \"type\": \"Function\"\n }\n ],\n \"change_frequency\": 1,\n \"comments\": 50,\n \"committers_count\": 1,\n \"language\": \"Python\",\n \"mccabe\": 15,\n \"pylint_score\": 9.56,\n \"ratio_comment_to_code\": 1.02,\n \"sloc\": 49,\n \"test_coverage\": 0.0,\n \"test_missing\": \"2-129\"\n },\n \"metrics_gitinfo/gitinfo.py\": {\n \"age_days\": 25.81871527777778,\n \"block_positions\": [\n {\n \"end\": 17,\n \"name\": \"get_file_processors\",\n \"start\": 13,\n \"type\": \"Function\"\n },\n {\n \"end\": 22,\n \"name\": \"get_build_processors\",\n \"start\": 18,\n \"type\": \"Function\"\n },\n {\n \"end\": 113,\n \"methods\": [\n {\n \"end\": 35,\n \"name\": \"_get_commits_contained\",\n \"start\": 31,\n \"type\": \"Function\"\n },\n {\n \"end\": 41,\n \"name\": \"_get_source_target\",\n \"start\": 36,\n \"type\": \"Function\"\n },\n {\n \"end\": 56,\n \"name\": \"_extract_info\",\n \"start\": 52,\n \"type\": \"Function\"\n },\n {\n \"end\": 88,\n \"name\": \"reset\",\n \"start\": 84,\n \"type\": \"Function\"\n },\n {\n \"end\": 105,\n \"name\": \"process_file\",\n \"start\": 89,\n \"type\": \"Function\"\n },\n {\n \"end\": 108,\n \"name\": \"get_metrics\",\n \"start\": 106,\n \"type\": \"Function\"\n },\n {\n \"end\": 113,\n \"name\": \"get_build_metrics\",\n \"start\": 109,\n \"type\": \"Function\"\n }\n ],\n \"name\": \"GitMetric\",\n \"start\": 23,\n \"type\": \"Class\"\n }\n ],\n \"change_frequency\": 7,\n \"comments\": 9,\n \"committers_count\": 1,\n \"language\": \"Python\",\n \"lines_added\": [\n 96\n ],\n \"lines_deleted\": [\n 66,\n 94,\n 97\n ],\n \"mccabe\": 8,\n \"pylint_score\": 9.06,\n \"ratio_comment_to_code\": 0.11,\n \"sloc\": 83,\n \"test_coverage\": 0.0,\n \"test_missing\": \"2-113\"\n },\n \"tests/__init__.py\": {\n \"age_days\": 24.099988425925925,\n \"block_positions\": [\n {\n \"end\": 10,\n \"name\": \"here\",\n \"start\": 9,\n \"type\": \"Function\"\n }\n ],\n \"change_frequency\": 1,\n \"comments\": 1,\n \"committers_count\": 1,\n \"language\": \"Python\",\n \"mccabe\": 0,\n \"pylint_score\": 3.33,\n \"ratio_comment_to_code\": 0.17,\n \"sloc\": 6,\n \"test_coverage\": 83.33,\n \"test_missing\": \"10\"\n },\n \"tests/test_metrics_gitinfo.py\": {\n \"age_days\": 22.091909722222223,\n \"block_positions\": [\n {\n \"end\": 19,\n \"name\": \"tempfolder\",\n \"start\": 11,\n \"type\": \"Function\"\n },\n {\n \"end\": 29,\n \"name\": \"test_metrics_gitinfo_no_git_repo\",\n \"start\": 20,\n \"type\": \"Function\"\n },\n {\n \"end\": 39,\n \"name\": \"test_metrics_gitinfo\",\n \"start\": 30,\n \"type\": \"Function\"\n },\n {\n \"end\": 47,\n \"name\": \"test_metrics_gitinfo_no_lastrun\",\n \"start\": 40,\n \"type\": \"Function\"\n }\n ],\n \"change_frequency\": 1,\n \"comments\": 2,\n \"committers_count\": 1,\n \"language\": \"Python\",\n \"mccabe\": 6,\n \"pylint_score\": 4.64,\n \"ratio_comment_to_code\": 0.07,\n \"sloc\": 29,\n \"test_coverage\": 100.0\n }\n }\n }\n\nAcknowledgements\n================\n\n- codebase originally based on grop.py by Jurgen Hermann (2001)\n- also based on PyMetrics by Reg. Charney to do Python complexity\n measurements (2007)\n- we use some sample programming language files for the test cases from\n Ohcount and Firefox\n\nLicense\n=======\n\nCopyright (c) 2017, 2018 Fink Labs GmbH and others. metrics is released\nunder the MIT License (see MIT_LICENSE).\n\n.. |License| image:: http://img.shields.io/badge/license-MIT-yellowgreen.svg\n :target: MIT_LICENSE\n.. |GitHub issues| image:: https://img.shields.io/github/issues/finklabs/metrics.svg?maxAge=2592000\n :target: https://github.com/finklabs/metrics/issues\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/finklabs/metrics/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "metrics", "package_url": "https://pypi.org/project/metrics/", "platform": "", "project_url": "https://pypi.org/project/metrics/", "project_urls": { "Homepage": "https://github.com/finklabs/metrics/" }, "release_url": "https://pypi.org/project/metrics/0.3.3/", "requires_dist": null, "requires_python": "", "summary": "metrics for Python, C, C++, Go and Javascript code (plugins for pylint, pytest-cov, and git available)", "version": "0.3.3" }, "last_serial": 3816675, "releases": { "0.1a2": [ { "comment_text": "", "digests": { "md5": "194a656bf2aa234d57afc3b276ddb7a2", "sha256": "c043812ab8b99dd5672c9bf55c777771ca0aaa91448f7cf5900573e82907e5d4" }, "downloads": -1, "filename": "metrics-0.1a2.tar.gz", "has_sig": false, "md5_digest": "194a656bf2aa234d57afc3b276ddb7a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10742, "upload_time": "2010-05-13T17:21:23", "url": "https://files.pythonhosted.org/packages/05/29/2619cb939f70525193a8c0c192ce661e99b2c4b0c8d4772d17af116ae0f9/metrics-0.1a2.tar.gz" } ], "0.1a3": [ { "comment_text": "", "digests": { "md5": "898d58cfcabb77480e33bb48ef6a3682", "sha256": "5747411e01fb82458f57f678555f0bccb44be06ecb8368a31aeb967b7e4b98a8" }, "downloads": -1, "filename": "metrics-0.1a3.tar.gz", "has_sig": false, "md5_digest": "898d58cfcabb77480e33bb48ef6a3682", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11750, "upload_time": "2010-05-16T19:47:15", "url": "https://files.pythonhosted.org/packages/92/9d/84be2ccdcd2a829ffcfe649ea9f2525e92c5f074cbb2ece13b41b3b8a6c5/metrics-0.1a3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f143f65baf8e91c213f4f90b678301f5", "sha256": "6d6596d66d5b94a36468b2d0f6ff1b6e0bbf90d3a8bccd0375d37a4e09a3aed2" }, "downloads": -1, "filename": "metrics-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f143f65baf8e91c213f4f90b678301f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10144, "upload_time": "2013-08-12T14:28:50", "url": "https://files.pythonhosted.org/packages/8c/12/d7e2ff2d5eea74fb2bd1b3ab066752e6f29fa95a35bf728129bc940d4d76/metrics-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "368ee6d365c5f40e049f1c1bc1a8c49c", "sha256": "46942b077ecded5dde077f3fcc407b73368eba357334a50127dbce5d688e5d96" }, "downloads": -1, "filename": "metrics-0.2.1.tar.gz", "has_sig": false, "md5_digest": "368ee6d365c5f40e049f1c1bc1a8c49c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10172, "upload_time": "2013-08-12T16:55:08", "url": "https://files.pythonhosted.org/packages/ac/f9/29d1c81de7a91b524481f9613bc4ec50a202503902e4470d070c74f9b1ae/metrics-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "aa48cb5eb07a69dab649a3a6aaafb89e", "sha256": "eede1880f4b1f407f7061871bf3413686cd20ba454073117402bbc178c382e44" }, "downloads": -1, "filename": "metrics-0.2.2.tar.gz", "has_sig": false, "md5_digest": "aa48cb5eb07a69dab649a3a6aaafb89e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10203, "upload_time": "2013-08-12T17:06:11", "url": "https://files.pythonhosted.org/packages/28/a7/f047bf12a06cb613d1d5f105a590529d244152db63f9363201857ae4c920/metrics-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "e9b528bdc346857b7d13ae501e9846c2", "sha256": "562a9d04be95d1971e03db4fe5bac3c90d62e58aa6c1dd5f35981ae8bd15cd60" }, "downloads": -1, "filename": "metrics-0.2.3.tar.gz", "has_sig": false, "md5_digest": "e9b528bdc346857b7d13ae501e9846c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12345, "upload_time": "2013-08-12T17:31:40", "url": "https://files.pythonhosted.org/packages/70/be/5f3df15e1aafbff4b134224c5aea60d37676f34d0d3ce543079584b5a61a/metrics-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "068768bbad7df95c7d0e50be0e07b1bd", "sha256": "64f611616f0a604f3394d02fa0d9fd3c7e5e3a9d08a44d1e00d61d2dccdc387d" }, "downloads": -1, "filename": "metrics-0.2.4.tar.gz", "has_sig": false, "md5_digest": "068768bbad7df95c7d0e50be0e07b1bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12347, "upload_time": "2013-08-12T17:37:54", "url": "https://files.pythonhosted.org/packages/ff/3a/2e214b7087a0e339c6b167cd4f57317fbbfdf3b4a9ab5e6de2dbea9253dd/metrics-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "e749fbbfb71e9da1df0e8f7eb24a9354", "sha256": "64be8eb400fe86cb87ff9b2f6fb783232f79c70c21a3aeab8a419d52a977da4e" }, "downloads": -1, "filename": "metrics-0.2.5.tar.gz", "has_sig": false, "md5_digest": "e749fbbfb71e9da1df0e8f7eb24a9354", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12362, "upload_time": "2013-08-12T17:49:07", "url": "https://files.pythonhosted.org/packages/3a/8a/8b696475efbdf8f31d508c647112eba23bde71bea74f259edc93b68d72db/metrics-0.2.5.tar.gz" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "3b8c419af353e4f8c8fd09e0f03fc233", "sha256": "116348a3de1bc353d877ed495ddce336a519f134c5a12327e78529ecc97739ca" }, "downloads": -1, "filename": "metrics-0.2.6.tar.gz", "has_sig": false, "md5_digest": "3b8c419af353e4f8c8fd09e0f03fc233", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12392, "upload_time": "2013-08-14T13:35:54", "url": "https://files.pythonhosted.org/packages/2d/ef/1248217be4e4343b4ffbcf6f1d3c1df298072ccdca38df2a412fe84d297b/metrics-0.2.6.tar.gz" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "023e07098723987eeb963b68456c7e1e", "sha256": "54c7a0969e3702ec64e99ede9ecfdfdad3ec7754ebe3e89e05918fd6c93ff40d" }, "downloads": -1, "filename": "metrics-0.2.7.tar.gz", "has_sig": false, "md5_digest": "023e07098723987eeb963b68456c7e1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12513, "upload_time": "2017-10-21T08:15:18", "url": "https://files.pythonhosted.org/packages/41/2b/db5b4fea1d165f78f859837517defd289fcfc81afb6f8a12e592aac515be/metrics-0.2.7.tar.gz" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "9d511317eaed6850ae2acf19dce06c10", "sha256": "95c47a7d3074d865f9d9d5a78b50929a25420d4230976b8a37ffdc13f6a6fa51" }, "downloads": -1, "filename": "metrics-0.2.8.tar.gz", "has_sig": false, "md5_digest": "9d511317eaed6850ae2acf19dce06c10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12983, "upload_time": "2017-10-21T08:40:20", "url": "https://files.pythonhosted.org/packages/d5/41/66eccfa54dd3f88c09472c44d80efdfdb249c0fd89e2e7c199643931d1c9/metrics-0.2.8.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "22a72bdf6f17e84932a8259d70ea617a", "sha256": "04f9c698a41303d30d09cd51066997ea18a862be6e1754ce0f5debbe3cc23872" }, "downloads": -1, "filename": "metrics-0.3.0.tar.gz", "has_sig": false, "md5_digest": "22a72bdf6f17e84932a8259d70ea617a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14851, "upload_time": "2018-04-06T08:26:04", "url": "https://files.pythonhosted.org/packages/45/51/71eea436e89be7118d083f62bb783071bac4c4889f044c509ec7aaae0c84/metrics-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "5db26dec94b9c1ba181c56da7649dfa9", "sha256": "2de5c001c571158bb8d6a82d063583a453c67d89a140b2e8684633354ffca552" }, "downloads": -1, "filename": "metrics-0.3.1.tar.gz", "has_sig": false, "md5_digest": "5db26dec94b9c1ba181c56da7649dfa9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14912, "upload_time": "2018-04-28T09:58:09", "url": "https://files.pythonhosted.org/packages/9f/c4/19a55f67677e6b41e03600fdb44c5c63e718543807c393c94011c73e7501/metrics-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "fc041901512e5a149ad4ee0269994940", "sha256": "9ad1cdfab8c6010b59ee88f579f43c3772fd2953f4ef5c6d41413196c99fa2e5" }, "downloads": -1, "filename": "metrics-0.3.2.tar.gz", "has_sig": false, "md5_digest": "fc041901512e5a149ad4ee0269994940", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18035, "upload_time": "2018-04-28T10:21:51", "url": "https://files.pythonhosted.org/packages/bb/a0/b019f3b26a2ad4246d67c5253b668d99f3674d15e10685af8b46922ca8e5/metrics-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "66e6c3c7cdc4b2959781ca53eab8829c", "sha256": "60a2bceea8b56f3c408c4ea5d2e9891f5ddb17e4754f7ebc3feb8844faef9ecf" }, "downloads": -1, "filename": "metrics-0.3.3.tar.gz", "has_sig": false, "md5_digest": "66e6c3c7cdc4b2959781ca53eab8829c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18073, "upload_time": "2018-04-28T10:58:56", "url": "https://files.pythonhosted.org/packages/01/ae/3ab18f2f3449f2e7931112c991ade9684eeddf96cea03ea7f662c01f0658/metrics-0.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "66e6c3c7cdc4b2959781ca53eab8829c", "sha256": "60a2bceea8b56f3c408c4ea5d2e9891f5ddb17e4754f7ebc3feb8844faef9ecf" }, "downloads": -1, "filename": "metrics-0.3.3.tar.gz", "has_sig": false, "md5_digest": "66e6c3c7cdc4b2959781ca53eab8829c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18073, "upload_time": "2018-04-28T10:58:56", "url": "https://files.pythonhosted.org/packages/01/ae/3ab18f2f3449f2e7931112c991ade9684eeddf96cea03ea7f662c01f0658/metrics-0.3.3.tar.gz" } ] }