Получение тегов с сервера только при обновлении БД. Исправил баг с предупреждением об устаревшей БД, когда не указан vetro_project
This commit is contained in:
@@ -23,7 +23,7 @@ class ClockifyAPI(ClockifyConfig):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.token = self._check_token(token)
|
self.token = self._check_token(token)
|
||||||
|
|
||||||
def get_activities(self, **kwargs) -> list[Activity]:
|
def get_activities(self, is_updating=False, **kwargs) -> list[Activity]:
|
||||||
"""
|
"""
|
||||||
Получает с сервера Clockify активности за определнный период
|
Получает с сервера Clockify активности за определнный период
|
||||||
start: datetime - Начальная дата (обязательно)
|
start: datetime - Начальная дата (обязательно)
|
||||||
@@ -36,7 +36,10 @@ class ClockifyAPI(ClockifyConfig):
|
|||||||
logger.info(f"Получено задач: {len(activities)}")
|
logger.info(f"Получено задач: {len(activities)}")
|
||||||
time_worked_out_total = 0
|
time_worked_out_total = 0
|
||||||
|
|
||||||
tags = self.get_tags(**{"page-size": self.tags_count})
|
tags = self.get_tags(is_updating=is_updating)
|
||||||
|
if not tags:
|
||||||
|
logging.info(f"{Fore.YELLOW}В базе данных нет тегов! Обновите БД при помощи флага -i [--init-db]{Fore.RESET}")
|
||||||
|
return []
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for activity in tqdm(activities, desc="Парсинг задач"):
|
for activity in tqdm(activities, desc="Парсинг задач"):
|
||||||
@@ -48,8 +51,13 @@ class ClockifyAPI(ClockifyConfig):
|
|||||||
end = datetime.strptime(activity["timeInterval"]["end"], config.DATETIME_FORMAT) if activity["timeInterval"]["end"] else None
|
end = datetime.strptime(activity["timeInterval"]["end"], config.DATETIME_FORMAT) if activity["timeInterval"]["end"] else None
|
||||||
time_worked_out_total += time_to_hour((end if end else datetime.utcnow()) - start)
|
time_worked_out_total += time_to_hour((end if end else datetime.utcnow()) - start)
|
||||||
tag = [tag for tag in tags if tag.id == tag_id]
|
tag = [tag for tag in tags if tag.id == tag_id]
|
||||||
|
if not tag:
|
||||||
|
logging.info(f"{Fore.YELLOW}В базе данных нет нужного тега {Fore.GREEN}{tag_id}{Fore.YELLOW}! Обновите БД при помощи флага -i [--init-db]{Fore.RESET}")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
tag = tag[0]
|
||||||
try:
|
try:
|
||||||
task_id = parse_task_id(tag[0].title)
|
task_id = parse_task_id(tag.title)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
logger.info(f'{activity["timeInterval"]["start"]}: {activity["description"]} - Неправильный формат тега {tag}')
|
logger.info(f'{activity["timeInterval"]["start"]}: {activity["description"]} - Неправильный формат тега {tag}')
|
||||||
continue
|
continue
|
||||||
@@ -76,18 +84,21 @@ class ClockifyAPI(ClockifyConfig):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def get_tags(self, **kwargs) -> list[Tag]:
|
def get_tags(self, is_updating=False, **kwargs) -> list[Tag]:
|
||||||
"""
|
"""
|
||||||
Получает с сервера Clockify теги
|
Получает с сервера Clockify теги
|
||||||
name: str - optional
|
name: str - optional
|
||||||
archived: bool - optional
|
archived: bool - optional
|
||||||
page-size: int - optional
|
page-size: int - optional
|
||||||
"""
|
"""
|
||||||
tags = requests.get(self.base_url + self.tags_url, params=kwargs, headers={"X-API-KEY": self.token}).json()
|
if is_updating:
|
||||||
|
tags = requests.get(self.base_url + self.tags_url, params={"sort-column": "name", "sort-order": "descending", **kwargs}, headers={"X-API-KEY": self.token}).json()
|
||||||
|
logging.debug(f"{Fore.YELLOW}Получено тегов: {len(tags)}.{Fore.RESET}")
|
||||||
return [Tag(
|
return [Tag(
|
||||||
id=tag["id"],
|
id=tag["id"],
|
||||||
title=tag["name"]
|
title=tag["name"]
|
||||||
) for tag in tags]
|
) for tag in tags]
|
||||||
|
return db.get_tags()
|
||||||
|
|
||||||
def get_vetro_projects(self) -> list[VetroProject]:
|
def get_vetro_projects(self) -> list[VetroProject]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
24
db/db.py
24
db/db.py
@@ -35,9 +35,12 @@ class Database:
|
|||||||
for act in activities:
|
for act in activities:
|
||||||
if is_updated:
|
if is_updated:
|
||||||
tags = self.cursor.execute("SELECT * FROM tag WHERE id = ?", (act.tag_id, )).fetchall()
|
tags = self.cursor.execute("SELECT * FROM tag WHERE id = ?", (act.tag_id, )).fetchall()
|
||||||
vetro_projects = self.cursor.execute("SELECT * FROM vetro_project WHERE id = ?", (act.vetro_project_id, )).fetchall()
|
vetro_project_id = act.vetro_project_id
|
||||||
if not tags or not vetro_projects:
|
if vetro_project_id:
|
||||||
is_updated = False
|
vetro_projects = self.cursor.execute("SELECT * FROM vetro_project WHERE id = ?", (vetro_project_id, )).fetchall()
|
||||||
|
is_updated = tags or vetro_projects
|
||||||
|
else:
|
||||||
|
is_updated = bool(tags)
|
||||||
try:
|
try:
|
||||||
self.cursor.execute(
|
self.cursor.execute(
|
||||||
"INSERT INTO activity VALUES(?,?,?,?,?,?,?,?,?,?)",
|
"INSERT INTO activity VALUES(?,?,?,?,?,?,?,?,?,?)",
|
||||||
@@ -193,3 +196,18 @@ class Database:
|
|||||||
}
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(e)
|
logging.error(e)
|
||||||
|
|
||||||
|
|
||||||
|
def get_tags(self) -> list[Tag]:
|
||||||
|
"""Получает теги из бд"""
|
||||||
|
try:
|
||||||
|
tags = self.cursor.execute("SELECT * FROM tag").fetchall()
|
||||||
|
return [
|
||||||
|
Tag(
|
||||||
|
id=tag[0],
|
||||||
|
title=tag[1]
|
||||||
|
)
|
||||||
|
for tag in tags
|
||||||
|
]
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(e)
|
||||||
|
|||||||
2
track.py
2
track.py
@@ -80,7 +80,7 @@ def main():
|
|||||||
if args.init_db:
|
if args.init_db:
|
||||||
logger.info(Fore.YELLOW + "Обновление базы данных..." + Fore.RESET)
|
logger.info(Fore.YELLOW + "Обновление базы данных..." + Fore.RESET)
|
||||||
try:
|
try:
|
||||||
db.insert_tags(clock.get_tags())
|
db.insert_tags(clock.get_tags(is_updating=True, **{"page-size": clock.tags_count}))
|
||||||
db.insert_vetro_projects(clock.get_vetro_projects())
|
db.insert_vetro_projects(clock.get_vetro_projects())
|
||||||
db.insert_activity_types(red.get_time_entry_activities())
|
db.insert_activity_types(red.get_time_entry_activities())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user