добавил человекочитаемый формат длительности трудозатрат

This commit is contained in:
2026-07-06 16:41:32 +03:00
parent 4da65657d8
commit c35b479a0b
3 changed files with 18 additions and 5 deletions

View File

@@ -8,7 +8,7 @@ from tqdm import tqdm
from config import ClockifyConfig, config
from classes import Activity, Tag, VetroProject
from exceptions import InvalidToken
from utils import parse_task_id, time_to_hour
from utils import format_hours, parse_task_id, time_to_hour
from .constants import REQUEST_TIMEOUT
@@ -112,7 +112,7 @@ class ClockifyAPI(ClockifyConfig):
)
)
logger.info(f"Сохранено задач: {len(result)}")
logger.info(f"Отработано часов: {time_worked_out_total:.3f}")
logger.info(f"Отработано часов: {format_hours(time_worked_out_total)}")
return result

View File

@@ -4,7 +4,7 @@ import logging
from colorama import Fore
from utils import format_date
from utils import format_date, format_hours
logger = logging.getLogger(__name__)
@@ -80,9 +80,9 @@ class TrackingService:
logger.info(f"{Fore.YELLOW}Предпросмотр переноса трудочасов{Fore.RESET}")
logger.info(f"Найдено активностей: {len(activities)}")
logger.info(f"Готово к переносу: {len(trackable_activities)}")
logger.info(f"Всего часов: {total_hours:.3f}")
logger.info(f"Всего часов: {format_hours(total_hours)}")
for activity in trackable_activities:
logger.info(
f"{activity.date_start.date()} | #{activity.task_id} | "
f"{activity.time_spent:.3f} ч | {activity.description}"
f"{format_hours(activity.time_spent)} | {activity.description}"
)

View File

@@ -13,6 +13,19 @@ logger = logging.getLogger(__name__)
def time_to_hour(time: timedelta) -> float:
return round(time.total_seconds() / 3600, 3)
def format_hours(hours: float) -> str:
"""Форматирует десятичные часы и длительность без нулевых старших единиц."""
total_seconds = round(hours * 3600)
hours_part, remaining_seconds = divmod(total_seconds, 3600)
minutes_part, seconds_part = divmod(remaining_seconds, 60)
if hours_part:
duration = f"{hours_part}:{minutes_part:02}:{seconds_part:02}"
elif minutes_part:
duration = f"{minutes_part}:{seconds_part:02}"
else:
duration = str(seconds_part)
return f"{hours:.3f} ч ({duration})"
def today_start() -> datetime:
td = datetime.today()
year = td.year