September 11, 2024
Убираем префикс [XXX-XX] для задач, импортированных в weeek из Jira
Ниже python3 скрипт, который помогает решить эту задачу.
Нужно указать свой токен в API_TOKEN, вот инструкция, где его взять https://weeek.net/ru/help/workspace/integracii/api
Если в задачах нет ничего остро конфиденциального, то выполнить код можно в облачном сервисе выполнения кода (на свой страх и риск), в этом случае стоит сразу после выполнения кода удалить использованный токен из weeek. Полностью безопасный способ – запустить скрипт непосредственно со своего компьютера.
import re import requests # Ваш Bearer токен для авторизации в API Weeek API_TOKEN = "" BASE_URL = "https://api.weeek.net/public/v1/tm" def get_headers(): """Возвращает заголовки с авторизацией.""" return { "Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } def get_projects(): """Получает список проектов.""" response = requests.get(f"{BASE_URL}/projects", headers=get_headers()) if response.status_code == 200: return response.json().get("projects", []) else: print(f"Ошибка получения проектов: {response.status_code}") return [] def get_tasks(project_id): """Получает список всех задач для указанного проекта с поддержкой пагинации.""" tasks = [] per_page = 100 # количество задач на страницу offset = 0 while True: params = { "projectId": project_id, "perPage": per_page, "offset": offset, "all": 1 } response = requests.get(f"{BASE_URL}/tasks", headers=get_headers(), params=params) print(response.url) # Логируем ответ для диагностики print(f"Ответ API для проекта {project_id}: {response.status_code}, {response.text}") if response.status_code == 200: data = response.json() tasks_batch = data.get("tasks", []) tasks.extend(tasks_batch) # если задач меньше, чем per_page, значит мы получили все задачи if len(tasks_batch) < per_page: break offset += per_page # увеличиваем смещение для следующей страницы else: print(f"Ошибка получения задач для проекта {project_id}: {response.status_code}") break return tasks def update_task(task_id, new_title): """Обновляет задачу с новым названием.""" url = f"{BASE_URL}/tasks/{task_id}" data = {"title": new_title} response = requests.put(url, headers=get_headers(), json=data) if response.status_code == 200: print(f"Задача {task_id} успешно обновлена") else: print(f"Ошибка обновления задачи {task_id}: {response.status_code}") def clean_task_title(title): """Удаляет подстроку в квадратных скобках из названия задачи.""" return re.sub(r"\[.*?\]\s*", "", title) def process_tasks_in_project(project_id): """Обрабатывает задачи в указанном проекте.""" print(f"Обрабатываю проект с ID: {project_id}") tasks = get_tasks(project_id) for task in tasks: old_title = task.get("title", "") new_title = clean_task_title(old_title) if old_title != new_title: update_task(task["id"], new_title) def main(): projects = get_projects() for project in projects: print(f"Обработка проекта: {project['title']} (ID: {project['id']})") process_tasks_in_project(project["id"]) if __name__ == "__main__": main()