Убрал лишние поля у класса. Выделил важные сообщения разными цветами
This commit is contained in:
@@ -42,7 +42,7 @@ class ClockifyAPI(ClockifyConfig):
|
||||
time_worked_out_total += time_to_hour((end if end else datetime.utcnow()) - start)
|
||||
tag = [tag for tag in self.get_tags() if tag.id == tag_id][0]
|
||||
try:
|
||||
task_id, task_title = tag.title.split(" - ")
|
||||
task_id, _ = tag.title.split(" - ")
|
||||
except ValueError:
|
||||
logger.info(f'{activity["timeInterval"]["start"]}: {activity["description"]} - Неправильный формат тега {tag}')
|
||||
continue
|
||||
@@ -51,10 +51,8 @@ class ClockifyAPI(ClockifyConfig):
|
||||
id=activity["id"],
|
||||
tag_id=tag_id,
|
||||
task_id=task_id,
|
||||
task_title=task_title,
|
||||
project_id=activity["projectId"],
|
||||
vetro_project_id=activity["taskId"],
|
||||
vetro_project_title=config.VETRO_PROJECTS.get(activity.get("taskId")),
|
||||
description=activity["description"],
|
||||
time_spent=time_to_hour((end if end else datetime.utcnow()) - start),
|
||||
date_start=start,
|
||||
@@ -109,10 +107,10 @@ class ClockifyAPI(ClockifyConfig):
|
||||
)
|
||||
if resp.ok:
|
||||
logger.debug(resp.json())
|
||||
logger.info(f"{activity} {Fore.GREEN} помечена как затреканная{Fore.RESET}")
|
||||
logger.info(f"{Fore.GREEN} {activity} помечена как затреканная{Fore.RESET}")
|
||||
else:
|
||||
logger.debug(resp.json())
|
||||
logger.error(f"{activity} {Fore.RED} не помечена как затреканная{Fore.RESET}")
|
||||
logger.error(f"{Fore.RED} {activity} не помечена как затреканная{Fore.RESET}")
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
return
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import logging
|
||||
|
||||
from colorama import Fore
|
||||
import requests
|
||||
from tqdm import tqdm
|
||||
|
||||
@@ -46,7 +47,7 @@ class RedmineAPI(RedmineConfig):
|
||||
tracked.append(activity)
|
||||
logger.debug(activity)
|
||||
else:
|
||||
logger.error(f"{activity} Не была затрекана")
|
||||
logger.error(Fore.RED + f"{activity} Не была затрекана" + Fore.RED)
|
||||
logger.error(f"{resp.json()['errors']} {resp.status_code}")
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
@@ -8,9 +8,7 @@ from enums import ClockifyProjects, VetroProjects
|
||||
class Activity:
|
||||
id: str
|
||||
vetro_project_id: VetroProjects
|
||||
vetro_project_title: str
|
||||
task_id: int
|
||||
task_title: str
|
||||
tag_id: str
|
||||
description: str
|
||||
project_id: ClockifyProjects
|
||||
@@ -20,7 +18,7 @@ class Activity:
|
||||
is_tracked: bool = False
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.date_start + timedelta(hours=3)}|{self.vetro_project_title}|{self.description} для задачи "{self.task_title}"'
|
||||
return f'{self.date_start + timedelta(hours=3)}|{self.description} для задачи #{self.task_id}'
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
20
db/db.py
20
db/db.py
@@ -48,8 +48,8 @@ class Database:
|
||||
)
|
||||
)
|
||||
self.con.commit()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
except Exception:
|
||||
pass
|
||||
if not is_updated:
|
||||
logging.info("База данных устарела. Рекомендуем обновить с помощью флага -i [--init-db]")
|
||||
|
||||
@@ -72,8 +72,8 @@ class Database:
|
||||
)
|
||||
)
|
||||
self.con.commit()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def insert_tags(self, tags: list[Tag]):
|
||||
@@ -82,8 +82,8 @@ class Database:
|
||||
try:
|
||||
cur.execute("INSERT INTO tags VALUES(?, ?)",(tag.id,tag.title))
|
||||
self.con.commit()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def insert_vetro_projects(self, vetro_projects: list[VetroProject]):
|
||||
@@ -92,8 +92,8 @@ class Database:
|
||||
try:
|
||||
cur.execute("INSERT INTO vetro_projects VALUES(?, ?)", (vetro_project.id, vetro_project.title))
|
||||
self.con.commit()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def insert_activity_types(self, activity_types: list[ActivityType]):
|
||||
cur = self.con.cursor()
|
||||
@@ -101,5 +101,5 @@ class Database:
|
||||
try:
|
||||
cur.execute("INSERT INTO activity_types VALUES(?, ?)", (activity_type.id, activity_type.title))
|
||||
self.con.commit()
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
16
track.py
16
track.py
@@ -11,6 +11,8 @@ logging.basicConfig(
|
||||
)
|
||||
|
||||
|
||||
from colorama import Fore # noqa: E402
|
||||
|
||||
from api import ClockifyAPI, RedmineAPI # noqa: E402
|
||||
from config import arg_parser, config, db # noqa: E402
|
||||
from utils import format_date, str_to_date, today_start, today_end # noqa: E402
|
||||
@@ -48,10 +50,15 @@ def main():
|
||||
red = RedmineAPI(config.REDMINE_TOKEN)
|
||||
|
||||
if args.init_db:
|
||||
logger.info("Обновление базы данных...")
|
||||
db.insert_tags(clock.get_tags())
|
||||
db.insert_vetro_projects(clock.get_vetro_projects())
|
||||
db.insert_activity_types(red.get_time_entry_activities())
|
||||
logger.info(Fore.YELLOW + "Обновление базы данных..." + Fore.RESET)
|
||||
try:
|
||||
db.insert_tags(clock.get_tags())
|
||||
db.insert_vetro_projects(clock.get_vetro_projects())
|
||||
db.insert_activity_types(red.get_time_entry_activities())
|
||||
except Exception as e:
|
||||
logger.error(Fore.RED + f"Ошибка при обновлении базы данных: {e}" + Fore.RESET)
|
||||
else:
|
||||
logger.info(Fore.GREEN + "База данных теперь актуальна." + Fore.RESET)
|
||||
|
||||
activities = clock.get_activities(
|
||||
**{
|
||||
@@ -71,6 +78,5 @@ def main():
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user