# Copyright (c) 2025 Patrick Motsch # All rights reserved. """ Document Parsing helper for JIRA operations. Handles parsing of document references and JSON content. """ import logging import json from typing import Any, Optional, Dict from modules.datamodels.datamodelDocref import DocumentReferenceList logger = logging.getLogger(__name__) class DocumentParsingHelper: """Helper for document parsing operations""" def __init__(self, methodInstance): """ Initialize document parsing helper. Args: methodInstance: Instance of MethodJira (for access to services) """ self.method = methodInstance self.services = methodInstance.services def getDocumentData(self, documentReference: str) -> Any: """ Get document data from a document reference. Args: documentReference: Document reference string Returns: Document data (bytes, str, or None) """ try: docList = DocumentReferenceList.from_string_list([documentReference]) chatDocuments = self.services.chat.getChatDocumentsFromDocumentList(docList) if not chatDocuments: return None doc = chatDocuments[0] fileId = getattr(doc, 'fileId', None) if not fileId: return None return self.services.chat.getFileData(fileId) except Exception as e: logger.error(f"Error getting document data: {str(e)}") return None def parseJsonFromDocument(self, documentReference: str) -> Optional[Dict[str, Any]]: """ Parse JSON content from a document reference. Args: documentReference: Document reference string Returns: Parsed JSON dictionary or None """ try: fileData = self.getDocumentData(documentReference) if not fileData: return None # Handle bytes if isinstance(fileData, bytes): jsonStr = fileData.decode('utf-8') else: jsonStr = str(fileData) # Parse JSON return json.loads(jsonStr) except Exception as e: logger.error(f"Error parsing JSON from document: {str(e)}") return None