From 7280d435e190b3df031a21e3dbed14666d8c1613 Mon Sep 17 00:00:00 2001 From: Eduard Date: Mon, 26 May 2025 12:30:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=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=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D0=BE=D0=B9=20=D1=82?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D0=B0=D0=BB=D0=B0=D1=81=D1=8C=20=D0=BD=D0=B5?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D1=87=D0=B5=D0=BD=D0=BD=D0=B0?= =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0.=20=D0=98=D1=81?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=82=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.MD | 23 +++++++++++------------ api/redmine.py | 49 +++++++++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/README.MD b/README.MD index ff64844..e5b1826 100644 --- a/README.MD +++ b/README.MD @@ -10,8 +10,8 @@ |--------|-------|------| |Описание задачи (Description)|Комментарий|Уточнение у аналитика| |Теги (Tags)|<Задача> - <Название задачи>|28882 - Прочие активности по Ветро| -|Трекать/Не трекать (Billable/Non-billable)|<Занесена в Redmine или нет>|Если выбрано, то активность будет перенесена -
+|Трекать/Не трекать (Billable/Non-billable)|<Занесена в Redmine или нет>|Если выбрано, то активность будет перенесена| + Тег обязательно должен содержать номер задачи (5 цифр) в начале.
28882 - Прочие активности
28882
@@ -50,7 +50,7 @@ pip install -r requirements.txt ``` Создайте файл .env и добавьте в него переменные: ```bash -touch .env +nano .env ``` ```env *REDMINE_TOKEN= @@ -78,14 +78,13 @@ python track.py ``` ## Аргументы запуска -| Аргумент | Описание | Пример использования | -|-------------------|--------------------------------------------------------------|--------------------------------------| -| `-h [--help]` | Показать справку | `python track.py --help` | -| `-s [--start]` | Дата начала парсинга активностей в формате гггг-мм-дд | `python track.py --start 2025-05-19` | -| `-e [--end]` | Дата окончания парсинга активностей в формате гггг-мм-дд | `python track.py -e 2025-05-19` | -| `-p [--page-size]`| Количество задач для вывода. Выведет последние n записей | `python track.py --page-size 15` | -| `-d [--debug]` | Режим отладки. Не загружает трудочасы в Redmine | `python track.py -d` | -| `-i [--init-db]` | Режим инициализации бд. | `python track.py -init-db` | -| | Подгружает с серверов теги, виды деятельности и проекты Ветро| | +| Аргумент | Описание | Пример использования | +|-------------------|----------------------------------------------------------------------------------------------|--------------------------------------| +| `-h [--help]` | Показать справку | `python track.py --help` | +| `-s [--start]` | Дата начала парсинга активностей в формате гггг-мм-дд | `python track.py --start 2025-05-19` | +| `-e [--end]` | Дата окончания парсинга активностей в формате гггг-мм-дд | `python track.py -e 2025-05-19` | +| `-p [--page-size]`| Количество задач для вывода. Выведет последние n записей | `python track.py --page-size 15` | +| `-d [--debug]` | Режим отладки. Не загружает трудочасы в Redmine | `python track.py -d` | +| `-i [--init-db]` | Режим инициализации бд.
Подгружает с серверов теги, виды деятельности и Проекты (ДО) Ветро| `python track.py -init-db` | [Власов Эдуард](https://github.com/QuickLike) \ No newline at end of file diff --git a/api/redmine.py b/api/redmine.py index d1a4c13..c5b9c57 100644 --- a/api/redmine.py +++ b/api/redmine.py @@ -27,31 +27,32 @@ class RedmineAPI(RedmineConfig): return tracked = [] for activity in tqdm(activities, desc="Занесение трудочасов"): - if not activity.is_tracked: - try: - resp = requests.post( - self.base_url + self.time_entries_url, - headers={"X-Redmine-Api-Key": self.token}, - json={ - "time_entry": { - "issue_id": activity.task_id, - "hours": activity.time_spent, - "activity_id": ActivityTypes.DEVELOPMENT, - "comments": activity.description, - "spent_on": activity.date_start.strftime(self.datetime_format) - } + if not(not activity.is_tracked and activity.date_end): + continue + try: + resp = requests.post( + self.base_url + self.time_entries_url, + headers={"X-Redmine-Api-Key": self.token}, + json={ + "time_entry": { + "issue_id": activity.task_id, + "hours": activity.time_spent, + "activity_id": ActivityTypes.DEVELOPMENT, + "comments": activity.description, + "spent_on": activity.date_start.strftime(self.datetime_format) } - ) - if resp.ok: - activity.is_tracked = True - tracked.append(activity) - logger.debug(activity) - else: - logger.error(Fore.RED + f"{activity} Не была затрекана" + Fore.RED) - logger.error(f"{resp.json()['errors']} {resp.status_code}") - except Exception as e: - logger.error(e) - continue + } + ) + if resp.ok: + activity.is_tracked = True + tracked.append(activity) + logger.debug(activity) + else: + logger.error(Fore.RED + f"{activity} Не была затрекана" + Fore.RED) + logger.error(f"{resp.json()['errors']} {resp.status_code}") + except Exception as e: + logger.error(e) + continue if len(activities) == len(tracked): logger.info("Все задачи были успешно занесены в Redmine") else: