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()