Files
hamster-tools/hamstertools/clockify.py
2025-08-07 15:05:07 +01:00

63 lines
1.5 KiB
Python

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']