Name | pmlib JSON |
Version |
1.1.2
JSON |
| download |
home_page | |
Summary | Manage projects via CLI |
upload_time | 2024-01-10 00:47:43 |
maintainer | Mike Pennington |
docs_url | None |
author | Mike Pennington |
requires_python | >=3.9,<4.0.0 |
license | BSD-3-Clause |
keywords |
project
management
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Summary
[`pmlib`][1] is a library to leverage [`TaskWarrior`][2] to track and manage projects.
[`pmlib`][1] requires adds per-task project owners, which are a basic requirement of any project tracking system. The original [`TaskWarrior`][2] concept assumes all tasks are owned by the user running TaskWarrior.
# Installation
- Install [TaskWarrior][2]
- `pip install pmlib`
# Gantt Chart
[![gantt_image](https://github.com/mpenning/pmlib/blob/main/docs/gantt.png)](https://github.com/mpenning/pmlib/blob/main/docs/gantt.png)
# Usage
Assume you want to create nine tasks, eight of which are dependencies of the first task:
```python
from pmlib.task import OwnedTask
from pmlib.task import OwnedTaskWarrior
otw = OwnedTaskWarrior(data_location="~/.pm", create=True, purge_existing=False)
otw.purge_project("version_1.6.0")
task01 = OwnedTask(otw,
description="Complete software version 1.6.0",
start="2023-12-01",
due="2024-01-26",
project="version_1.6.0",
owner="pm@gmail.com")
task02 = OwnedTask(otw,
description="Fix bugs for version 1.6.0",
start="2023-12-01",
due="2023-12-21",
project="version_1.6.0",
status="completed",
owner="dev02@gmail.com")
task03 = OwnedTask(otw,
description="Rewrite PDF exporter",
start="2023-12-01",
due="2023-12-15",
project="version_1.6.0",
owner="dev01@gmail.com",
status="pending")
task04 = OwnedTask(otw,
description="Test PDF exporter",
start="2023-12-15",
due="2024-01-05",
project="version_1.6.0",
owner="test01@gmail.com")
task05 = OwnedTask(otw,
description="Write feature for print driver",
start="2023-12-15",
due="2023-12-19",
project="version_1.6.0",
owner="dev01@gmail.com")
task06 = OwnedTask(otw,
description="Test print driver",
start="2023-12-19",
due="2023-12-27",
project="version_1.6.0",
owner="test01@gmail.com")
task07 = OwnedTask(otw,
description="Build new version 1.6.0 binary",
start="2023-12-27",
due="2024-01-06",
project="version_1.6.0",
owner="builder01@gmail.com")
task08 = OwnedTask(otw,
description="Test new version 1.6.0 binary",
start="2023-12-27",
due="2024-01-06",
project="version_1.6.0",
owner="test01@gmail.com")
task09 = OwnedTask(otw,
description="Write version 1.6.0 release notes",
start="2023-12-27",
due="2024-01-16",
project="version_1.6.0",
owner="techwriter01@gmail.com")
task02.save()
task03.save()
task04.save()
task05.save()
task06.save()
task07.save()
task08.save()
task09.save()
task01.set_depends([task02, task03, task04, task05, task06, task07, task08, task09])
task01.save()
# This should be True, newtask02 is in the list of dependencies
#print(task02 in task01['depends'])
otw.save_project_gantt_chart("version_1.6.0", "gantt.png")
# Print a task table wrapped to 100 characters wide...
print(otw.get_table(100))
```
That will print (task UUIDs will be different):
```none
uuid due depends owner project description
====================================================================================================
3b6a4d97-7c22- 2023-12-15 0 dev01@gmail.com version_1.6.0 Rewrite PDF
4eb4-8085- 00:00:00-06:00 exporter
83cacf1da997
c63804e1-631a- 2024-01-05 0 test01@gmail.com version_1.6.0 Test PDF
473f-8770- 00:00:00-06:00 exporter
f1b1320f3dab
24569bde-4f30- 2023-12-19 0 dev01@gmail.com version_1.6.0 Write feature
4666-9f38- 00:00:00-06:00 for print driver
89c400a73c6f
161b1e4a-d770- 2023-12-27 0 test01@gmail.com version_1.6.0 Test print
48d2-a5ca- 00:00:00-06:00 driver
7b2f36837c5f
884f388b-2366- 2024-01-06 0 builder01@gmail. version_1.6.0 Build new
4633-98a0- 00:00:00-06:00 com version 1.6.0
423509bc5fa6 binary
46cace11-a340- 2024-01-06 0 test01@gmail.com version_1.6.0 Test new version
4a18-8ce2- 00:00:00-06:00 1.6.0 binary
d02aa7f5c0c1
7c7c2b01-9794- 2024-01-16 0 techwriter01@gma version_1.6.0 Write version
4e79-bea2- 00:00:00-06:00 il.com 1.6.0 release
37662b016204 notes
35b4ed99-2461- 2024-01-26 8 pm@gmail.com version_1.6.0 Complete
4d89-9304- 00:00:00-06:00 software version
81fc21ad3148 1.6.0
14cd59d4-2037- 2023-12-21 0 dev02@gmail.com version_1.6.0 Fix bugs for
49cc-8b39- 00:00:00-06:00 version 1.6.0
9ad9b9863f4e
```
[1]: https://github.com/mpenning/pmlib
[2]: https://github.com/GothenburgBitFactory/taskwarrior
Raw data
{
"_id": null,
"home_page": "",
"name": "pmlib",
"maintainer": "Mike Pennington",
"docs_url": null,
"requires_python": ">=3.9,<4.0.0",
"maintainer_email": "mike@pennington.net",
"keywords": "project,management",
"author": "Mike Pennington",
"author_email": "mike@pennington.net",
"download_url": "https://files.pythonhosted.org/packages/8d/0e/666db5698be93902d2ad7c85211efe3edae9181594fd5f027a440212d114/pmlib-1.1.2.tar.gz",
"platform": null,
"description": "# Summary\n\n[`pmlib`][1] is a library to leverage [`TaskWarrior`][2] to track and manage projects.\n\n[`pmlib`][1] requires adds per-task project owners, which are a basic requirement of any project tracking system. The original [`TaskWarrior`][2] concept assumes all tasks are owned by the user running TaskWarrior.\n\n# Installation\n\n- Install [TaskWarrior][2]\n- `pip install pmlib`\n\n# Gantt Chart\n\n[![gantt_image](https://github.com/mpenning/pmlib/blob/main/docs/gantt.png)](https://github.com/mpenning/pmlib/blob/main/docs/gantt.png)\n\n# Usage\n\nAssume you want to create nine tasks, eight of which are dependencies of the first task:\n\n```python\nfrom pmlib.task import OwnedTask\nfrom pmlib.task import OwnedTaskWarrior\n\notw = OwnedTaskWarrior(data_location=\"~/.pm\", create=True, purge_existing=False)\notw.purge_project(\"version_1.6.0\")\ntask01 = OwnedTask(otw,\n description=\"Complete software version 1.6.0\",\n start=\"2023-12-01\",\n due=\"2024-01-26\",\n project=\"version_1.6.0\",\n owner=\"pm@gmail.com\")\ntask02 = OwnedTask(otw,\n description=\"Fix bugs for version 1.6.0\",\n start=\"2023-12-01\",\n due=\"2023-12-21\",\n project=\"version_1.6.0\",\n status=\"completed\",\n owner=\"dev02@gmail.com\")\ntask03 = OwnedTask(otw,\n description=\"Rewrite PDF exporter\",\n start=\"2023-12-01\",\n due=\"2023-12-15\",\n project=\"version_1.6.0\",\n owner=\"dev01@gmail.com\",\n status=\"pending\")\ntask04 = OwnedTask(otw,\n description=\"Test PDF exporter\",\n start=\"2023-12-15\",\n due=\"2024-01-05\",\n project=\"version_1.6.0\",\n owner=\"test01@gmail.com\")\ntask05 = OwnedTask(otw,\n description=\"Write feature for print driver\",\n start=\"2023-12-15\",\n due=\"2023-12-19\",\n project=\"version_1.6.0\",\n owner=\"dev01@gmail.com\")\ntask06 = OwnedTask(otw,\n description=\"Test print driver\",\n start=\"2023-12-19\",\n due=\"2023-12-27\",\n project=\"version_1.6.0\",\n owner=\"test01@gmail.com\")\ntask07 = OwnedTask(otw,\n description=\"Build new version 1.6.0 binary\",\n start=\"2023-12-27\",\n due=\"2024-01-06\",\n project=\"version_1.6.0\",\n owner=\"builder01@gmail.com\")\ntask08 = OwnedTask(otw,\n description=\"Test new version 1.6.0 binary\",\n start=\"2023-12-27\",\n due=\"2024-01-06\",\n project=\"version_1.6.0\",\n owner=\"test01@gmail.com\")\ntask09 = OwnedTask(otw,\n description=\"Write version 1.6.0 release notes\",\n start=\"2023-12-27\",\n due=\"2024-01-16\",\n project=\"version_1.6.0\",\n owner=\"techwriter01@gmail.com\")\ntask02.save()\ntask03.save()\ntask04.save()\ntask05.save()\ntask06.save()\ntask07.save()\ntask08.save()\ntask09.save()\ntask01.set_depends([task02, task03, task04, task05, task06, task07, task08, task09])\ntask01.save()\n\n# This should be True, newtask02 is in the list of dependencies\n#print(task02 in task01['depends'])\n\notw.save_project_gantt_chart(\"version_1.6.0\", \"gantt.png\")\n\n# Print a task table wrapped to 100 characters wide...\nprint(otw.get_table(100))\n```\n\nThat will print (task UUIDs will be different):\n\n```none\n uuid due depends owner project description\n====================================================================================================\n3b6a4d97-7c22- 2023-12-15 0 dev01@gmail.com version_1.6.0 Rewrite PDF\n4eb4-8085- 00:00:00-06:00 exporter\n83cacf1da997\nc63804e1-631a- 2024-01-05 0 test01@gmail.com version_1.6.0 Test PDF\n473f-8770- 00:00:00-06:00 exporter\nf1b1320f3dab\n24569bde-4f30- 2023-12-19 0 dev01@gmail.com version_1.6.0 Write feature\n4666-9f38- 00:00:00-06:00 for print driver\n89c400a73c6f\n161b1e4a-d770- 2023-12-27 0 test01@gmail.com version_1.6.0 Test print\n48d2-a5ca- 00:00:00-06:00 driver\n7b2f36837c5f\n884f388b-2366- 2024-01-06 0 builder01@gmail. version_1.6.0 Build new\n4633-98a0- 00:00:00-06:00 com version 1.6.0\n423509bc5fa6 binary\n46cace11-a340- 2024-01-06 0 test01@gmail.com version_1.6.0 Test new version\n4a18-8ce2- 00:00:00-06:00 1.6.0 binary\nd02aa7f5c0c1\n7c7c2b01-9794- 2024-01-16 0 techwriter01@gma version_1.6.0 Write version\n4e79-bea2- 00:00:00-06:00 il.com 1.6.0 release\n37662b016204 notes\n35b4ed99-2461- 2024-01-26 8 pm@gmail.com version_1.6.0 Complete\n4d89-9304- 00:00:00-06:00 software version\n81fc21ad3148 1.6.0\n14cd59d4-2037- 2023-12-21 0 dev02@gmail.com version_1.6.0 Fix bugs for\n49cc-8b39- 00:00:00-06:00 version 1.6.0\n9ad9b9863f4e\n```\n\n [1]: https://github.com/mpenning/pmlib\n [2]: https://github.com/GothenburgBitFactory/taskwarrior\n\n\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Manage projects via CLI",
"version": "1.1.2",
"project_urls": {
"homepage": "https://github.com/mpenning/pmlib",
"repository": "https://github.com/mpenning/pmlib",
"source": "https://github.com/mpenning/pmlib"
},
"split_keywords": [
"project",
"management"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "55a64e431bb8b76504663fe98d7c4fd2045e5dcd2180f2e2a6f678f8eea9c16d",
"md5": "98b14d193932bc696ec4061140eca923",
"sha256": "036db4b68aaecb772509d62da35846311762bb9ba02295c4b518a89f32dbac0e"
},
"downloads": -1,
"filename": "pmlib-1.1.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "98b14d193932bc696ec4061140eca923",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<4.0.0",
"size": 11931,
"upload_time": "2024-01-10T00:47:41",
"upload_time_iso_8601": "2024-01-10T00:47:41.230336Z",
"url": "https://files.pythonhosted.org/packages/55/a6/4e431bb8b76504663fe98d7c4fd2045e5dcd2180f2e2a6f678f8eea9c16d/pmlib-1.1.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8d0e666db5698be93902d2ad7c85211efe3edae9181594fd5f027a440212d114",
"md5": "e9f19aba7965ee41e33cf9fe528ffcec",
"sha256": "8a026535a9d42e618fb2c987444d4c33419dd0cce2ccc72cc5761258c6546fc4"
},
"downloads": -1,
"filename": "pmlib-1.1.2.tar.gz",
"has_sig": false,
"md5_digest": "e9f19aba7965ee41e33cf9fe528ffcec",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<4.0.0",
"size": 12674,
"upload_time": "2024-01-10T00:47:43",
"upload_time_iso_8601": "2024-01-10T00:47:43.091134Z",
"url": "https://files.pythonhosted.org/packages/8d/0e/666db5698be93902d2ad7c85211efe3edae9181594fd5f027a440212d114/pmlib-1.1.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-10 00:47:43",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mpenning",
"github_project": "pmlib",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"lcname": "pmlib"
}