import json from lib.kanboard_api import KanboardAPI class KanboardInteractive: """Позволяет выполнять произвольные JSON-RPC запросы через KanboardAPI.""" def __init__(self, api: KanboardAPI): self.api = api def parse_simple_syntax(self, line): """Парсит упрощенный синтаксис: метод param1=value1 param2=value2""" parts = line.strip().split() if not parts: return None, None method = parts[0] params = {} for part in parts[1:]: # Парсим key=value if '=' in part: key, value = part.split('=', 1) # Пробуем преобразовать значение в число, если возможно try: value = int(value) except ValueError: try: value = float(value) except ValueError: # Оставляем как строку pass params[key] = value else: # Если нет '=', считаем позиционным параметром с числовым ключом try: value = int(part) except ValueError: value = part params[str(len(params))] = value return method, params def convert_to_array_params(self, params): """Конвертирует словарь параметров в массив, если ключи числовые""" if all(key.isdigit() for key in params.keys()): # Сортируем по числовым ключам и возвращаем массив значений return [params[str(i)] for i in range(len(params))] return params def run(self): print("Введите метод Kanboard API и параметры.") print("Форматы:") print(' JSON: {"method": "getProjectById", "params": {"project_id": 1}}') print(' Простой: getProjectUsers project_id=32') print(' Позиционный: getProjectUserRole 32 8') print("Для выхода введите 'exit'") while True: line = input("Kanboard> ").strip() if line.lower() in ("exit", "quit"): break if not line: continue # Определяем формат ввода if line.startswith('{'): # JSON формат try: data = json.loads(line) method = data.get("method") params = data.get("params", {}) except json.JSONDecodeError as e: print(f"Ошибка JSON: {e}") continue else: # Упрощенный формат method, params = self.parse_simple_syntax(line) if not method: print("Не указан метод.") continue # Для методов, которые ожидают массив параметров, конвертируем params = self.convert_to_array_params(params) try: result = self.api.call(method, params) print(json.dumps(result, ensure_ascii=False, indent=2)) except Exception as e: print(f"Ошибка API: {e}")