повысил надежность обработки API-ответов и ошибок БД
This commit is contained in:
@@ -33,12 +33,16 @@ class ClockifyAPI(ClockifyConfig):
|
||||
page-size: int - Размер страницы (по умолчанию 50)
|
||||
"""
|
||||
time_entries_url = self.time_entries_url
|
||||
activities = requests.get(
|
||||
resp = requests.get(
|
||||
self.base_url + time_entries_url,
|
||||
params=kwargs,
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(f"Ошибка ClockifyAPI: {resp.text} {resp.status_code}")
|
||||
resp.raise_for_status()
|
||||
activities = resp.json()
|
||||
if not activities:
|
||||
return []
|
||||
logger.info(f"Получено задач: {len(activities)}")
|
||||
@@ -84,6 +88,9 @@ class ClockifyAPI(ClockifyConfig):
|
||||
task_id = parse_task_id(tag.title)
|
||||
|
||||
author = db.get_user_by("clockify_user_id", activity["userId"])
|
||||
if not author:
|
||||
logger.error(f"Не найден автор активности {activity['id']}")
|
||||
continue
|
||||
|
||||
result.append(
|
||||
Activity(
|
||||
@@ -124,12 +131,16 @@ class ClockifyAPI(ClockifyConfig):
|
||||
**kwargs,
|
||||
"page": page
|
||||
}
|
||||
tags = requests.get(
|
||||
resp = requests.get(
|
||||
self.base_url + self.tags_url,
|
||||
params=params,
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(f"Ошибка ClockifyAPI: {resp.text} {resp.status_code}")
|
||||
resp.raise_for_status()
|
||||
tags = resp.json()
|
||||
|
||||
for tag in tags:
|
||||
clockify_tag = Tag(
|
||||
@@ -156,18 +167,26 @@ class ClockifyAPI(ClockifyConfig):
|
||||
"""
|
||||
Получает с сервера Clockify Проекты (ДО) Ветро
|
||||
"""
|
||||
projects = requests.get(
|
||||
resp = requests.get(
|
||||
self.base_url + self.projects_url,
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(f"Ошибка ClockifyAPI: {resp.text} {resp.status_code}")
|
||||
resp.raise_for_status()
|
||||
projects = resp.json()
|
||||
for project in projects:
|
||||
if not project.get("archived"):
|
||||
vetro_projects = requests.get(
|
||||
resp = requests.get(
|
||||
self.base_url + self.tasks_url(project.get("id")),
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(f"Ошибка ClockifyAPI: {resp.text} {resp.status_code}")
|
||||
resp.raise_for_status()
|
||||
vetro_projects = resp.json()
|
||||
return [VetroProject(
|
||||
id=vetro_project["id"],
|
||||
title=vetro_project["name"]
|
||||
@@ -200,7 +219,7 @@ class ClockifyAPI(ClockifyConfig):
|
||||
if config.is_debug or resp.ok:
|
||||
logger.info(f"{Fore.GREEN}{activity}{Fore.RESET}".ljust(60) + "✅")
|
||||
else:
|
||||
logger.debug(resp.json())
|
||||
logger.debug(resp.text)
|
||||
logger.error(f"{Fore.RED}{activity}{Fore.RESET}".ljust(60) + "❌")
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
@@ -214,7 +233,7 @@ class ClockifyAPI(ClockifyConfig):
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(resp.json())
|
||||
logger.error(resp.text)
|
||||
raise InvalidToken
|
||||
resp = resp.json()
|
||||
logger.debug({"id": resp["id"], "email": resp["email"], "name": resp["name"]})
|
||||
@@ -228,7 +247,7 @@ class ClockifyAPI(ClockifyConfig):
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(resp.json())
|
||||
logger.error(resp.text)
|
||||
raise requests.exceptions.RequestException(Fore.RED + "Ошибка запроса." + Fore.RESET)
|
||||
json = resp.json()
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user