повысил надежность обработки API-ответов и ошибок БД
This commit is contained in:
@@ -80,20 +80,23 @@ class RedmineAPI(RedmineConfig):
|
||||
logger.info(f"{Fore.RED}{activity}{Fore.RESET}".ljust(60) + "❌")
|
||||
return tracked
|
||||
|
||||
def get_time_entry_activities(self) -> list[ActivityTypes]:
|
||||
def get_time_entry_activities(self) -> list[ActivityType]:
|
||||
"""Получает виды Деятельности с сервера Redmine"""
|
||||
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 [
|
||||
ActivityType(id=act.get("id"), title=act.get("name"))
|
||||
for act in resp.json().get("time_entry_activities")
|
||||
if act.get("active")
|
||||
]
|
||||
if not resp.ok:
|
||||
logger.error(f"Ошибка RedmineAPI: {resp.text} {resp.status_code}")
|
||||
return []
|
||||
data = resp.json()
|
||||
logger.debug(data)
|
||||
return [
|
||||
ActivityType(id=act.get("id"), title=act.get("name"))
|
||||
for act in data.get("time_entry_activities", [])
|
||||
if act.get("active")
|
||||
]
|
||||
|
||||
def get_user(self):
|
||||
"""Проверяет токен и возвращает данные юзера"""
|
||||
@@ -103,7 +106,7 @@ class RedmineAPI(RedmineConfig):
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error("Invalid Token for RedmineAPI")
|
||||
logger.error(f"Invalid Token for RedmineAPI: {resp.text}")
|
||||
raise InvalidToken
|
||||
json = resp.json()["user"]
|
||||
return {
|
||||
@@ -114,7 +117,7 @@ class RedmineAPI(RedmineConfig):
|
||||
"username": json["login"]
|
||||
}
|
||||
|
||||
def get_issue(self, issue_id: int) -> Task:
|
||||
def get_issue(self, issue_id: int) -> Task | None:
|
||||
"""Получает задачу по её id с сервера Redmine"""
|
||||
resp = requests.get(
|
||||
self.base_url + self.issue.format(**{"id": issue_id}),
|
||||
@@ -122,8 +125,8 @@ class RedmineAPI(RedmineConfig):
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error("Ошибка RedmineAPI")
|
||||
return {}
|
||||
logger.error(f"Ошибка RedmineAPI: {resp.text} {resp.status_code}")
|
||||
return None
|
||||
issue = resp.json()["issue"]
|
||||
return Task(**{
|
||||
"id": issue["id"],
|
||||
@@ -146,10 +149,14 @@ class RedmineAPI(RedmineConfig):
|
||||
params={"limit": 100, "offset": 100 * i, "status_id": "*"},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok or not resp.json():
|
||||
logger.error("Ошибка RedmineAPI")
|
||||
return {}
|
||||
issues.extend(resp.json()["issues"])
|
||||
if not resp.ok:
|
||||
logger.error(f"Ошибка RedmineAPI: {resp.text} {resp.status_code}")
|
||||
return []
|
||||
data = resp.json()
|
||||
if not data:
|
||||
logger.error("Ошибка RedmineAPI: пустой ответ")
|
||||
return []
|
||||
issues.extend(data["issues"])
|
||||
return [Task(**{
|
||||
"id": issue["id"],
|
||||
"subject": issue["subject"],
|
||||
|
||||
Reference in New Issue
Block a user