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

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

View File

@@ -4,7 +4,7 @@ import logging
from colorama import Fore from colorama import Fore
from utils import format_date from utils import format_date, format_hours
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -80,9 +80,9 @@ class TrackingService:
logger.info(f"{Fore.YELLOW}Предпросмотр переноса трудочасов{Fore.RESET}") logger.info(f"{Fore.YELLOW}Предпросмотр переноса трудочасов{Fore.RESET}")
logger.info(f"Найдено активностей: {len(activities)}") logger.info(f"Найдено активностей: {len(activities)}")
logger.info(f"Готово к переносу: {len(trackable_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: for activity in trackable_activities:
logger.info( logger.info(
f"{activity.date_start.date()} | #{activity.task_id} | " 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: def time_to_hour(time: timedelta) -> float:
return round(time.total_seconds() / 3600, 3) 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: def today_start() -> datetime:
td = datetime.today() td = datetime.today()
year = td.year year = td.year