Initial upload: cmdparse CLI tool with comprehensive documentation and CI/CD

This commit is contained in:
2026-02-04 02:08:46 +00:00
parent f36f8e7407
commit e749da61df

83
cmdparse/formatters.py Normal file
View File

@@ -0,0 +1,83 @@
"""Output formatting for JSON/CSV/YAML formats."""
import json
import csv
import io
from typing import List, Dict, Any
def format_json(data: List[Dict[str, Any]], pretty: bool = True) -> str:
"""Format parsed data as JSON."""
if pretty:
return json.dumps(data, indent=2, ensure_ascii=False)
return json.dumps(data, ensure_ascii=False)
def format_yaml(data: List[Dict[str, Any]]) -> str:
"""Format parsed data as YAML."""
import yaml
class SafeLineBreakDumper(yaml.SafeDumper):
def write_line_break(self, data=None):
super().write_line_break(data)
try:
return yaml.dump(data, Dumper=SafeLineBreakDumper, default_flow_style=False, allow_unicode=True)
except Exception:
return yaml.dump(data, default_flow_style=False, allow_unicode=True)
def format_csv(data: List[Dict[str, Any]]) -> str:
"""Format parsed data as CSV."""
if not data:
return ""
output = io.StringIO()
if data:
fieldnames = list(data[0].keys())
writer = csv.DictWriter(output, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
return output.getvalue()
def format_raw(data: List[Dict[str, Any]]) -> str:
"""Format parsed data as raw text (simple representation)."""
if not data:
return ""
lines = []
for i, row in enumerate(data):
if isinstance(row, dict):
for key, value in row.items():
lines.append(f"{key}: {value}")
else:
lines.append(str(row))
return '\n'.join(lines)
def format_data(data: List[Dict[str, Any]], output_format: str) -> str:
"""
Format parsed data into specified output format.
Args:
data: List of dictionaries to format
output_format: Format to use ('json', 'csv', 'yaml', 'raw')
Returns:
Formatted string output
"""
format_lower = output_format.lower() if output_format else 'json'
if format_lower == 'json':
return format_json(data)
elif format_lower == 'yaml':
return format_yaml(data)
elif format_lower == 'csv':
return format_csv(data)
elif format_lower == 'raw':
return format_raw(data)
else:
return format_json(data)