class Toggls(): def __init__(self, key): self.toggl = Toggl() self.toggl.setAPIKey(key) def get_Workspaces(self): return self.toggl.getWorkspaces() def getprojectsinworkspace(self, id): urls = "https://www.toggl.com/api/v8/workspaces/" + str(id) + "/projects" return self.toggl.request(urls) def get_workspace(self, name): return self.toggl.getWorkspace(name) def make_time_entry(self, pid, workout): start = workout[1][6:10] + "-" + workout[1][:2] + "-" + workout[1][3:5] + "T" + workout[1][12:] + ".000Z" time = float(workout[2][0])*60*60 + float(workout[2][2:4])*60 + float(workout[2][5:7]) url = 'https://www.toggl.com/api/v8/time_entries' data = { "time_entry": { "description":"Workout", "tags":[""], "duration": time, "start": start, "pid": pid, "created_with":"api" } } return self.toggl.postRequest(url, parameters=data)
def toggl_add_entries(entries: List[TglStandardEntry], tasks: List[TglTask], token=None): toggl = Toggl() if token is None: token = os.getenv("TOGGL_API_TOKEN") toggl.setAPIKey(token) taskmap = {} for t in tasks: k = t.project_name, t.task_name v = t.project_id, t.task_id taskmap[k] = v togglentries = [] for i, entry in enumerate(entries, start=1): try: try: pid, tid = taskmap[(entry.project, entry.task)] except KeyError: raise ConvertingError( f"{entry.project}, {entry.task} not found") togglentry = { "description": entry.description, "pid": pid, "tid": tid if tid else None, "start": entry.start.astimezone().isoformat(), "duration": entry.duration.seconds, "created_with": "easytrack", } togglentries.append(togglentry) except ConvertingError as e: e.i = i e.line = e raise for i, togglentry in enumerate(togglentries, start=1): try: try: print(i, '/', len(togglentries)) time.sleep(2) resp = toggl.postRequest(Endpoints.TIME_ENTRIES, {"time_entry": togglentry}) except urllib.error.HTTPError as e: raise TogglError(body=e.fp.read().decode(), underlying=e) resp = toggl.decodeJSON(resp) if resp.get("data") is None: raise ConvertingError(f"data not found in resp {resp}") except ConvertingError as e: e.i = i e.line = e raise
start_time_dt = strip_and_datetime(event[1]) end_time_dt = strip_and_datetime(event[2]) # Convert to unix start_time_ts = time.mktime(start_time_dt.timetuple()) end_time_ts = time.mktime(end_time_dt.timetuple()) # Calculate time in hours and minutes hourduration = int(end_time_ts - start_time_ts) / 3600 month = int(event[1][5:7]) day = int(event[1][8:10]) hour = int(event[1][11:13]) data = { "time_entry": { "description": event[0], "start": event[1], "duration": int(hourduration * 3600), "pid": projectid, "created_with": "gcal-to-toggl" } } pprint(data) response = toggl.postRequest("https://www.toggl.com/api/v8/time_entries", parameters=data) print(response)