Добавил таймауты для API-запросов, уточнил парсинг тегов и типизацию аргументов

This commit is contained in:
2026-07-06 16:01:24 +03:00
parent 8d19e1d43f
commit bd20ef4d48
5 changed files with 56 additions and 22 deletions

View File

@@ -8,14 +8,11 @@ from config import RedmineConfig, config
from classes import Activity, ActivityType
from enums import ActivityTypes
from exceptions import InvalidToken
from .constants import REQUEST_TIMEOUT
logger = logging.getLogger(__name__)
WORKSPACE_ID = config.WORKSPACE_ID
USER_ID = config.USER_ID
class RedmineAPI(RedmineConfig):
"""API клиент для взаимодействия с Redmine.
@@ -52,7 +49,8 @@ class RedmineAPI(RedmineConfig):
"comments": activity.description,
"spent_on": activity.date_start.strftime(self.datetime_format)
}
}
},
timeout=REQUEST_TIMEOUT,
)
if config.is_debug or resp.ok:
activity.is_tracked = True
@@ -84,7 +82,11 @@ class RedmineAPI(RedmineConfig):
def get_time_entry_activities(self) -> list[ActivityTypes]:
"""Получает виды Деятельности с сервера Redmine"""
resp = requests.get(self.base_url + self.time_entry_activities, headers={"X-Redmine-API-KEY": self.token})
resp = requests.get(
self.base_url + self.time_entry_activities,
headers={"X-Redmine-API-KEY": self.token},
timeout=REQUEST_TIMEOUT,
)
logger.debug(resp.json())
if resp.ok:
return [
@@ -95,7 +97,11 @@ class RedmineAPI(RedmineConfig):
def get_user(self):
"""Проверяет токен и возвращает данные юзера"""
resp = requests.get(self.base_url + self.my_account_url, headers={"X-Redmine-Api-Key": self.token})
resp = requests.get(
self.base_url + self.my_account_url,
headers={"X-Redmine-Api-Key": self.token},
timeout=REQUEST_TIMEOUT,
)
if not resp.ok:
logger.error("Invalid Token for RedmineAPI")
raise InvalidToken
@@ -113,7 +119,7 @@ class RedmineAPI(RedmineConfig):
resp = requests.get(
self.base_url + self.issue.format(**{"id": issue_id}),
headers={"X-Redmine-Api-Key": self.token},
timeout=None
timeout=REQUEST_TIMEOUT,
)
if not resp.ok:
logger.error("Ошибка RedmineAPI")
@@ -138,7 +144,7 @@ class RedmineAPI(RedmineConfig):
self.base_url + self.issues,
headers={"X-Redmine-Api-Key": self.token},
params={"limit": 100, "offset": 100 * i, "status_id": "*"},
timeout=None
timeout=REQUEST_TIMEOUT,
)
if not resp.ok or not resp.json():
logger.error("Ошибка RedmineAPI")