разделил создание зависимостей и сценарий переноса трудочасов, переименовал основную точку входа в main.py

This commit is contained in:
2026-07-06 16:18:55 +03:00
parent 9a0ce15160
commit baf6e2f3a4
8 changed files with 153 additions and 106 deletions

View File

@@ -5,7 +5,7 @@ from colorama import Fore
import requests
from tqdm import tqdm
from config import ClockifyConfig, config, db
from config import ClockifyConfig, config
from classes import Activity, Tag, VetroProject
from exceptions import InvalidToken
from utils import parse_task_id, time_to_hour
@@ -20,8 +20,10 @@ class ClockifyAPI(ClockifyConfig):
Позволяет получать активности, теги, проекты ветро и помечать активности затрканными.
"""
def __init__(self, token: str, *args, **kwargs):
def __init__(self, token: str, db, redmine_api=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.db = db
self.redmine_api = redmine_api
self.token = self._check_token(token)
def get_activities(self, is_updating=False, **kwargs) -> list[Activity]:
@@ -70,24 +72,26 @@ class ClockifyAPI(ClockifyConfig):
if not tag:
tag = self.get_tags(True, tag_id=tag_id, **{"page-size": self.tags_count})
if isinstance(tag, Tag):
db.insert_tags([tag])
self.db.insert_tags([tag])
tags_by_id[tag.id] = tag
from config import red
try:
task_id = parse_task_id(tag.title)
except Exception as e:
logger.error(f"При обновлении тега произошла ошибка: {e}\nПопробуйте обновить флагом -i [--init-db]")
continue
task = red.get_issue(task_id)
if not self.redmine_api:
logger.error("Не передан RedmineAPI для обновления задачи по новому тегу")
continue
task = self.redmine_api.get_issue(task_id)
if task:
db.insert_tasks([task])
self.db.insert_tasks([task])
else:
logger.error(f"{Fore.RED} Тег не найден: {tag_id}{Fore.RESET}")
continue
else:
task_id = parse_task_id(tag.title)
author = db.get_user_by("clockify_user_id", activity["userId"])
author = self.db.get_user_by("clockify_user_id", activity["userId"])
if not author:
logger.error(f"Не найден автор активности {activity['id']}")
continue
@@ -103,7 +107,7 @@ class ClockifyAPI(ClockifyConfig):
time_spent=time_to_hour((end if end else datetime.utcnow()) - start),
date_start=start,
date_end=end,
is_tracked=db.has_time_entry(activity["id"]),
is_tracked=self.db.has_time_entry(activity["id"]),
author_id=author["id"]
)
)
@@ -161,7 +165,7 @@ class ClockifyAPI(ClockifyConfig):
logger.debug(f"{Fore.YELLOW}Получено тегов: {len(result)}.{Fore.RESET}")
return result
return db.get_tags()
return self.db.get_tags()
def get_vetro_projects(self) -> list[VetroProject]:
"""