57 lines
2.4 KiB
Python
57 lines
2.4 KiB
Python
# Copyright (c) 2025 Patrick Motsch
|
|
# All rights reserved.
|
|
|
|
import json
|
|
import logging
|
|
from typing import Any, Dict
|
|
|
|
from modules.datamodels.datamodelChat import ActionDocument, ActionResult
|
|
from ..helpers.pathparse import parse_task_id
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def update_task(self, parameters: Dict[str, Any]) -> ActionResult:
|
|
connection_reference = parameters.get("connectionReference")
|
|
task_id = (parameters.get("taskId") or "").strip()
|
|
path_hint = (parameters.get("path") or "").strip()
|
|
if not connection_reference:
|
|
return ActionResult.isFailure(error="connectionReference is required")
|
|
if not task_id and path_hint:
|
|
task_id = parse_task_id(path_hint) or ""
|
|
if not task_id:
|
|
return ActionResult.isFailure(error="taskId is required")
|
|
|
|
raw_update = parameters.get("taskUpdate") or parameters.get("taskJson") or parameters.get("body")
|
|
if raw_update is None or raw_update == "":
|
|
return ActionResult.isFailure(error="taskUpdate (JSON object) is required — add update fields or advanced JSON")
|
|
if isinstance(raw_update, str):
|
|
try:
|
|
body = json.loads(raw_update)
|
|
except json.JSONDecodeError as e:
|
|
return ActionResult.isFailure(error=f"taskUpdate must be valid JSON: {e}")
|
|
elif isinstance(raw_update, dict):
|
|
body = raw_update
|
|
else:
|
|
return ActionResult.isFailure(error="taskUpdate must be a JSON string or object")
|
|
|
|
if not isinstance(body, dict):
|
|
return ActionResult.isFailure(error="taskUpdate JSON must be an object")
|
|
if not body:
|
|
return ActionResult.isFailure(error="taskUpdate is empty — set at least one field to update")
|
|
|
|
conn = self.connection.get_clickup_connection(connection_reference)
|
|
if not conn:
|
|
return ActionResult.isFailure(error="No valid ClickUp connection")
|
|
|
|
data = await self.services.clickup.updateTask(task_id, body)
|
|
if isinstance(data, dict) and data.get("error"):
|
|
return ActionResult.isFailure(error=str(data.get("error")) + (data.get("body") or ""))
|
|
|
|
doc = ActionDocument(
|
|
documentName=f"clickup_task_{task_id}_updated.json",
|
|
documentData=json.dumps(data, ensure_ascii=False, indent=2),
|
|
mimeType="application/json",
|
|
validationMetadata={"actionType": "clickup.updateTask", "taskId": task_id},
|
|
)
|
|
return ActionResult.isSuccess(documents=[doc])
|