pmlib


Namepmlib JSON
Version 1.1.2 PyPI version JSON
download
home_page
SummaryManage projects via CLI
upload_time2024-01-10 00:47:43
maintainerMike Pennington
docs_urlNone
authorMike Pennington
requires_python>=3.9,<4.0.0
licenseBSD-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"
}
        
Elapsed time: 3.10098s