from dataclasses import dataclass, field from datetime import datetime from clockify_sdk import Clockify class NotFound(Exception): pass @dataclass() class Project: api: Clockify = field(repr=False) id: str name: str workspace_id: str @staticmethod def list(api): projects = api.projects.get_all() return [ Project(api, p['id'], p['name'], p['workspaceId']) for p in projects ] @staticmethod def get_by_id(api, project_id): return api.projects.get_by_id(project_id) def sync_projects(api, db): """Sync Clockify projects to local database""" from .db import ClockifyProject # Fetch and store all projects projects = Project.list(api) with db.atomic(): # Delete all existing projects ClockifyProject.delete().execute() query = ClockifyProject.insert_many( [ { "clockify_id": project.id, "name": project.name, "workspace_id": project.workspace_id } for project in projects ] ) query.execute() return len(projects) def export_fact(api, project_id, start, end, description=None): """Export a Hamster fact to Clockify as a time entry""" time_entry = api.time_entries.create( project_id=project_id, start=start, end=end, description=description, billable=True ) return time_entry['id']