#!/usr/bin/env python3 """ Kanban kártya mozgatása a Gitea API-n keresztül a roo-helper konténerből. Ez a szkript a #2-es kártyát mozgatja "In Progress" majd "Done" oszlopba. """ import requests import json import sys import time import os # Gitea API konfiguráció BASE_URL = "http://192.168.100.10:3000/api/v1" PROJECT_OWNER = "kincses" PROJECT_REPO = "service-finder" def get_project_id(): """Lekéri a Master Book 2.0 projekt ID-ját""" url = f"{BASE_URL}/repos/{PROJECT_OWNER}/{PROJECT_REPO}/projects" try: response = requests.get(url, timeout=10) response.raise_for_status() projects = response.json() for project in projects: if project.get("name") == "Master Book 2.0": return project["id"] print("Hiba: 'Master Book 2.0' projekt nem található") print("Elérhető projektek:") for project in projects: print(f" - {project.get('name')} (ID: {project.get('id')})") return None except requests.exceptions.RequestException as e: print(f"Hiba a projekt lekérdezésekor: {e}") return None def get_project_columns(project_id): """Lekéri a projekt oszlopait""" url = f"{BASE_URL}/projects/{project_id}/columns" try: response = requests.get(url, timeout=10) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"Hiba az oszlopok lekérdezésekor: {e}") return [] def find_card_in_columns(project_id, card_number): """Megkeresi a #2-es kártyát az oszlopok között""" columns = get_project_columns(project_id) for column in columns: column_id = column["id"] column_name = column["name"] url = f"{BASE_URL}/projects/columns/{column_id}/cards" try: response = requests.get(url, timeout=10) response.raise_for_status() cards = response.json() for card in cards: card_title = card.get("title", "") if f"#{card_number}" in card_title or card_title.startswith(f"#{card_number}"): return { "card_id": card["id"], "column_id": column_id, "column_name": column_name, "card_title": card_title } except requests.exceptions.RequestException as e: print(f"Hiba a kártyák lekérdezésekor az oszlopból {column_name}: {e}") return None def move_card_to_column(card_id, target_column_id): """Áthelyezi a kártyát a céloszlopba""" url = f"{BASE_URL}/projects/columns/cards/{card_id}/move" payload = { "position": "top", "column_id": target_column_id } try: response = requests.post(url, json=payload, timeout=10) if response.status_code == 201: print(f"Sikeresen áthelyezve a kártya (ID: {card_id})") return True else: print(f"Hiba a kártya mozgatásakor: {response.status_code}") print(f"Válasz: {response.text}") return False except requests.exceptions.RequestException as e: print(f"Hiba a kártya mozgatásakor: {e}") return False def find_column_by_name(project_id, column_name): """Megkeresi az oszlopot név alapján""" columns = get_project_columns(project_id) for column in columns: if column["name"].lower() == column_name.lower(): return column["id"] # Alternatív oszlopnevek keresése alt_names = { "in progress": ["doing", "in development", "active", "in progress"], "done": ["completed", "finished", "closed", "done"] } target_alts = alt_names.get(column_name.lower(), []) for alt in target_alts: for column in columns: if column["name"].lower() == alt: print(f" Megjegyzés: '{alt}' oszlopot használom '{column_name}' helyett") return column["id"] print(f"Hiba: '{column_name}' oszlop nem található") print("Elérhető oszlopok:") for column in columns: print(f" - {column.get('name')} (ID: {column.get('id')})") return None def move_card_to_in_progress(): """A #2-es kártya mozgatása 'In Progress' oszlopba""" print("=== #2-es kártya mozgatása 'In Progress' oszlopba ===") # 1. Projekt ID lekérése print("1. Projekt ID keresése...") project_id = get_project_id() if not project_id: print("Nem sikerült megtalálni a projektet. Kilépés.") return False print(f" Projekt ID: {project_id}") # 2. #2-es kártya keresése print("\n2. #2-es kártya keresése...") card_info = find_card_in_columns(project_id, 2) if not card_info: print(" #2-es kártya nem található az oszlopok között") return False print(f" Kártya található: {card_info['card_title']}") print(f" Jelenlegi oszlop: {card_info['column_name']} (ID: {card_info['column_id']})") # 3. "In Progress" oszlop keresése print("\n3. 'In Progress' oszlop keresése...") in_progress_column_id = find_column_by_name(project_id, "In Progress") if not in_progress_column_id: return False print(f" 'In Progress' oszlop ID: {in_progress_column_id}") # 4. Ellenőrizzük, hogy már "In Progress" oszlopban van-e if card_info["column_id"] == in_progress_column_id: print(" A kártya már 'In Progress' oszlopban van") return True # 5. Kártya mozgatása "In Progress" oszlopba print("\n4. Kártya mozgatása 'In Progress' oszlopba...") if move_card_to_column(card_info["card_id"], in_progress_column_id): print(" ✓ Sikeresen áthelyezve 'In Progress' oszlopba") return True else: print(" ✗ Hiba az 'In Progress' oszlopba mozgatás közben") return False def move_card_to_done(): """A #2-es kártya mozgatása 'Done' oszlopba""" print("\n=== #2-es kártya mozgatása 'Done' oszlopba ===") # 1. Projekt ID lekérése print("1. Projekt ID keresése...") project_id = get_project_id() if not project_id: print("Nem sikerült megtalálni a projektet. Kilépés.") return False print(f" Projekt ID: {project_id}") # 2. #2-es kártya keresése print("\n2. #2-es kártya keresése...") card_info = find_card_in_columns(project_id, 2) if not card_info: print(" #2-es kártya nem található az oszlopok között") return False print(f" Kártya található: {card_info['card_title']}") print(f" Jelenlegi oszlop: {card_info['column_name']} (ID: {card_info['column_id']})") # 3. "Done" oszlop keresése print("\n3. 'Done' oszlop keresése...") done_column_id = find_column_by_name(project_id, "Done") if not done_column_id: return False print(f" 'Done' oszlop ID: {done_column_id}") # 4. Ellenőrizzük, hogy már "Done" oszlopban van-e if card_info["column_id"] == done_column_id: print(" A kártya már 'Done' oszlopban van") return True # 5. Kártya mozgatása "Done" oszlopba print("\n4. Kártya mozgatása 'Done' oszlopba...") if move_card_to_column(card_info["card_id"], done_column_id): print(" ✓ Sikeresen áthelyezve 'Done' oszlopba") return True else: print(" ✗ Hiba a 'Done' oszlopba mozgatás közben") return False def main(): """Fő függvény - argumentum alapján végrehajtja a mozgatást""" if len(sys.argv) > 1: action = sys.argv[1].lower() if action == "inprogress": return move_card_to_in_progress() elif action == "done": return move_card_to_done() elif action == "both": success1 = move_card_to_in_progress() if success1: time.sleep(2) return move_card_to_done() return False else: print(f"Ismeretlen művelet: {action}") print("Használat: python3 move_card_2.py [inprogress|done|both]") return False else: # Alapértelmezett: csak "In Progress" mozgatás print("Nincs argumentum megadva, alapértelmezett: 'In Progress' mozgatás") return move_card_to_in_progress() if __name__ == "__main__": success = main() sys.exit(0 if success else 1)