From 20fa3eb8a1db9abde3616c7f56a12fad0461d074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AD=D0=B4=D1=83=D0=B0=D1=80=D0=B4?= Date: Fri, 5 Jun 2026 16:14:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20=D1=81=20list?= =?UTF-8?q?=20has=20no=20attribute=20'title'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/clockify.py | 60 +++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 22 deletions(-) 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]: