Skip to main content

CLI tool and Python library to access Toggl Track https://toggl.com/track/

Project description

toggl-track

PyPI Changelog Tests License

CLI tool and Python library to access Toggl Track https://toggl.com/track/

Installation

Install this tool using pip:

pip install toggl-track

Usage

For listing the time entries in the last 24 hours, run:

$ tgl entries list
                                                            Time Entries

At           Description                                                                  Start      Stop       Duration   Tags
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-02-04   toggl-track: insights                                                        05:37 AM              -
2023-02-03   Community: Allow parsing of IPv6 addresses in ingest pipeline                08:18 PM   10:09 PM   1:51       type:support
2023-02-03   🍲 Dinner                                                                    07:19 PM   08:18 PM   0:58
2023-02-03   sync                                                                         06:19 PM   06:55 PM   0:35       type:sync
2023-02-03   🚌 Shuttling kids between home and whatever                                  04:46 PM   06:19 PM   1:33
2023-02-03   App Service logs integration: troubleshootign lucianpy issues                04:40 PM   04:46 PM   0:06       type:goal
2023-02-03   Community: Allow parsing of IPv6 addresses in ingest pipeline                04:21 PM   04:40 PM   0:18       type:support
2023-02-03   Community: Fix parsing error client port is blank and adjust for timeStamp   03:15 PM   04:21 PM   1:05       type:support
2023-02-03   Community: Azure Signin Module authentication_processing_details Issue       02:37 PM   03:15 PM   0:38       type:support
2023-02-03   Rosanna                                                                      11:06 AM   02:37 PM   3:31
2023-02-03   Community: Azure Signin Module authentication_processing_details Issue       09:25 AM   11:06 AM   1:41       type:support
2023-02-03   sync                                                                         08:37 AM   09:25 AM   0:48       type:sync
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                    Total      13:08

Now you can also filter time entries by project ID or description:

$ tgl entries --project-id 178435728 list
                                                            Time Entries

At           Description                                                                  Start      Stop       Duration   Tags
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2023-02-03   Community: Allow parsing of IPv6 addresses in ingest pipeline                08:18 PM   10:09 PM   1:51       type:support
2023-02-03   sync                                                                         06:19 PM   06:55 PM   0:35       type:sync
2023-02-03   App Service logs integration: troubleshootign lucianpy issues                04:40 PM   04:46 PM   0:06       type:goal
2023-02-03   Community: Allow parsing of IPv6 addresses in ingest pipeline                04:21 PM   04:40 PM   0:18       type:support
2023-02-03   Community: Fix parsing error client port is blank and adjust for timeStamp   03:15 PM   04:21 PM   1:05       type:support
2023-02-03   Community: Azure Signin Module authentication_processing_details Issue       02:37 PM   03:15 PM   0:38       type:support
2023-02-03   Community: Azure Signin Module authentication_processing_details Issue       09:25 AM   11:06 AM   1:41       type:support
2023-02-03   sync                                                                         08:37 AM   09:25 AM   0:48       type:sync
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
                                                                                                    Total      7:05

$ tgl entries --description SDH list

                            Time Entries                                
                                                                            
At           Description   Start      Stop       Duration   Tags          
────────────────────────────────────────────────────────────────────────── 
2023-04-01   SDH 3256      05:56 AM   07:01 AM   1:04       type:support  
2023-03-31   SDH 3256      03:01 PM   04:18 PM   1:17       type:support  
2023-03-31   SDH 3247      09:45 AM   12:04 PM   2:18       type:support  
2023-03-31   SDH 3253      08:49 AM   09:45 AM   0:56       type:support  
2023-03-31   SDH 3237      07:22 AM   08:30 AM   1:08       type:support  
2023-03-30   SDH 3229      01:16 PM   05:35 PM   4:18       type:support  
2023-03-30   SDH 3229      09:36 AM   11:31 AM   1:55       type:support  
2023-04-03   SDH 3140      08:11 AM   09:19 AM   1:07       type:support  
2023-03-29   SDH 3149      01:36 PM   05:04 PM   3:27       type:support  
2023-03-28   SDH 3237      05:04 PM   06:03 PM   0:58       type:support  
2023-03-28   SDH 3237      02:40 PM   03:01 PM   0:20       type:support  
2023-03-28   SDH 3237      01:43 PM   02:21 PM   0:38       type:support  
2023-03-28   SDH 3237      10:31 AM   12:17 PM   1:46       type:support  
2023-03-27   SDH 3069      08:50 PM   09:29 PM   0:39       type:support  
2023-03-27   SDH 3069      05:51 PM   06:56 PM   1:05       type:support  
2023-03-27   SDH 3069      04:59 PM   05:21 PM   0:21       type:support  
2023-03-27   SDH 3069      01:11 PM   03:09 PM   1:57       type:support  
──────────────────────────────────────────────────────────────────────────
                                        Total      25:22

