Skip to main content

Python library for interacting with the Toggl API.

Project description

TogglPy

Forked: The original project was archived, this is fork partially patched for Toggl API v9. For fully patched project check out other forks.

Latest PyPI version

TogglPy is a python library for interacting with the Toggl API.

Features

  • Make requests against any (Toggl) API endpoint with request data as a dictionary
  • Generate and save PDFs of summary, weekly, or detailed reports
  • Fetch reports as JSON
  • Get all workspaces or all clients
  • Get a specific workspace or client, by ID or name
  • Query projects, by client, or by a single name
  • Add custom time entries

Setup

  • Install the project with pip:
pip install -U TogglPy
  • Import the content:
from toggl.TogglPy import Toggl
  • Create a Toggl object:
toggl = Toggl()
toggl.setAuthCredentials('<EMAIL>', '<PASSWORD>') 

OR:

toggl.setAPIKey('<API-TOKEN>') 

I learn best by examples:

Manual GET requests against any Toggl endpoint:

from toggl.TogglPy import Toggl

# create a Toggl object and set our API key 
toggl = Toggl()
toggl.setAPIKey("mytogglapikey")

response = toggl.request("https://api.track.toggl.com/api/v8/clients")

# print the client name and ID for each client in the response
# list of returned values can be found in the Toggl docs:
# https://github.com/toggl/toggl_api_docs/blob/master/chapters/clients.md
for client in response:
    print("Client name: %s  Client ID: %s" % (client['name'], client['id']))

Or, if you want to add some data to your request:

data = {
    'id': 42,
    'some_key': 'some_value',
    'user_agent': 'TogglPy_test',
}   
response = toggl.request("https://api.track.toggl.com/api/v8/some/endpoint", parameters=data)

Making a POST request to any Toggl endpoint:

data = { 
    "project": 
        { 
            "name": "some project", 
            "wid":777, 
            "template_id":10237, 
            "is_private":true, 
            "cid":123397 
        }
    }

response = toggl.postRequest("https://api.track.toggl.com/api/v8/projects", parameters=data)

Generating PDF reports:

Must authenticate with your personal API token to use these endpoints.

# specify that we want reports from this week
data = {
    'workspace_id': 0000, # see the next example for getting a workspace ID
    'since': '2015-04-27',
    'until': '2015-05-03',
}

# download one of each type of report for this time period
toggl.getWeeklyReportPDF(data, "weekly-report.pdf")
toggl.getDetailedReportPDF(data, "detailed-report.pdf")
toggl.getSummaryReportPDF(data, "summary-report.pdf")

Finding workspaces and clients

This will print some raw data that will give you all the info you need to identify clients and workspaces quickly:

print(toggl.getWorkspaces())
print(toggl.getClients())

If you want to clean it up a little replace those print statements with

for workspace in toggl.getWorkspaces():
    print("Workspace name: %s\tWorkspace ID:%s" % (workspace['name'], workspace['id']))
for client in toggl.getClients():
    print("Client name: %s\tClient ID:%s" % (client['name'], client['id']))

If you want to find a specific client or workspace:

john_doe = toggl.getClient(name="John Doe")
personal = toggl.getWorkspace(name="Personal")

print("John's client ID is %s" % john_doe['id'])
print("The workspace ID for 'Personal' is %s" % personal['id'])

The reverse can also be done; use .getClient(id=0000) or .getWorkspace(id=000) to find items by ID.

Starting New Timer

# You can get your project PID in toggl.com->Projects->(select your project)
# and copying the last number of the url
myprojectpid = 10959693
toggl.startTimeEntry("my description", myprojectpid)

Stopping Current Timer

currentTimer = currentRunningTimeEntry()
stopTimeEntry(currentTimer['data']['id'])

Creating a custom time entry

# Create a custom entry for today, of a 9 hour duration, starting at 10 AM:
toggl.createTimeEntry(hourduration=9, projectname='GoogleDrive', hour=10)

# Or speed up the query process and provide the client's name:
toggl.createTimeEntry(hourduration=9, projectname='GoogleDrive', clientname='Google', hour=10)

# Provide *month* and/or *day* too for specific dates:
toggl.createTimeEntry(hourduration=9, projectname='GoogleDrive', clientname='Google', month=1, day=31, hour=10)

# Automate missing time entries!
for day in (29, 30, 31):
	toggl.createTimeEntry(hourduration=9, projectname='someproject', day=day, hour=10)

Automate daily records

# toggle_entry.py
import datetime
if datetime.datetime.today().weekday() not in (4, 5):
	toggl.createTimeEntry(hourduration=9, projectname='someproject', hour=10)

Add your daily records as a cron job:

(crontab -l ; echo "0 22 * * * toggl_entry.py")| crontab -

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

skip_togglpy-0.2.0.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skip_TogglPy-0.2.0-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file skip_togglpy-0.2.0.tar.gz.

File metadata

  • Download URL: skip_togglpy-0.2.0.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for skip_togglpy-0.2.0.tar.gz
Algorithm Hash digest
SHA256 fcd11e447fc62b8328716e790062850aad318ebcdd99d024c5d8c3fb6f8524b6
MD5 a30f67a55103ad42b4436c49d5986b0a
BLAKE2b-256 c90f6ce56be0e65b8ea0d1c12d501a7918782f44ca1c6ca82520873ff637de46

See more details on using hashes here.

File details

Details for the file skip_TogglPy-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: skip_TogglPy-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for skip_TogglPy-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d261c010c398c03d31cad13ac8b2cfef61a108cc7095f69a298bd5c2335e4fa8
MD5 78119dfe830272de63a072022b64da0e
BLAKE2b-256 09acdb0ba9e3499277cbc8b4ce0e5b70068e40fcdaff03a8b046912c79d741c1

See more details on using hashes here.

Supported by

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