#TogglPy 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
- Download the project, or download TogglPy.py for local usage
- Import the content:
fromTogglPyimportToggl- Create a Toggl object:
toggl=Toggl()- Authenticate either by Toggl credentials OR using your personal API token:
toggl.setAuthCredentials('<EMAIL>', '<PASSWORD>') OR:
toggl.setAPIKey('<API-TOKEN>') #I learn best by examples: ###Manual GET requests against any Toggl endpoint:
fromTogglPyimportToggl# create a Toggl object and set our API key toggl=Toggl()
toggl.setAPIKey("mytogglapikey")
response=toggl.request("https://www.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)forclientinreponse:
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://www.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://www.toggl.com/api/v8/projects", parameters=data)###Generating PDF reports:
# specify that we want reports from this weekdata= {
'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 periodtoggl.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:
printtoggl.getWorkspaces()
printtoggl.getClients()If you want to clean it up a little replace those print statements with
forworkspaceintoggl.getWorkspaces():
print"Workspace name: %s\tWorkspace id:%s"% (workspace['name'], workspace['id'])
forclientintoggl.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.
# You can get your project pid in toggl.com->Projects->(select your project) and copying the last number of the urlmyprojectpid=10959693toggl.startTimeEntry("my description", myprojectpid)currentTimer=currentRunningTimeEntry()
stopTimeEntry(currentTimer['data']['id'])# 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 clien't 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!fordayin (29, 30, 31):
toggl.createTimeEntry(hourduration=9, projectname='someproject', day=day, hour=10)#toggle_entry.pyimportdatetimeifdatetime.datetime.today().weekday() notin (4, 5):
toggl.createTimeEntry(hourduration=9, projectname='someproject', hour=10)(crontab -l ;echo"0 22 * * * toggl_entry.py")| crontab -