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