pyteam-skills


Namepyteam-skills JSON
Version 1.0.2 PyPI version JSON
download
home_pageNone
SummarySkill matrix and dashboard from Git repos
upload_time2025-10-28 10:25:13
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords dashboard git pydriller skills
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ๐Ÿง  pyteam-skills

Generate a **team skill matrix** and interactive **dashboard** from your Git commit history.  
It mines repositories with [PyDriller], maps files to skills (via extensions, paths, or regex), applies configurable weights with **recency decay**, and produces both **CSV exports** and a modern **Tailwind dashboard** (with dark mode + filters).

![Dashboard Screenshot](https://github.com/hassanzaib512/pyteam-skills/blob/main/examples/example.png?raw=1)

---

## ๐Ÿš€ Features

- ๐Ÿช„ **Git mining** via [PyDriller]
- ๐Ÿงฉ **Skill mapping precedence:** `regex โ†’ path prefix โ†’ extension โ†’ Other`
- โš–๏ธ **Weighted scoring** โ€” with configurable parameters and **exponential recency decay**
- ๐Ÿ“Š **Normalized skill matrix (1โ€“100)** โ€” top contributor per skill = 100
- ๐Ÿ“ˆ **Monthly trends** โ€” per skill, normalized (1โ€“100)
- ๐ŸŒ— **Static dashboard** โ€” filters by Author, Skill, Month + dark mode + download JSON
- ๐Ÿงฐ **CLI-powered workflow:** `init`, `scan`, `matrix`, `dashboard`
- ๐Ÿšง **More features coming soon!**

---

## ๐Ÿ› ๏ธ Installation (Development Mode)

```bash
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
```

For normal installation:

```bash
pip install pyteam-skills
```

---

## โšก Quickstart

```bash
# 1) Create a default configuration
pyteam-skills init --out config.yml

# 2) Scan a Git repository
pyteam-skills scan --repo . --config config.yml --out artifacts/scan.json

# 3) Export CSV artifacts
pyteam-skills matrix --scan artifacts/scan.json --out artifacts

# 4) Generate the interactive dashboard
pyteam-skills dashboard --scan artifacts/scan.json --out artifacts/dashboard

# 5) Open your dashboard in a browser
open artifacts/dashboard/index.html
```

---

## โš™๏ธ Config Reference

See [`examples/config.example.yml`](https://github.com/hassanzaib512/pyteam-skills/blob/main/examples/config.example.yml?raw=1).

### Skill Mapping Precedence

1. **regex_skills** (first match wins)  
2. **path_skills** (longest prefix wins)  
3. **extension_skills**  
4. fallback โ†’ `["Other"]`

### Weight Parameters

| Parameter | Description | Default |
|------------|-------------|----------|
| `lines_changed` | Weight for added + deleted lines | `1.0` |
| `files_touched` | Weight per file touched | `0.3` |
| `commit_bonus` | Constant bonus per commit | `0.2` |
| `decay_half_life_days` | Half-life for exponential recency decay | `120` |

---

## ๐Ÿงช Development

```bash
make format   # Format code with black
make lint     # Run ruff linter
make test     # Run pytest
make all      # Format + lint + test
```

---

## ๐Ÿ“œ License

MIT License ยฉ [Hassan Zaib Hayat](https://github.com/hassanzaib512)

---

[PyDriller]: https://github.com/ishepard/pydriller

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pyteam-skills",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "dashboard, git, pydriller, skills",
    "author": null,
    "author_email": "Hassan Zaib Hayat <hassanzaibhayatske@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/e2/46/c3f02f648c3407888e7a527e962ed450c21d241da4eb7bca17790ba23d0c/pyteam_skills-1.0.2.tar.gz",
    "platform": null,
    "description": "# \ud83e\udde0 pyteam-skills\n\nGenerate a **team skill matrix** and interactive **dashboard** from your Git commit history.  \nIt mines repositories with [PyDriller], maps files to skills (via extensions, paths, or regex), applies configurable weights with **recency decay**, and produces both **CSV exports** and a modern **Tailwind dashboard** (with dark mode + filters).\n\n![Dashboard Screenshot](https://github.com/hassanzaib512/pyteam-skills/blob/main/examples/example.png?raw=1)\n\n---\n\n## \ud83d\ude80 Features\n\n- \ud83e\ude84 **Git mining** via [PyDriller]\n- \ud83e\udde9 **Skill mapping precedence:** `regex \u2192 path prefix \u2192 extension \u2192 Other`\n- \u2696\ufe0f **Weighted scoring** \u2014 with configurable parameters and **exponential recency decay**\n- \ud83d\udcca **Normalized skill matrix (1\u2013100)** \u2014 top contributor per skill = 100\n- \ud83d\udcc8 **Monthly trends** \u2014 per skill, normalized (1\u2013100)\n- \ud83c\udf17 **Static dashboard** \u2014 filters by Author, Skill, Month + dark mode + download JSON\n- \ud83e\uddf0 **CLI-powered workflow:** `init`, `scan`, `matrix`, `dashboard`\n- \ud83d\udea7 **More features coming soon!**\n\n---\n\n## \ud83d\udee0\ufe0f Installation (Development Mode)\n\n```bash\npython -m venv .venv && source .venv/bin/activate\npip install -e \".[dev]\"\n```\n\nFor normal installation:\n\n```bash\npip install pyteam-skills\n```\n\n---\n\n## \u26a1 Quickstart\n\n```bash\n# 1) Create a default configuration\npyteam-skills init --out config.yml\n\n# 2) Scan a Git repository\npyteam-skills scan --repo . --config config.yml --out artifacts/scan.json\n\n# 3) Export CSV artifacts\npyteam-skills matrix --scan artifacts/scan.json --out artifacts\n\n# 4) Generate the interactive dashboard\npyteam-skills dashboard --scan artifacts/scan.json --out artifacts/dashboard\n\n# 5) Open your dashboard in a browser\nopen artifacts/dashboard/index.html\n```\n\n---\n\n## \u2699\ufe0f Config Reference\n\nSee [`examples/config.example.yml`](https://github.com/hassanzaib512/pyteam-skills/blob/main/examples/config.example.yml?raw=1).\n\n### Skill Mapping Precedence\n\n1. **regex_skills** (first match wins)  \n2. **path_skills** (longest prefix wins)  \n3. **extension_skills**  \n4. fallback \u2192 `[\"Other\"]`\n\n### Weight Parameters\n\n| Parameter | Description | Default |\n|------------|-------------|----------|\n| `lines_changed` | Weight for added + deleted lines | `1.0` |\n| `files_touched` | Weight per file touched | `0.3` |\n| `commit_bonus` | Constant bonus per commit | `0.2` |\n| `decay_half_life_days` | Half-life for exponential recency decay | `120` |\n\n---\n\n## \ud83e\uddea Development\n\n```bash\nmake format   # Format code with black\nmake lint     # Run ruff linter\nmake test     # Run pytest\nmake all      # Format + lint + test\n```\n\n---\n\n## \ud83d\udcdc License\n\nMIT License \u00a9 [Hassan Zaib Hayat](https://github.com/hassanzaib512)\n\n---\n\n[PyDriller]: https://github.com/ishepard/pydriller\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Skill matrix and dashboard from Git repos",
    "version": "1.0.2",
    "project_urls": {
        "Homepage": "https://github.com/hassanzaib512/pyteam-skills",
        "Issues": "https://github.com/hassanzaib512/pyteam-skills/issues"
    },
    "split_keywords": [
        "dashboard",
        " git",
        " pydriller",
        " skills"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0d84dfc1f25a0b48cdd87d09e1c7ee6d222edf13f44d63d8088c2f88e395f0a4",
                "md5": "638dd2d06c95ac44c610d868c5e6e758",
                "sha256": "b11f02c1e598e9b6c68e6c7c2f80243221bb7fd6eca9c1f5eb2558495b5f5f7b"
            },
            "downloads": -1,
            "filename": "pyteam_skills-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "638dd2d06c95ac44c610d868c5e6e758",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 15864,
            "upload_time": "2025-10-28T10:25:10",
            "upload_time_iso_8601": "2025-10-28T10:25:10.982584Z",
            "url": "https://files.pythonhosted.org/packages/0d/84/dfc1f25a0b48cdd87d09e1c7ee6d222edf13f44d63d8088c2f88e395f0a4/pyteam_skills-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e246c3f02f648c3407888e7a527e962ed450c21d241da4eb7bca17790ba23d0c",
                "md5": "ccdec4fa1c5ba03a9aa3c24322c7adf6",
                "sha256": "bb913ea95f9f7ad4c989d8bed0b97587311d147df619bbda27ca68026c3dc762"
            },
            "downloads": -1,
            "filename": "pyteam_skills-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "ccdec4fa1c5ba03a9aa3c24322c7adf6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 126500,
            "upload_time": "2025-10-28T10:25:13",
            "upload_time_iso_8601": "2025-10-28T10:25:13.181310Z",
            "url": "https://files.pythonhosted.org/packages/e2/46/c3f02f648c3407888e7a527e962ed450c21d241da4eb7bca17790ba23d0c/pyteam_skills-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-28 10:25:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hassanzaib512",
    "github_project": "pyteam-skills",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "pyteam-skills"
}
        
Elapsed time: 2.04521s