Todoist Project Digest
Todoist doesn't have a way to generate a digest of all recent comments in a project created by a specific user. This makes it challenging to see what changed and what requires your action if you are collaborating with someone on a project.
This is a simple project which generates a digest of all comments by a particular user on a particular project.
This project was also a good excuse to play around and test some functional programming/data manipulation tooling I've been messing with (funcy, funcy-pipe, and whatever).
Features
- Can send an email digest if auth is provided
- Retrieves comments on completed tasks
- Target projects by ID or name
- Optional heartbeat URL for uptime monitoring
- Automatic internet connectivity checking with retry logic
Usage
Docker
docker pull ghcr.io/iloveitaly/todoist-digest:latest
docker run --env-file .env ghcr.io/iloveitaly/todoist-digest:latest
Want to run a one off execution?
docker run --env-file .env ghcr.io/iloveitaly/todoist-digest:latest todoist-digest --help
Want to inspect the docker container?
docker run -it ghcr.io/iloveitaly/todoist-digest:latest bash
Or, just use the docker compose file.
Heartbeat Monitoring
The digest supports heartbeat URLs for uptime monitoring services like Healthchecks.io, UptimeRobot, or similar services. When configured, the digest will ping the heartbeat URL after each successful job execution.
To enable heartbeat monitoring, set the HEARTBEAT_URL environment variable:
export HEARTBEAT_URL="https://hc-ping.com/your-unique-id"
Or in your .env file for Docker:
HEARTBEAT_URL=https://hc-ping.com/your-unique-id
The heartbeat ping happens automatically after each successful digest generation. If the ping fails, the error is silently ignored so it doesn't affect the digest execution.
Internet Connection Resilience
The scheduled job includes automatic internet connectivity checking with exponential backoff retry logic (up to 8 hours). This ensures the digest runs successfully even if there are temporary network issues, such as overnight router disconnections.
Locally
Run this locally using:
bin/local-digest-html
If you need a tty, you can copy the todoist-digest execution line and run it manually in a shell.
Or run directly:
uv run todoist-digest \
--last-synced "2023-12-04T15:52:48Z" \
--target-user user@gmail.com \
--target-project ProjectName
Quick tip: using raycast, you can quickly generate an ISO timestamp 2 days ago as iso
Or, email yourself the digest:
uv run todoist-digest \
--last-synced $LAST_SYNC \
--target-user $TARGET_USER \
--target-project $TARGET_PROJECT \
--email-auth $EMAIL_AUTH \
--email-to $EMAIL_TO
Development
Manual API Calls
http --auth-type bearer --auth $TODOIST_API_KEY https://api.todoist.com/rest/v2/projects 'Content-Type: application/json'
Docker Build
This repo uses nixpacks for building a Dockerfile. Why? Because I like trying new things.
Asdf support is built into nixpacks, so it will automatically pick up python and uv versions.
Playground
ipython shell with some helpful variables defined:
./playground.py
Run with ipdb
Open up an exception when there's an exception:
ipdb3 $(which todoist-digest) --last-synced 2023-12-14T13:38:25Z ...
Related
Metadata
Release files for todoist-digest 0.13.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| todoist_digest-0.13.1.tar.gz | 14.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| todoist_digest-0.13.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.1 kB
Release files / todoist_digest-0.13.1.tar.gz
| Download URL | todoist_digest-0.13.1.tar.gz |
|---|---|
| Size | 14.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
96e0f7024ea55481726296cd6c39a2e1fe118a2a85fa7d7753b9924643e7afe4
|
|
BLAKE2b-256 checksum How to use checksums |
6efdb729c357fa65dbd030a7e95db3fe85718e03e1183ae17de138941061ac4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / todoist_digest-0.13.1-py3-none-any.whl
| Download URL | todoist_digest-0.13.1-py3-none-any.whl |
|---|---|
| Size | 16.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6cfbe67e2725ec66dea4297d543c5efcd3983e6b8c624391287d313e4ee41020
|
|
BLAKE2b-256 checksum How to use checksums |
40c5ad90b6b3153a51e9e84f4178ccf9a305f301e31aea347e8d71eeae17fd97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|