убрал служебный id Clockify из комментариев Redmine

This commit is contained in:
2026-07-06 16:56:15 +03:00
parent a4a4178880
commit 9352a84723
2 changed files with 1 additions and 40 deletions

View File

@@ -4,7 +4,5 @@ from enums import ActivityTypes
REQUEST_TIMEOUT = 30 REQUEST_TIMEOUT = 30
REDMINE_ISSUES_LIMIT = 100 REDMINE_ISSUES_LIMIT = 100
REDMINE_TIME_ENTRIES_LIMIT = 100
CLOCKIFY_ACTIVITY_COMMENT_PREFIX = "Clockify activity ID:"
ACTIVITY_TYPE_BY_VETRO_PROJECT = {} ACTIVITY_TYPE_BY_VETRO_PROJECT = {}
DEFAULT_ACTIVITY_TYPE = ActivityTypes.DEVELOPMENT DEFAULT_ACTIVITY_TYPE = ActivityTypes.DEVELOPMENT

View File

@@ -10,10 +10,8 @@ from exceptions import InvalidToken
from utils import format_hours from utils import format_hours
from .constants import ( from .constants import (
ACTIVITY_TYPE_BY_VETRO_PROJECT, ACTIVITY_TYPE_BY_VETRO_PROJECT,
CLOCKIFY_ACTIVITY_COMMENT_PREFIX,
DEFAULT_ACTIVITY_TYPE, DEFAULT_ACTIVITY_TYPE,
REDMINE_ISSUES_LIMIT, REDMINE_ISSUES_LIMIT,
REDMINE_TIME_ENTRIES_LIMIT,
REQUEST_TIMEOUT, REQUEST_TIMEOUT,
) )
@@ -44,16 +42,6 @@ class RedmineAPI(RedmineConfig):
] ]
for activity in activities_to_track: for activity in activities_to_track:
try: try:
if not config.is_debug and self.has_time_entry_for_activity(activity):
activity.is_tracked = True
if on_success:
on_success(activity)
tracked.append(activity)
logger.info(
f"{Fore.GREEN}{self.format_activity_result(activity, is_beginner)}"
f"{Fore.RESET}".ljust(100) + ""
)
continue
if not config.is_debug: if not config.is_debug:
resp = requests.post( resp = requests.post(
self.base_url + self.time_entries_url, self.base_url + self.time_entries_url,
@@ -63,7 +51,7 @@ class RedmineAPI(RedmineConfig):
"issue_id": activity.task_id, "issue_id": activity.task_id,
"hours": round(activity.time_spent / (2 if is_beginner else 1), 3), "hours": round(activity.time_spent / (2 if is_beginner else 1), 3),
"activity_id": self.get_activity_type_id(activity), "activity_id": self.get_activity_type_id(activity),
"comments": self.get_comment(activity), "comments": activity.description,
"spent_on": activity.date_start.strftime(self.datetime_format) "spent_on": activity.date_start.strftime(self.datetime_format)
} }
}, },
@@ -105,37 +93,12 @@ class RedmineAPI(RedmineConfig):
hours = round(activity.time_spent / (2 if is_beginner else 1), 3) hours = round(activity.time_spent / (2 if is_beginner else 1), 3)
return f"#{activity.task_id} | {format_hours(hours)} | {activity.description}" return f"#{activity.task_id} | {format_hours(hours)} | {activity.description}"
def get_comment(self, activity: Activity) -> str:
"""Формирует комментарий Redmine с внешним id активности Clockify."""
return f"{activity.description}\n{CLOCKIFY_ACTIVITY_COMMENT_PREFIX} {activity.id}"
def get_activity_type_id(self, activity: Activity) -> int: def get_activity_type_id(self, activity: Activity) -> int:
"""Возвращает тип деятельности Redmine для активности Clockify.""" """Возвращает тип деятельности Redmine для активности Clockify."""
return ACTIVITY_TYPE_BY_VETRO_PROJECT.get( return ACTIVITY_TYPE_BY_VETRO_PROJECT.get(
activity.vetro_project_id, activity.vetro_project_id,
DEFAULT_ACTIVITY_TYPE, DEFAULT_ACTIVITY_TYPE,
) )
def has_time_entry_for_activity(self, activity: Activity) -> bool:
"""Проверяет, была ли активность Clockify уже перенесена в Redmine."""
resp = requests.get(
self.base_url + self.time_entries_url,
headers={"X-Redmine-Api-Key": self.token},
params={
"issue_id": activity.task_id,
"spent_on": activity.date_start.strftime(self.datetime_format),
"limit": REDMINE_TIME_ENTRIES_LIMIT,
},
timeout=REQUEST_TIMEOUT,
)
if not resp.ok:
logger.error(f"Ошибка RedmineAPI: {resp.text} {resp.status_code}")
return False
marker = f"{CLOCKIFY_ACTIVITY_COMMENT_PREFIX} {activity.id}"
return any(
marker in time_entry.get("comments", "")
for time_entry in resp.json().get("time_entries", [])
)
def get_time_entry_activities(self) -> list[ActivityType]: def get_time_entry_activities(self) -> list[ActivityType]:
"""Получает виды Деятельности с сервера Redmine""" """Получает виды Деятельности с сервера Redmine"""