| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- CLI output helpers for data_modules.
- All CLI tools should emit JSON payloads via these helpers.
- """
- from __future__ import annotations
- import json
- from dataclasses import dataclass
- from typing import Any, Dict, Optional
- @dataclass
- class ErrorPayload:
- code: str
- message: str
- suggestion: Optional[str] = None
- details: Optional[Dict[str, Any]] = None
- def build_success(data: Any = None, message: str = "ok", warnings: Optional[list] = None) -> Dict[str, Any]:
- payload: Dict[str, Any] = {
- "status": "success",
- "message": message,
- }
- if data is not None:
- payload["data"] = data
- if warnings:
- payload["warnings"] = warnings
- return payload
- def build_error(
- code: str,
- message: str,
- suggestion: Optional[str] = None,
- details: Optional[Dict[str, Any]] = None,
- ) -> Dict[str, Any]:
- error: Dict[str, Any] = {
- "code": code,
- "message": message,
- }
- if suggestion:
- error["suggestion"] = suggestion
- if details:
- error["details"] = details
- return {
- "status": "error",
- "error": error,
- }
- def print_json(payload: Dict[str, Any]) -> None:
- print(json.dumps(payload, ensure_ascii=False))
- def print_success(data: Any = None, message: str = "ok", warnings: Optional[list] = None) -> None:
- print_json(build_success(data=data, message=message, warnings=warnings))
- def print_error(
- code: str,
- message: str,
- suggestion: Optional[str] = None,
- details: Optional[Dict[str, Any]] = None,
- ) -> None:
- print_json(build_error(code=code, message=message, suggestion=suggestion, details=details))
|