Изменил формат Номера задачи
This commit is contained in:
@@ -11,7 +11,10 @@
|
||||
|Описание задачи (Description)|Комментарий|Уточнение у аналитика|
|
||||
|Теги (Tags)|<Задача> - <Название задачи>|28882 - Прочие активности по Ветро|
|
||||
|Трекать/Не трекать (Billable/Non-billable)|<Занесена в Redmine или нет>|Если выбрано, то активность будет перенесена
|
||||
|
||||
Тег обязательно должен содержать номер задачи (5 цифр) в начале.<br>
|
||||
28882 - Прочие активности<br>
|
||||
28882<br>
|
||||
28882 Прочие активности<br>
|
||||
|
||||
### Запуск:
|
||||
Клонируйте [репозиторий](https://git.sbps.ru/e.vlasov/redmine_tracker) и перейдите в него в командной строке:
|
||||
|
||||
@@ -8,7 +8,7 @@ from tqdm import tqdm
|
||||
from config import ClockifyConfig, config
|
||||
from classes import Activity, Tag, VetroProject
|
||||
from exceptions import InvalidToken
|
||||
from utils import time_to_hour
|
||||
from utils import parse_task_id, time_to_hour
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -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, _ = tag.title.split(" - ")
|
||||
task_id = parse_task_id(tag.title)
|
||||
except ValueError:
|
||||
logger.info(f'{activity["timeInterval"]["start"]}: {activity["description"]} - Неправильный формат тега {tag}')
|
||||
continue
|
||||
|
||||
@@ -18,7 +18,7 @@ class Activity:
|
||||
is_tracked: bool = False
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.date_start + timedelta(hours=3)}|{self.description} для задачи #{self.task_id}'
|
||||
return f'|{self.date_start + timedelta(hours=3)}| {self.description} для задачи #{self.task_id}'
|
||||
|
||||
|
||||
@dataclass
|
||||
|
||||
2
db/db.py
2
db/db.py
@@ -23,6 +23,7 @@ class Database:
|
||||
logger.error("Ошибка при инициализации БД:", e)
|
||||
self.con.rollback()
|
||||
|
||||
# Сделать изменение поля is_tracked при IntegrityError
|
||||
def insert_activities(self, activities: list[Activity]):
|
||||
cur = self.con.cursor()
|
||||
is_updated = True
|
||||
@@ -53,7 +54,6 @@ class Database:
|
||||
if not is_updated:
|
||||
logging.info("База данных устарела. Рекомендуем обновить с помощью флага -i [--init-db]")
|
||||
|
||||
# Доделать
|
||||
def insert_time_entries(self, activities: list[Activity]):
|
||||
cur = self.con.cursor()
|
||||
for act in activities:
|
||||
|
||||
4
utils.py
4
utils.py
@@ -1,4 +1,5 @@
|
||||
from datetime import datetime, timedelta
|
||||
import re
|
||||
from typing import Optional
|
||||
|
||||
from config import config
|
||||
@@ -28,3 +29,6 @@ def str_to_date(date: str) -> Optional[datetime]:
|
||||
def format_date(date: datetime) -> datetime:
|
||||
if date:
|
||||
return date.strftime(config.DATETIME_FORMAT)
|
||||
|
||||
def parse_task_id(tag: str) -> int:
|
||||
return int(re.search(r"^(?P<task_id>\d{5})", tag).group("task_id"))
|
||||
|
||||
Reference in New Issue
Block a user