{ "info": { "author": "rappdw", "author_email": "rappdw@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Version Control :: Git" ], "description": "[![Build Status](https://travis-ci.com/rappdw/tv-extract.svg?branch=master)](https://travis-ci.org/rappdw/tv-extract) [![Coverage Status](https://codecov.io/gh/rappdw/tv-extract/branch/master/graph/badge.svg)](https://codecov.io/gh/rappdw/tv-extract) [![PyPI - Version](https://img.shields.io/pypi/v/tv-extract.svg)](https://pypi.org/project/tv-extract/) [![PyPI - Wheel](https://img.shields.io/pypi/wheel/tv-extract.svg)](https://pypi.org/project/tv-extract/)\n\n\n# Team View - Extract (Data extraction for team analysis)\nExtract team analysis data from git (current) \nand other relevant sources (future).\n\n## Pre-requisites for Use\n\n1. [Tokei](https://github.com/Aaronepower/tokei) (This [fork](https://github.com/rappdw/tokei/network) has initial, \nrudementary, support for Jupyter notebooks). Tokei is used to collect metrics on volume of source based per source \nlanguage.\n\nIf you don't have rust installed and aren't currently using Tokei, We recommend utilizing the \n[team-view-extract](https://hub.docker.com/r/rappdw/team-view-extract/) docker image.\n\n## Setup\n\nA configuration file that defines the \"project\" for extract must be defined. The\nconfiguration file is json.\n\n**Example**:\n\n```json\n{\n \"extracts\": [\n {\n \"name\": \"Project 1\",\n \"repos\": [\n {\n \"name\": \"TeamView\",\n \"remote\": \"git@github.com:rappdw/TeamViewer.git\"\n },\n {\n \"name\": \"team-view-extract\",\n \"remote\": \"git@github.com:rappdw/team-viewer-extract.git\"\n }\n ],\n \"start_date\": \"2018-07-18\",\n \"end_date\": \"2018-08-31\"\n }\n ],\n \"output_path\": \"~/.local/share/cache/TeamView\",\n \"mailmap_file\": \"~/.local/share/cache/.mailmap\",\n \"logging\": 20\n}\n```\n\nMultiple extracts can be defined in a singl configuration file. `start_date`, `end_date`, `mailmap_file` and `logging` \nare all optional. `logging` defaults to info level. `start_date` defaults to beginning of project. `end_date` defaults\nto `today`. If no `mailmap_file` is specified, standard git configuration applies.\n\nA good way to create the mailmap file is to construct based on `git shortlog -sne` for each repository.\n\n## Results\n\nFor each extract specified in the configuration file, a sub-directory will be created in the directory spcified by \n`output_path`. The following files will be created:\n\n* author_totals.csv - Commit counts by author and repository (excluding merge commits)\n* loc.csv - File counts by language, commit and repository (commits to master branch only)\n* loc_delta.csv - File Counts by author, language, commit and repository (excluding merge commits)\n* prs.csv - Pull request by repo including duration between last commit to branch and merge to master\n* repo.csv - Current state of volume of code by language for each repo\n* revs.csv - Revision graph by repo\n\n## 'Temporary' Files\n`~/.local/share/cache` is used to cache temporary files including checkout of repos specified by extract and a cache of \nthe LOC revision history of each repo. If present this cache is updated on subsequent runs. If not present it is \nrecreated from scratch. \n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rappdw/tv-extract", "keywords": "library", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "tv-extract", "package_url": "https://pypi.org/project/tv-extract/", "platform": "", "project_url": "https://pypi.org/project/tv-extract/", "project_urls": { "Homepage": "https://github.com/rappdw/tv-extract" }, "release_url": "https://pypi.org/project/tv-extract/1.0.15/", "requires_dist": [ "gitpython", "multiprocessing-logging", "ordered-set", "dataclasses ; python_version < \"3.7\"", "wheel (>=0.30.0) ; extra == 'dev'", "twine ; extra == 'dev'", "pytest ; extra == 'test'", "pytest-cov ; extra == 'test'" ], "requires_python": "", "summary": "Team Viewer - Data Extract for analysis", "version": "1.0.15" }, "last_serial": 5125533, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "a8c32725860ab62a03e0562d04209bbe", "sha256": "3c9391bbc2fc418fe1a9b3629ff5bf1a9884c730759802c1db4bbc9877d043bb" }, "downloads": -1, "filename": "tv_extract-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a8c32725860ab62a03e0562d04209bbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14823, "upload_time": "2018-07-20T23:07:58", "url": "https://files.pythonhosted.org/packages/42/17/cdce2df580d0b1f369fd35717f407aea6ad48d82df0aa35a21980644eb2e/tv_extract-1.0.1-py3-none-any.whl" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "47ba428de3d609b3293272427f03f941", "sha256": "2a2ed72a40947bade3dd5e86f81b97e9a5e0ecff8a7e7a3c35b13be94b8c67cc" }, "downloads": -1, "filename": "tv_extract-1.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "47ba428de3d609b3293272427f03f941", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16968, "upload_time": "2019-03-22T18:33:57", "url": "https://files.pythonhosted.org/packages/7c/a8/c31821bd08aa42478c54e724bf96292719f3ccd69f1a939b85b39992d0fe/tv_extract-1.0.10-py3-none-any.whl" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "be4b3368682384c20987e716757517ea", "sha256": "e578d24b1dd75a6e255e7e123195fd081540ce706cdb10d27ed60afb2914a3dd" }, "downloads": -1, "filename": "tv_extract-1.0.11-py3-none-any.whl", "has_sig": false, "md5_digest": "be4b3368682384c20987e716757517ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17003, "upload_time": "2019-03-22T19:26:02", "url": "https://files.pythonhosted.org/packages/9e/c7/071dd9cb464156517021152a47484f7d66d56ac83e283755b2b5de406f8a/tv_extract-1.0.11-py3-none-any.whl" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "77eaa21296da59662d51fbe38512b800", "sha256": "d494314ad3b3abae88c3c98405cb1d622115c82e029885eb67817af2615d89a6" }, "downloads": -1, "filename": "tv_extract-1.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "77eaa21296da59662d51fbe38512b800", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17016, "upload_time": "2019-03-22T19:35:35", "url": "https://files.pythonhosted.org/packages/22/57/4d536e784cb6a720d96dfd348d7833dd54de1381a78e2046b6f2c410666e/tv_extract-1.0.12-py3-none-any.whl" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "8cb78a3f0bbfce61cfff992bb98a5b34", "sha256": "ef9a0187c6bb02774fd8e162f27648f94a74e659437cb221ddebcb348fa4e2d4" }, "downloads": -1, "filename": "tv_extract-1.0.13-py3-none-any.whl", "has_sig": false, "md5_digest": "8cb78a3f0bbfce61cfff992bb98a5b34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18119, "upload_time": "2019-04-09T22:46:21", "url": "https://files.pythonhosted.org/packages/63/70/82d8259e5ce84d76b6f50f1da9d4d0131255040109e38abc29624f822ddb/tv_extract-1.0.13-py3-none-any.whl" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "fb1e89d17fa007043407e77f627b6158", "sha256": "57ce30ad3bd0a8ab1616a7ea9e72085bca4b594f1408d8b9aeb8c0e7086cf34d" }, "downloads": -1, "filename": "tv_extract-1.0.14-py3-none-any.whl", "has_sig": false, "md5_digest": "fb1e89d17fa007043407e77f627b6158", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18247, "upload_time": "2019-04-10T16:22:35", "url": "https://files.pythonhosted.org/packages/32/d5/45e58c7cab03a97dcca13e4f69241dfe0516eb08408146d705d25a455622/tv_extract-1.0.14-py3-none-any.whl" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "48017b36eaed9ea50eb476ffcaa99796", "sha256": "ac7fd5bdaadc9a0f0e15ff189ef54e4cf58796f51fccca37e2c8e57ee0bb5803" }, "downloads": -1, "filename": "tv_extract-1.0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "48017b36eaed9ea50eb476ffcaa99796", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18365, "upload_time": "2019-04-10T19:05:30", "url": "https://files.pythonhosted.org/packages/d6/df/648b02f326d634ebb3eabd89c4fb8f755590782ed1befe0c11373c842f72/tv_extract-1.0.15-py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "22c69a752e292d30fecead8f984e1d01", "sha256": "bbcdcf99d05e71edccf5ba082c5294fa58a92d2e18b196a0f1a8d12ce4f72537" }, "downloads": -1, "filename": "tv_extract-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "22c69a752e292d30fecead8f984e1d01", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16606, "upload_time": "2018-08-07T17:16:54", "url": "https://files.pythonhosted.org/packages/6e/b8/941fb5602e96f72a621e7122223f18b12ef9af258c490d4c9e67af589eb3/tv_extract-1.0.2-py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "7ae1eae61389cbe0e55f39695c900f03", "sha256": "5b1b9456761a44ba51871317318994ed073b4b44de416ddec024b195cb19ccba" }, "downloads": -1, "filename": "tv_extract-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "7ae1eae61389cbe0e55f39695c900f03", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16635, "upload_time": "2018-08-07T22:37:40", "url": "https://files.pythonhosted.org/packages/27/50/bd73c87f5e89ce36419c7780f9272aecb39e76c8d045ca6db772e5bab967/tv_extract-1.0.3-py3-none-any.whl" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "b93bd7639b84ac5d96fefece5481d35f", "sha256": "439cfe31bb6f2e7a3723a16c98056329467aefb7ecf11a88ef359b12069d84ff" }, "downloads": -1, "filename": "tv_extract-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "b93bd7639b84ac5d96fefece5481d35f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16630, "upload_time": "2018-09-14T17:33:14", "url": "https://files.pythonhosted.org/packages/4c/c0/12c4a7e4f4076665018963a02ab750ad55f17ba93487d5bddb597caa6f1f/tv_extract-1.0.4-py3-none-any.whl" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "a48e74e2d656cc9f30253927eb362328", "sha256": "45154dda0527c2b0f38b6f87179be221bb86e5026ea496ca62b5a022d009d364" }, "downloads": -1, "filename": "tv_extract-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a48e74e2d656cc9f30253927eb362328", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16636, "upload_time": "2018-09-14T18:20:12", "url": "https://files.pythonhosted.org/packages/38/ae/d318b7f98fb0f30a0051fc35e1913888a7ac6f7af6c744e076c8777974db/tv_extract-1.0.5-py3-none-any.whl" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "9f40e8a0dc1bc329ec062d0d62ce55e9", "sha256": "103c23cf21ff38d02d6c658a3fdf79a9a3ad9d214ddaf5cf0c262100d7a7d4c1" }, "downloads": -1, "filename": "tv_extract-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "9f40e8a0dc1bc329ec062d0d62ce55e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16684, "upload_time": "2019-03-02T14:19:49", "url": "https://files.pythonhosted.org/packages/20/ec/74bd2ddc987e3e9554090146f4f03c71aaf1dccd98e3b5a6ec6df023d2c9/tv_extract-1.0.6-py3-none-any.whl" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "a2fd49bd3a92777dc00fd4b794b0e5cd", "sha256": "ceca6929710a0c85c31c828190ae136eb1a701d818f956593207a13f1f1846bd" }, "downloads": -1, "filename": "tv_extract-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "a2fd49bd3a92777dc00fd4b794b0e5cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16749, "upload_time": "2019-03-18T17:38:34", "url": "https://files.pythonhosted.org/packages/2c/eb/911e44458d2f950753e8358a5b058e6e1da7876adf1c337729ae23616b57/tv_extract-1.0.7-py3-none-any.whl" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "75001fa1488a9439d8060b01e859a0fb", "sha256": "6c3f5809a957980064a4820d4104e4843d7edb254413aeb65a98c6078862e6a9" }, "downloads": -1, "filename": "tv_extract-1.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "75001fa1488a9439d8060b01e859a0fb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16750, "upload_time": "2019-03-18T22:42:55", "url": "https://files.pythonhosted.org/packages/1f/a2/0fbc099653a180e5b0fce07cf76f255eefb4021305cf4a56d845ae692070/tv_extract-1.0.8-py3-none-any.whl" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "52761040f58d5da204f14417384b925d", "sha256": "5df2044f75a8eb84d0d9255245a580cc3ee402340d598da99b44bca9bb984b9b" }, "downloads": -1, "filename": "tv_extract-1.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "52761040f58d5da204f14417384b925d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16868, "upload_time": "2019-03-22T17:20:09", "url": "https://files.pythonhosted.org/packages/4a/7c/db5688ea20bc8470ac02e90b79a50d6dd6471f3d57f85b3b07397ba743ca/tv_extract-1.0.9-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "48017b36eaed9ea50eb476ffcaa99796", "sha256": "ac7fd5bdaadc9a0f0e15ff189ef54e4cf58796f51fccca37e2c8e57ee0bb5803" }, "downloads": -1, "filename": "tv_extract-1.0.15-py3-none-any.whl", "has_sig": false, "md5_digest": "48017b36eaed9ea50eb476ffcaa99796", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18365, "upload_time": "2019-04-10T19:05:30", "url": "https://files.pythonhosted.org/packages/d6/df/648b02f326d634ebb3eabd89c4fb8f755590782ed1befe0c11373c842f72/tv_extract-1.0.15-py3-none-any.whl" } ] }