Supports JSON and NDJSON as alternative output format using the --format option:

# format result as a list of objects
$ tgl --format ndjson entries --project-id 178435728 list

[{"id": 2848841800, "workspace_id": 1815018, "user_id": 2621333, "project_id": 178435728, "task_id": null, "billable": false, "at": "2023-02-16T15:54:40+00:00", "description": "Observability Demo Day",  ... "stop": "2023-02-16T06:59:01+00:00", "duration": 314, "tags": ["type:goal"]}]

# optionally, format result as a root element that contains the list of objects using the `--json-root` option
$ tgl --format ndjson --json-root entries entries --project-id 178435728 list


$ tgl --format ndjson entries --project-id 178435728 list

{"id": 2832493940, "workspace_id": 1815018, "user_id": 2621333, "project_id": 178435728, "task_id": null, "billable": false, "at": "2023-02-06T10:31:24+00:00", "description": "ESF: send after input has output", "start": "2023-02-06T09:40:10+00:00", "stop": "2023-02-06T10:31:24+00:00", "duration": 3074, "tags": ["type:goal"]}
{"id": 2832473617, "workspace_id": 1815018, "user_id": 2621333, "project_id": 178435728, "task_id": null, "billable": false, "at": "2023-02-06T09:34:53+00:00", "description": "Maurizio / Tom", "start": "2023-02-06T08:58:17+00:00", "stop": "2023-02-06T09:29:22+00:00", "duration": 1865, "tags": ["type:meeting"]}
{"id": 2832337954, "workspace_id": 1815018, "user_id": 2621333, "project_id": 178435728, "task_id": null, "billable": false, "at": "2023-02-06T09:34:39+00:00", "description": "sync", "start": "2023-02-06T08:15:08+00:00", "stop": "2023-02-06T08:57:17+00:00", "duration": 2529, "tags": ["type:sync"]}

For grouping time entries by tags and sum up the totals, run:

$ tgl entries --project-id 178435728 group-by --field tags --start-date 2023-02-01
    Time Entries

tags           Duration
─────────────────────────
type:support   7:13
type:goal      5:10
type:meeting   4:29
type:sync      3:38
type:hr        0:09
─────────────────────────
Total          20:40

For help, run:

toggl-track --help

You can also use:

python -m toggl_track --help

Development

To contribute to this tool, first checkout the code. Then create a new virtual environment:

cd toggl-track
python -m venv venv
source venv/bin/activate

Now install the dependencies and test dependencies:

pip install -e '.[test]'

To run the tests:

pytest

If you need to send other requests to Toggl API, you can capture responses using:

pytest --record-mode=once

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

toggl_track-0.6.0.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

toggl_track-0.6.0-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file toggl_track-0.6.0.tar.gz.

File metadata

  • Download URL: toggl_track-0.6.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for toggl_track-0.6.0.tar.gz
Algorithm Hash digest
SHA256 ce7a3caba44e967f0aa34e3978b3a7fd1bdb2988328990c51da466b8b60c7136
MD5 685b23046a87362b4934cd365e7dd5b8
BLAKE2b-256 e70b3931ced098c6fad0d364fd3778646e35c30f4d8c2d1ccbce68aee4c3fa31

See more details on using hashes here.

File details

Details for the file toggl_track-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: toggl_track-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for toggl_track-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 07565d9a9368057d13c9916aeebeae02e47eddcda68bf6b15d9ac618fbe200cc
MD5 1e490e91a6e4ca5c029909b7c2bf4de7
BLAKE2b-256 8f568a3e84fddf58a0d52e0b9c462e1db49f013a0252b5c66497ba1d45e04731

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page