добавил человекочитаемый формат длительности трудозатрат
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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}"
|
||||
)
|
||||
|
||||
13
utils.py
13
utils.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user