gateway/modules/workflows/methods/methodJira/actions/importTicketsFromJson.py
2026-01-19 09:18:37 +01:00

83 lines
3.1 KiB
Python

# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
import logging
import json
from typing import Dict, Any
from modules.datamodels.datamodelChatbot import ActionResult, ActionDocument
logger = logging.getLogger(__name__)
async def importTicketsFromJson(self, parameters: Dict[str, Any]) -> ActionResult:
try:
connectionIdParam = parameters.get("connectionId")
if not connectionIdParam:
return ActionResult.isFailure(error="connectionId parameter is required")
ticketDataParam = parameters.get("ticketData")
if not ticketDataParam:
return ActionResult.isFailure(error="ticketData parameter is required")
# Get connection ID from document if it's a reference
connectionId = None
if isinstance(connectionIdParam, str):
connectionInfo = self.documentParsing.parseJsonFromDocument(connectionIdParam)
if connectionInfo and "connectionId" in connectionInfo:
connectionId = connectionInfo["connectionId"]
else:
connectionId = connectionIdParam
if not connectionId or connectionId not in self._connections:
return ActionResult.isFailure(error=f"Connection ID {connectionIdParam} not found. Ensure connectJira was called first.")
connection = self._connections[connectionId]
syncInterface = connection["interface"]
# Get ticket data from document
ticketDataJson = self.documentParsing.parseJsonFromDocument(ticketDataParam)
if ticketDataJson is None:
return ActionResult.isFailure(error="Could not parse ticket data from document reference")
# Ensure it's a list
if not isinstance(ticketDataJson, list):
return ActionResult.isFailure(error="ticketData must be a JSON array")
# Import tickets
await syncInterface.importListToTickets(ticketDataJson)
logger.info(f"Imported {len(ticketDataJson)} tickets to JIRA")
# Generate filename
workflowContext = self.services.chat.getWorkflowContext() if hasattr(self.services, 'chat') else None
filename = self._generateMeaningfulFileName(
"jira_import_result",
"json",
workflowContext,
"importTicketsFromJson"
)
importResult = {
"imported": len(ticketDataJson),
"connectionId": connectionId,
}
validationMetadata = self._createValidationMetadata(
"importTicketsFromJson",
connectionId=connectionId,
importedCount=len(ticketDataJson)
)
document = ActionDocument(
documentName=filename,
documentData=json.dumps(importResult, indent=2),
mimeType="application/json",
validationMetadata=validationMetadata
)
return ActionResult.isSuccess(documents=[document])
except Exception as e:
errorMsg = f"Error importing tickets to JIRA: {str(e)}"
logger.error(errorMsg)
return ActionResult.isFailure(error=errorMsg)