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.5.1.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

toggl_track-0.5.1-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: toggl_track-0.5.1.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.9

File hashes

Hashes for toggl_track-0.5.1.tar.gz
Algorithm Hash digest
SHA256 e2aeefdfa57735655d4b9872273360ef928dde0e647baaa9575c5c8d47ad8d39
MD5 be4bf4e137e611913b9ae048dec6a4b2
BLAKE2b-256 cb4ffa6e9a694a2bb01649403271ee5fc6fc77e98e70081dfb123e8b0d9d4296

See more details on using hashes here.

File details

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

File metadata

  • Download URL: toggl_track-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.9

File hashes

Hashes for toggl_track-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 15a8f8701ddab467dcceaa74756b66d6ea4f224020393bdfb5d76e8f34ab1e3f
MD5 d92a5d987d85bd5be1351a937aefb696
BLAKE2b-256 cc799e495b18a50b38a3637bd3d92176969d966b38022ecf0ef3180c4f77aec9

See more details on using hashes here.

Supported by

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