Add the Todoist Python Library. The good folks at Doist created a library that makes our job really easy. In order to add it click on requirements.txt and add a new line todoist-python. Write the Codes. Ok now we just need to write the code that will make your shiny new cloud function do cool stuff.
- CHAPTER 1 Modules 1.1pytodoist.todoist This module introduces abstractions over Todoist entities such as Users, Tasks and Projects. It’s purpose is to hide the.
- This is the official Python library for interfacing with the Todoist API from a Python application. Todoist is an online task manager that enables users to organize, schedule, maintain, and prioritize personal tasks. The Todoist API can be used to integrate Todoist into other applications.
- You can install todoist python library via pip: $ pip install todoist-python We currently have an official Python library supported by Doist to make the developer life easier. You can find the Python library source code at its repository at Github.
Todoist is a great task management application, and personally my favorite (after testing at least 5 of such apps), which I have been using on a daily basis for the past couple of months.
The app is really easy to use, with a simple interface, yet very powerful. It is also available on basically every existing platform (iOS, Android, Windows, Mac, Web…)
By the way, if you don’t have an account yet, you can register using this link, and you’ll get 2 months of premium for free.
One of the main things that drew my attention in this app is its reporting feature, which allows you to check completed tasks from the past days and weeks, giving the idea of how productive you are.
Even beign really useful, there is no easy way to check and visualize further details about your historical taksks, and hence my ideia of expanding this feature.
Fortunately, there is an official Todoist Sync API, and even better, an official Todoist Python library to interact with it, called todoist-python
. Both were developed by Doist and are publicly available.
The Sync API documentation can be found here, and the todoist-python
library documentation here.
You can install the library via pip: pip install todoist-python
.
Along with the todoist-python
, I will use pandas
in a Jupyter environment for this demonstration.
The first thing to do is getting your API token, which is needed to login to your account. It can be easily found inside the Todoist app, you just have to go to Settings -> Integrations, and scroll down to API token. It is a big text of letters and numbers.
Then, to the code:
Creating the “Projects” DataFrame
We are now logged in to Todoist, and can start retrieving data from it.
The first data I’ll retrieve are my projects, which are available in the api.state['projects']
object:
Creating the “Tasks” DataFrame
Next, I will retrieve all the tasks I have created, available at the api.state['items']
object. It is the same idea as in the step above:
This DataFrame is a bit more detailed, and it deserves a bit of handling before continuing:
Creating the “Tasks activities” DataFrame
Now it’s time for perhaps the most important dataset: the Activity Log
The activity log makes it easy to see everything that is happening across projects and tasks. It logs whenever a task is added, updated, completed…
Activity log is only available for Todoist Premium.
The activity_list
is now a single list containing multiple dictionaries, and each dictionary represents one activity. The dicts contain the same keys, but the extra_data
key is a nested object, which can vary between activities. Therefore, I have to handle it first before creating the DataFrame:
This DataFrame is also quite detailed, so I will perform steps similar to the ones performed on the “Tasks” DataFrame:
Python Todo Comment
Now that we have all DataFrames, it is time for some visualization. Here are the questions I came up with:
- What are my Todoist statistics (sums, averages…)?
- How is my productivity over time?
- How are my task activities distributed among projects?
- On which day of the week am I most productive?
1. What are my Todoist statistics (sums, averages…)?
Printed:
2. How is my productivity over time?
3. How are my task activities distributed among projects?
4. On which day of the week am I most productive?
There are plenty more stuff to be analyzed within Todoist, but I will leave it to another opportunity. Perhaps when I have more data since I am using the app for about 3 months only.
Actionista Action CLI for Todoist.
Manage your Todoist tasks from the command line, using powerful filters toselect, print, reschedule, and complete tasks in a batch-wise fashion.
Do you have dozens or even hundreds of overdue tasks on your agenda?Clear up your task list in seconds, using the Actionista Action CLI for Todoist.You can now take the rest of the day off with a clear conscience.
This Action CLI for Todoist (todoist-action-cli
), operates sequentially on a list of tasks.You start out with a list of all tasks, and then select tasks using one of the manyfilters available. You can then sort, print, and reschedule the selected tasks.
Actionista Action-Chain CLI for Todoist (actionista-todoist)is inspired by the powerful find
command line tool. It takes the 'chain of actions'approach that find
uses to find and select files on your harddisk,and applies it for managing your Todoist task list.
The successful find
utility works by supplying a sequence of 'actions'(also known as 'expressions' in the find
manual).
Most actions are essentially filters, where you list criteria for the files to find.However, the real usability of find
is that it can not only print the matching files,but also use the matching files for other actions, e.g. deleting the files,or sending them to other command line tools.
The actionista action-chain CLI takes a similar approach.Starting from the full list of tasks, you can apply filters to find exactly those tasks that you need.Together with other actions, you can print
, reschedule
, rename
, mark-complete
, or delete
whatever tasks you need.You can invoke as many actions as you need, both filters and other actions, in any order.The actions are invoked in exactly the order you specify.
So if you want, you can filter tasks by e.g. project name, and print all tasks in a given project,then filter by due date, and print again, then reschedule the tasks that were just printed,then filter by exact name, then mark that (or those) remaining task(s) as complete,and finally commit the changes to the server.This example is mostly just to show what is possible,and I personally wouldn't recommend having such a complex list of actions,but you are basically free to list as many (or as few) actions as you want or need.For the record, doing the described sequence of actions would look something like this:
Usually, for your own sanity, command line usage would be a little more simple, and have only a single 'purpose'with each invocation:
The generalized command line usage is:
You can also import the package from python:
Note: This package was formerly imported as rsenv.rstodo.todoist_action_cli
,but has now been separated into its own package, imported as: actionista.todoist_action_cli
.
NOTE: This application is not created by, affiliated with, or supported by Doist.It is a third-party command line utility that is making use of the official Todoist API,as documented by https://developer.todoist.com/sync/v8/.
INSTALLATION:
Installation with pipx
:
For regular end-users, I recommend using pipx
to install the Actionista-Todoist command line apps:
If you don't have pipx installed, you can refer to thepipx installation guide.Briefly:
The last step will add ~/.local/bin
to the PATH environment variable.Please make sure to close and restart your terminal/command prompt afterinstalling pipx for the first time.
Python Todo List
Known installation errors:
- If you are using
conda
, there is a known issue where you receive an error,'Error: [Errno 2] No such file or directory:', when trying to install packages withpipx
.If you get this error, please update yourconda
python and make sure you are only usingthe 'defaults' channel, not 'conda-forge'.
Installation with pip
:
To install distribution release package from the Python Packaging Index (PyPI):
Alternatively, install the latest git master source by fetching the git repository from githuband install the package in editable mode (development mode):
CONFIGURATION:
Once actionista-todoist
package is installed, you need to obtain a login token from the todoist website:Log into your todoist.com account, go to Settings -> Integrations
, and copy the API token.(You can also go directly to the page: https://todoist.com/prefs/integrations).
Now run:
to set up the login token with your Actionista-Todoist installation.The API token is stored in ~/.todoist_token.txt
.The actionista-todoist-config
command will also create a default config file,~/.todoist_config.yaml
, which you can edit to change default sorting and printing format.
If you re-set your Todoist API token, you can update it either by running:
or by manually editing the file ~/.todoist_token.txt
and place your token in here.
USAGE:
The actionista-todoist
package contains several command line apps (CLIs):
todoist-action-cli
- also available asactionista-todoist
.todoist-cli
.actionista-todoist-config
.
The todoist-action-cli
CLI program uses the 'action chain' approach, where you specify a sequenceof 'actions', which are used to filter/select tasks from Todoist and then sort, print, or reschedulethe selected tasks in a batch-wise fashion.
The todoist-cli
CLI program is used mostly for things that doesn't fit the 'action chain' philosophy.For instance, if you want to add a new task, that doesn't really fit into the todoist-action-cli
workflow.(*) Instead, you can use todoist-cli add-task
command to add a new task to Todoist.The todoist-cli
is also used for other things, e.g. printing a list of your projects, etc.You can run todoist-cli --help
to see all available commands.
Finally, the actionista-todoist-config
CLI program is used to set up Actionista-Todoist,configuring your API login token, and creating a default configuration file.
(*) The todoist-action-cli
can technically be used to add tasks to Todoist, using the-add-task
action command - however, this is not the recommended approach.
todoist-action-cli
usage:
The general command line usage is:
Where action
is one of the following actions:
To see how to use each filter, type:
E.g.:
As you can see, typical usage is:
The filter actions could be e.g. filtering by -name
(same as -content
),project
, due_date_local_iso
, etc.The -sync
action is optional; if you do not specify -sync
, the program will just re-use the old cache,from last time you invoked -sync
. You must invoke -sync
at least once, when you first install this package,and you should always -sync
if you have made any changes (e.g. from your phone) since your last sync.Finally, the -sort
and -print
commands will sort and print the selected tasks.
If you need to refine your filters, just run the command again. The data is cached locally,so if you omit the -sync
action, commands can be executed in rapid succession.
Another example, to reschedule the due date for a bunch of tasks, would look like:
NOTE: I strongly recommend that you -print
the filtered tasks before you-rename
or -reschedule
the tasks. When you invoke -commit
, the changes cannot be undone automatically,so you may easily end up with a bunch of identically-named tasks with the same due date, if you forgot toapply the correct selection filters before renaming or rescheduling the tasks!For this reason, the program will, by default, ask you for confirmation before every -commit
.
Action arguments:
Each action can be provided a set of arguments which are listed sequentially, separated by space.If one argument contains spaces, e.g. you are filtering by tasks in the project 'Meeting notes',then you need to quote the argument as such:
Here, we provided one argument to the -project
action ('Meeting notes'
),and two arguments to the -sort
action ('project_name,content'
and ascending
).
Some of the actions attempts to be 'clever' when interpreting the arguments given.For instance, when filtering by project, you can do either:
The general signature for the -project
action is:
Here, [operator]
is the name of one of the many registered binary operators.These are used to compare the tasks against a given value.In the example above, if you do not specify any operator, then the 'glob' operator is used.The 'glob' operator allows you to use wild-cards for selecting tasks, the same way you select files on the command line.In our case, we 'glob' against tasks with project name starting with the string 'Wedding*'.We could also have used the 'startswith' operator, and omit the asterisk: startswith Wedding
.
For more info on how to use operators, see:
Ad-hoc CLI:
Installing this project (actionista-todoist
) with pip
will also give you some'ad-hoc' command line interface entry points:
Prior art: Other python-based Todoist projects
Other Todoist CLI packages that I know about:
Todoist Python Docs
todoist-cli -A command line interface for batch creating Todoist tasks from a file.Makes manual requests against the web API url (rather than using the official todoist-python package).No updates since January 2016 (except
setup.py
andrequirements.txt
).This probably doesn't work, given that it uses an old, obsolete API endpoint URL.todoicli - A rather new project (as of April 2018).Focuses on pre-defined queries for listing tasks, e.g. 'today and overdue', 'next 7 days', etc.Lots of other functionality, pretty extensive code base.Has integration with the toggl.com time tracking service.Uses the official
todoist-python
package, but still uses the'universal UTC' time format from the old v7 Sync API, and the v7 due-date structure.That means it probably won't work anymore, given that the v7 Sync API has been deprecated,and thetodoist-python
package has switched to Sync API v8.For instance, thelist td
andlist n7
usesitem['due_date_utc']
, which will raiseaKeyError
with the new v8 data structure.The CLI also expectsIDs
(task_id
,label_id
,project_id
), rather than text names,making it rather difficult to use for the end user.pydoist - A basic CLI to add Todoist tasks from the command line.Uses the official
todoist-python
python API from Todoist.Lastest release was November 2016, so may not work with the new v8 Sync API.
Python Todo Note
Other general python Todoist packages:
Todoist-python Pypi
python-todoist - The official python'Todoist' package from Doist (the company behind Todoist).Is currently using the version 8.0 'Sync' API.
pytodoist - An alternative Todoist API package.Also uses the v7 Sync API.A rather different approach to API wrapping, perhaps more object oriented.Focused on modelling individual Users/Projects/Tasks/Notes,where the official todoist-python package has managers as the central unit(ItemsManager, ProjectsManager, NotesManager).
- Last update November 2016 - will be obsolete when the v7 Sync API is removed.