diff --git a/api/clockify.py b/api/clockify.py index e33aa11..3709456 100644 --- a/api/clockify.py +++ b/api/clockify.py @@ -59,8 +59,9 @@ class ClockifyAPI(ClockifyConfig): if not tag: tag = self.get_tags(True, tag_id=tag_id, **{"page-size": self.tags_count}) - if tag: - db.insert_tags([tag] if isinstance(tag, Tag) else tag) + if isinstance(tag, Tag): + db.insert_tags([tag]) + tags.append(tag) from config import red try: task_id = parse_task_id(tag.title) @@ -72,6 +73,7 @@ class ClockifyAPI(ClockifyConfig): db.insert_tasks([task]) else: logger.error(f"{Fore.RED} Тег не найден: {tag_id}{Fore.RESET}") + continue else: tag = tag[0] task_id = parse_task_id(tag.title) @@ -98,7 +100,7 @@ class ClockifyAPI(ClockifyConfig): return result - def get_tags(self, is_updating=False, tag_id="", **kwargs) -> Union[list[Tag], Tag]: + def get_tags(self, is_updating=False, tag_id="", **kwargs) -> Union[list[Tag], Tag, None]: """ Получает с сервера Clockify теги name: str - optional @@ -108,26 +110,40 @@ class ClockifyAPI(ClockifyConfig): """ if is_updating: page = 1 - kwargs["page"] = page - tags = requests.get(self.base_url + self.tags_url, params={"sort-column": "name", "sort-order": "descending", **kwargs}, headers={"X-API-KEY": self.token}).json() - while len(tags) == self.tags_count: - if tag_id: - for tag in tags: - if tag_id == tag["id"]: - return Tag( - id=tag["id"], - title=tag["name"] - ) - page += 1 - kwargs["page"] = page - tags = requests.get(self.base_url + self.tags_url, params={"sort-column": "name", "sort-order": "descending", **kwargs}, headers={"X-API-KEY": self.token}).json() - else: + page_size = int(kwargs.get("page-size", self.tags_count)) + result = [] + while True: + params = { + "sort-column": "name", + "sort-order": "descending", + **kwargs, + "page": page + } + tags = requests.get( + self.base_url + self.tags_url, + params=params, + headers={"X-API-KEY": self.token} + ).json() + + for tag in tags: + clockify_tag = Tag( + id=tag["id"], + title=tag["name"] + ) + if tag_id and tag_id == clockify_tag.id: + return clockify_tag + if not tag_id: + result.append(clockify_tag) + + if len(tags) < page_size: break - logger.debug(f"{Fore.YELLOW}Получено тегов: {len(tags)}.{Fore.RESET}") - return [Tag( - id=tag["id"], - title=tag["name"] - ) for tag in tags] + page += 1 + + if tag_id: + return None + + logger.debug(f"{Fore.YELLOW}Получено тегов: {len(result)}.{Fore.RESET}") + return result return db.get_tags() def get_vetro_projects(self) -> list[VetroProject]: