Skip to main content

Summary

pmlib is a library to leverage TaskWarrior to track and manage projects.

pmlib requires adds per-task project owners, which are a basic requirement of any project tracking system. The original TaskWarrior concept assumes all tasks are owned by the user running TaskWarrior.

Installation

Gantt Chart

gantt_image

Usage

Assume you want to create nine tasks, eight of which are dependencies of the first task:

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):

      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

Metadata

Release files for pmlib 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pmlib 1.1.2
File Size Uploaded Provenance Actions
pmlib-1.1.2.tar.gz 12.7 kB Without provenance Details for pmlib-1.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pmlib 1.1.2
File Interpreter ABI Platform Actions
pmlib-1.1.2-py3-none-any.whl Python 3 none any Details for pmlib-1.1.2-py3-none-any.whl

Total release size: 24.6 kB

Release files / pmlib-1.1.2.tar.gz

Download URL pmlib-1.1.2.tar.gz
Size 12.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8a026535a9d42e618fb2c987444d4c33419dd0cce2ccc72cc5761258c6546fc4
BLAKE2b-256 checksum
How to use checksums
8d0e666db5698be93902d2ad7c85211efe3edae9181594fd5f027a440212d114
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Release files / pmlib-1.1.2-py3-none-any.whl

Download URL pmlib-1.1.2-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
036db4b68aaecb772509d62da35846311762bb9ba02295c4b518a89f32dbac0e
BLAKE2b-256 checksum
How to use checksums
55a64e431bb8b76504663fe98d7c4fd2045e5dcd2180f2e2a6f678f8eea9c16d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.2

Security for pmlib 1.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page