Большой рефактор. Обновление тегов, задач и типов деятельности при сохранении активностей в БД

This commit is contained in:
2025-07-03 15:50:43 +03:00
parent ca20bd8620
commit f627f318a6
6 changed files with 215 additions and 148 deletions

View File

@@ -1,5 +1,6 @@
from datetime import datetime
import logging
from typing import Union
from colorama import Fore
import requests
@@ -52,17 +53,28 @@ class ClockifyAPI(ClockifyConfig):
start = datetime.strptime(activity["timeInterval"]["start"], config.DATETIME_FORMAT)
end = datetime.strptime(activity["timeInterval"]["end"], config.DATETIME_FORMAT) if activity["timeInterval"]["end"] else None
time_worked_out_total += time_to_hour((end if end else datetime.utcnow()) - start)
tag = [tag for tag in tags if tag.id == tag_id]
if not tag:
logging.info(f"{Fore.YELLOW}В базе данных нет нужного тега {Fore.GREEN}{tag_id}{Fore.YELLOW}! Обновите БД при помощи флага -i [--init-db]{Fore.RESET}")
break
tag = self.get_tags(True, tag_id=tag_id)
if tag:
db.insert_tags([tag])
from config import red
try:
task_id = parse_task_id(tag.title)
except Exception as e:
logger.error(e)
continue
task = red.get_issue(task_id)
if task:
db.insert_tasks([task])
else:
logger.error(f"{Fore.RED} Тег не найден: {tag_id}{Fore.RESET}")
else:
tag = tag[0]
try:
task_id = parse_task_id(tag.title)
except ValueError:
logger.info(f'{activity["timeInterval"]["start"]}: {activity["description"]} - Неправильный формат тега {tag}')
continue
author = db.get_user_by("clockify_user_id", activity["userId"])
@@ -86,7 +98,7 @@ class ClockifyAPI(ClockifyConfig):
return result
def get_tags(self, is_updating=False, **kwargs) -> list[Tag]:
def get_tags(self, is_updating=False, tag_id="", **kwargs) -> Union[list[Tag], Tag]:
"""
Получает с сервера Clockify теги
name: str - optional
@@ -95,7 +107,14 @@ class ClockifyAPI(ClockifyConfig):
"""
if is_updating:
tags = requests.get(self.base_url + self.tags_url, params={"sort-column": "name", "sort-order": "descending", **kwargs}, headers={"X-API-KEY": self.token}).json()
logging.debug(f"{Fore.YELLOW}Получено тегов: {len(tags)}.{Fore.RESET}")
if tag_id:
for tag in tags:
if tag_id == tag["id"]:
return Tag(
id=tag["id"],
title=tag["name"]
)
logger.debug(f"{Fore.YELLOW}Получено тегов: {len(tags)}.{Fore.RESET}")
return [Tag(
id=tag["id"],
title=tag["name"]