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

View File

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

View File

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