bumblebee-status/bumblebee_status/modules/contrib/taskwarrior.py

59 lines
1.9 KiB
Python
Raw Normal View History

2020-04-13 14:19:36 +02:00
"""Displays the number of pending tasks in TaskWarrior.
Requires the following library:
* taskw
Parameters:
* taskwarrior.taskrc : path to the taskrc file (defaults to ~/.taskrc)
contributed by `chdorb <https://github.com/chdorb>`_ - many thanks!
2020-04-13 14:19:36 +02:00
"""
from taskw import TaskWarrior
2020-04-13 14:19:36 +02:00
import core.module
import core.widget
import core.decorators
2020-04-13 14:19:36 +02:00
class Module(core.module.Module):
def __init__(self, config, theme):
super().__init__(config, theme, core.widget.Widget(self.output))
2020-04-13 14:19:36 +02:00
self.__pending_tasks = "0"
2020-04-13 14:19:36 +02:00
def update(self):
"""Return a string with the number of pending tasks from TaskWarrior
or the descripton of an active task.
if show.active is set in the config, show the description of the
current active task, otherwise the number of pending tasks will be displayed.
"""
2020-04-13 14:19:36 +02:00
try:
taskrc = self.parameter("taskrc", "~/.taskrc")
show_active = self.parameter("show_active", False)
2020-04-13 14:19:36 +02:00
w = TaskWarrior(config_filename=taskrc)
active_tasks = (
w.filter_tasks({"start.any": "", "status": "pending"}) or None
)
if show_active and active_tasks:
# this is using the first element of the list, if there happen
# to be other active tasks, they won't be displayed.
reporting_tasks = (
f"{active_tasks[0]['id']} - {active_tasks[0]['description']}"
)
else:
reporting_tasks = len(w.filter_tasks({"status": "pending"}))
self.__pending_tasks = reporting_tasks
2020-04-13 14:19:36 +02:00
except:
self.__pending_tasks = "n/a"
2020-04-13 14:19:36 +02:00
@core.decorators.scrollable
2020-04-13 14:19:36 +02:00
def output(self, _):
"""Format the task counter to output in bumblebee."""
return "{}".format(self.__pending_tasks)
2020-04-13 14:20:03 +02:00
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4