Merging "TODO" Lists with Pyori
Posted in Linux, Miscellaneous, Python.

Pyori is a small command-line tool I wrote to merge multiple “todo” lists into a single list. It is probably one of those things that is only really useful to me, but I thought I’d open-source it in case someone else has similar needs.

Who might find this tool useful? Someone who…

  • regularly pursues more than one work or personal goal over a given time period.

  • has “todo” lists for each goal.

  • prefers to work sequentially, one task at a time (as opposed to multi-tasking).

  • wants to avoid the decision fatigue resulting from constantly needing to prioritize limited time between several goals.

Still interested? Find instructions for installing Pyori here.

Now, an example. Let’s say you’re currently working on two projects: a research paper and a calculator app. First step is to list out the “todo” lists – or task lists – for each goal. Give each task a number approximating the level of effort required to complete it.

Goal: Research Project

  1. Define scope of project [2]
  2. Gather sources: books, journal articles, and online resources [5]
  3. Write outline [2]
  4. Generate figures [3]
  5. Write draft of introduction [3]
  6. Write draft of conclusion [3]
  7. Write draft of body [8]
  8. Make first-pass edits [5]
  9. Make second-pass edits [3]
  10. Polish final draft [2]
  11. Submit final draft [1]

Goal: Calculator Project

  1. Setup boilerplate git project [1]
  2. Show GUI window with text widget for output [3]
  3. Create buttons: numbers, operations, enter, and clear [2]
  4. Hook button events to calculator operations [2]
  5. Display output in text widget [2]
  6. Write tests [3]
  7. Polish GUI ease-of-use [2]
  8. Write documentation [3]
  9. Bump project version to 0.1 [1]

The Pyori script works with task lists in CSV format. Convert each of the lists above to its own CSV goal file:


task, score, done
Define scope of project, 2, no
"Gather sources: books, journal articles, and online resources", 5, no
Write outline, 2, no
Generate figures, 3, no
Write draft of introduction, 3, no
Write draft of conclusion, 3, no
Write draft of body, 8, no
Make first-pass edits, 5, no
Make second-pass edits, 3, no
Polish final draft, 2, no
Submit final draft, 1, no


task, score, done
Setup boilerplate git project, 1, no
Show GUI window with text widget for output, 3, no
"Create buttons: numbers, operations, enter, and clear", 2, no
Hook button events to calculator operations, 2, no
Display output in text widget, 2, no
Write tests, 3, no
Polish GUI ease-of-use, 2, no
Write documentation, 3, no
Bump project version to 0.1, 1, no

You can also choose to associate descriptive information with a goal via a YAML file of the same name. These files are optional, but improve the readability of Pyori’s output. They can also be used to control some of Pyori’s additional features (for example, listing dependencies between goals).


name: Research Project
description: Research a topic of my choice and write a report.


name: Calculator Version 0.1
description: Create a simple calculator GUI written in Python.

By following the instructions on the Bitbucket page for Pyori, you should be able to setup a Pyori project with the goal files above and produce a merged “todo” list. The merged list might look like this:


Research Project,Define scope of project,2,no
Calculator Version 0.1,Setup boilerplate git project,1,no
Research Project,"Gather sources: books, journal articles, and online resources",5,no
Research Project,Write outline,2,no
Research Project,Generate figures,3,no
Calculator Version 0.1,Show GUI window with text widget for output,3,no
Research Project,Write draft of introduction,3,no
Research Project,Write draft of conclusion,3,no
Research Project,Write draft of body,8,no
Calculator Version 0.1,"Create buttons: numbers, operations, enter, and clear",2,no
Calculator Version 0.1,Hook button events to calculator operations,2,no
Calculator Version 0.1,Display output in text widget,2,no
Calculator Version 0.1,Write tests,3,no
Calculator Version 0.1,Polish GUI ease-of-use,2,no
Research Project,Make first-pass edits,5,no
Research Project,Make second-pass edits,3,no
Research Project,Polish final draft,2,no
Calculator Version 0.1,Write documentation,3,no
Research Project,Submit final draft,1,no
Research Project,COMPLETE,,
Calculator Version 0.1,Bump project version to 0.1,1,no
Calculator Version 0.1,COMPLETE,,

You can now open up this list as a spreadsheet, manually format rows if desired, then print off. The point is that now you have a single “todo” list that will help you manage your time between two goals. Of course, this concept can be extended to any number of goals.

One thing to note is that the tasks have been randomly merged in such a way that tries to maintain a fairly even distribution of high- and low-effort tasks. Look below to see a bar chart showing the score (effort level) of each task in the merged list. Notice how the high-effort tasks are fairly well mixed in among the low-effort tasks.

That concludes my short introduction to Pyori. If you find this tool useful or if you have thoughts about ways to make it better, please let me know!