CoolFace
Modelpublic

sundaycoil/support-ticket-system

sourceHugging Faceupdated 10d agoView on Hugging Face
5likes
utils.py58 linesDownload Raw Back to root
1"""Support Ticket System — utils for comment payloads."""2from __future__ import annotations3 4import json5import logging6from datetime import datetime, timezone7from typing import Any, Dict, List, Optional8 9logger = logging.getLogger(__name__)10 11 12class SupportUtils:13    """Utils for Support Ticket System comment payloads."""14 15    _DATE_FIELDS = ("resolved_at")16 17    @classmethod18    def loads(cls, raw: str) -> Dict[str, Any]:19        """Deserialise a JSON comment payload."""20        data = json.loads(raw)21        return cls._coerce(data)22 23    @classmethod24    def dumps(cls, record: Dict[str, Any]) -> str:25        """Serialise a comment record to JSON."""26        return json.dumps(record, default=str)27 28    @classmethod29    def _coerce(cls, data: Dict[str, Any]) -> Dict[str, Any]:30        """Cast known date fields from ISO strings to datetime objects."""31        out: Dict[str, Any] = {}32        for k, v in data.items():33            if k in cls._DATE_FIELDS and isinstance(v, str):34                try:35                    out[k] = datetime.fromisoformat(v)36                except ValueError:37                    out[k] = v38            else:39                out[k] = v40        return out41 42 43def parse_comments(payload: str) -> List[Dict[str, Any]]:44    """Parse a JSON array of Comment payloads."""45    raw = json.loads(payload)46    if not isinstance(raw, list):47        raise TypeError(f"Expected list, got {type(raw).__name__}")48    return [SupportUtils._coerce(item) for item in raw]49 50 51def escalate_comment_to_str(52    record: Dict[str, Any], indent: Optional[int] = None53) -> str:54    """Convenience wrapper — serialise a Comment to a JSON string."""55    if indent is None:56        return SupportUtils.dumps(record)57    return json.dumps(record, indent=indent, default=str)58