Merge branch 'dev'

This commit is contained in:
2026-06-26 17:09:15 +03:00
3 changed files with 34 additions and 15 deletions

View File

@@ -2,7 +2,6 @@ import logging
from colorama import Fore from colorama import Fore
import requests import requests
from tqdm import tqdm
from classes.classes import Task from classes.classes import Task
from config import RedmineConfig, config from config import RedmineConfig, config
@@ -27,15 +26,19 @@ class RedmineAPI(RedmineConfig):
self.token = token self.token = token
self._check_token() self._check_token()
def track_activities(self, activities: list[Activity]) -> list[Activity]: def track_activities(self, activities: list[Activity], on_success=None) -> list[Activity]:
"""Заносит трудочасы на сервер Redmine""" """Заносит трудочасы на сервер Redmine"""
is_beginner = config.is_beginner is_beginner = config.is_beginner
if is_beginner: if is_beginner:
logger.info(f"{Fore.YELLOW}Делим трудочасы пополам{Fore.RESET}") logger.info(f"{Fore.YELLOW}Делим трудочасы пополам{Fore.RESET}")
tracked = [] tracked = []
for activity in tqdm(activities, desc="Занесение трудочасов"): failed_activities = []
if not(not activity.is_tracked and activity.date_end): activities_to_track = [
continue activity
for activity in activities
if not activity.is_tracked and activity.date_end
]
for activity in activities_to_track:
try: try:
if not config.is_debug: if not config.is_debug:
resp = requests.post( resp = requests.post(
@@ -53,18 +56,30 @@ class RedmineAPI(RedmineConfig):
) )
if config.is_debug or resp.ok: if config.is_debug or resp.ok:
activity.is_tracked = True activity.is_tracked = True
if on_success:
on_success(activity)
tracked.append(activity) tracked.append(activity)
logger.debug(activity) logger.info(f"{Fore.GREEN}{activity} успешно занесена в Redmine{Fore.RESET}".ljust(60) + "")
else: else:
logger.error(Fore.RED + f"{activity} Не была затрекана" + Fore.RED) try:
logger.error(f"{resp.json()['errors']} {resp.status_code}") errors = resp.json()["errors"]
except Exception:
errors = resp.text
logger.debug(errors)
logger.error(f"{Fore.RED}{activity} не была занесена в Redmine{Fore.RESET}".ljust(60) + "")
logger.error(f"{errors} {resp.status_code}")
failed_activities.append(activity)
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)
failed_activities.append(activity)
continue continue
if len(activities) == len(tracked): if len(activities_to_track) == len(tracked):
logger.info(Fore.GREEN + "Все задачи были успешно занесены в Redmine" + Fore.RESET) logger.info(Fore.GREEN + "Все задачи были успешно занесены в Redmine" + Fore.RESET)
else: else:
logger.info(f"{Fore.YELLOW}Не все задачи были занесены в Redmine. Занесено {len(tracked)}{Fore.RESET}") logger.info(f"{Fore.YELLOW}Не все задачи были занесены в Redmine. Занесено {len(tracked)}{Fore.RESET}")
logger.info(f"{Fore.YELLOW}Не занесены задачи:{Fore.RESET}")
for activity in failed_activities:
logger.info(f"{Fore.RED}{activity}{Fore.RESET}".ljust(60) + "")
return tracked return tracked
def get_time_entry_activities(self) -> list[ActivityTypes]: def get_time_entry_activities(self) -> list[ActivityTypes]:

View File

@@ -19,7 +19,7 @@ class Activity:
is_tracked: bool = False is_tracked: bool = False
def __str__(self): def __str__(self):
return f'({self.task_id}) - {self.description}'[:60] return f'({self.task_id}) - "{self.description}"'[:60]
@dataclass @dataclass

View File

@@ -60,12 +60,16 @@ def main():
logger.info(Fore.YELLOW + "Нет задач для занесения трудочасов" + Fore.RESET) logger.info(Fore.YELLOW + "Нет задач для занесения трудочасов" + Fore.RESET)
return return
db.insert_activities(activities) db.insert_activities(activities)
def save_tracked_activity(activity):
db.insert_activities([activity])
db.insert_time_entries([activity])
try: try:
tracked_activities = red.track_activities(activities) red.track_activities(
# clock.mark_tracked(tracked_activities) activities,
if not is_debug: on_success=None if is_debug else save_tracked_activity,
db.insert_time_entries(tracked_activities) )
db.insert_activities(tracked_activities)
except Exception as e: except Exception as e:
logger.error(e) logger.error(e)