Добавил таймауты для API-запросов, уточнил парсинг тегов и типизацию аргументов
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
from datetime import datetime
|
||||
import logging
|
||||
from typing import Union
|
||||
|
||||
from colorama import Fore
|
||||
import requests
|
||||
@@ -10,6 +9,7 @@ from config import ClockifyConfig, config, db
|
||||
from classes import Activity, Tag, VetroProject
|
||||
from exceptions import InvalidToken
|
||||
from utils import parse_task_id, time_to_hour
|
||||
from .constants import REQUEST_TIMEOUT
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -33,7 +33,12 @@ class ClockifyAPI(ClockifyConfig):
|
||||
page-size: int - Размер страницы (по умолчанию 50)
|
||||
"""
|
||||
time_entries_url = self.time_entries_url
|
||||
activities = requests.get(self.base_url + time_entries_url, params=kwargs, headers={"X-API-KEY": self.token}).json()
|
||||
activities = requests.get(
|
||||
self.base_url + time_entries_url,
|
||||
params=kwargs,
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
if not activities:
|
||||
return []
|
||||
logger.info(f"Получено задач: {len(activities)}")
|
||||
@@ -100,7 +105,7 @@ class ClockifyAPI(ClockifyConfig):
|
||||
return result
|
||||
|
||||
|
||||
def get_tags(self, is_updating=False, tag_id="", **kwargs) -> Union[list[Tag], Tag, None]:
|
||||
def get_tags(self, is_updating=False, tag_id="", **kwargs) -> list[Tag] | Tag | None:
|
||||
"""
|
||||
Получает с сервера Clockify теги
|
||||
name: str - optional
|
||||
@@ -122,7 +127,8 @@ class ClockifyAPI(ClockifyConfig):
|
||||
tags = requests.get(
|
||||
self.base_url + self.tags_url,
|
||||
params=params,
|
||||
headers={"X-API-KEY": self.token}
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
|
||||
for tag in tags:
|
||||
@@ -150,10 +156,18 @@ class ClockifyAPI(ClockifyConfig):
|
||||
"""
|
||||
Получает с сервера Clockify Проекты (ДО) Ветро
|
||||
"""
|
||||
projects = requests.get(self.base_url + self.projects_url, headers={"X-API-KEY": self.token}).json()
|
||||
projects = requests.get(
|
||||
self.base_url + self.projects_url,
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
for project in projects:
|
||||
if not project.get("archived"):
|
||||
vetro_projects = requests.get(self.base_url + self.tasks_url(project.get("id")), headers={"X-API-KEY": self.token}).json()
|
||||
vetro_projects = requests.get(
|
||||
self.base_url + self.tasks_url(project.get("id")),
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
).json()
|
||||
return [VetroProject(
|
||||
id=vetro_project["id"],
|
||||
title=vetro_project["name"]
|
||||
@@ -180,7 +194,8 @@ class ClockifyAPI(ClockifyConfig):
|
||||
"projectId": activity.project_id
|
||||
}, headers={
|
||||
"X-API-KEY": self.token
|
||||
}
|
||||
},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if config.is_debug or resp.ok:
|
||||
logger.info(f"{Fore.GREEN}{activity}{Fore.RESET}".ljust(60) + "✅")
|
||||
@@ -193,7 +208,11 @@ class ClockifyAPI(ClockifyConfig):
|
||||
|
||||
def _check_token(self, token: str) -> str:
|
||||
"""Проверяет токен"""
|
||||
resp = requests.get(self.base_url + self.user_url, headers={"X-API-KEY": token})
|
||||
resp = requests.get(
|
||||
self.base_url + self.user_url,
|
||||
headers={"X-API-KEY": token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(resp.json())
|
||||
raise InvalidToken
|
||||
@@ -203,7 +222,11 @@ class ClockifyAPI(ClockifyConfig):
|
||||
|
||||
def get_user(self):
|
||||
"""Получает нужные данные пользователя с сервера Clockify"""
|
||||
resp = requests.get(self.base_url + self.user_url, headers={"X-API-KEY": self.token})
|
||||
resp = requests.get(
|
||||
self.base_url + self.user_url,
|
||||
headers={"X-API-KEY": self.token},
|
||||
timeout=REQUEST_TIMEOUT,
|
||||
)
|
||||
if not resp.ok:
|
||||
logger.error(resp.json())
|
||||
raise requests.exceptions.RequestException(Fore.RED + "Ошибка запроса." + Fore.RESET)
|
||||
|
||||
Reference in New Issue
Block a user