63 lines
1.6 KiB
Python
63 lines
1.6 KiB
Python
"""Command-line interface for the Penpot tree visualization tool."""
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
from typing import Any, Dict
|
|
|
|
from penpot_mcp.tools.penpot_tree import build_tree, export_tree_to_dot, print_tree
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
"""Parse command line arguments."""
|
|
parser = argparse.ArgumentParser(description='Generate a tree from a Penpot JSON file')
|
|
parser.add_argument('input_file', help='Path to the Penpot JSON file')
|
|
parser.add_argument('--filter', '-f', help='Filter nodes by regex pattern')
|
|
parser.add_argument('--export', '-e', help='Export tree to a file (supports PNG, SVG, etc.)')
|
|
return parser.parse_args()
|
|
|
|
|
|
def load_penpot_file(file_path: str) -> Dict[str, Any]:
|
|
"""
|
|
Load a Penpot JSON file.
|
|
|
|
Args:
|
|
file_path: Path to the JSON file
|
|
|
|
Returns:
|
|
The loaded JSON data
|
|
|
|
Raises:
|
|
FileNotFoundError: If the file doesn't exist
|
|
json.JSONDecodeError: If the file isn't valid JSON
|
|
"""
|
|
try:
|
|
with open(file_path, 'r') as f:
|
|
return json.load(f)
|
|
except FileNotFoundError:
|
|
sys.exit(f"Error: File not found: {file_path}")
|
|
except json.JSONDecodeError:
|
|
sys.exit(f"Error: Invalid JSON file: {file_path}")
|
|
|
|
|
|
def main() -> None:
|
|
"""Main entry point for the command."""
|
|
args = parse_args()
|
|
|
|
# Load the Penpot file
|
|
data = load_penpot_file(args.input_file)
|
|
|
|
# Build the tree
|
|
root = build_tree(data)
|
|
|
|
# Export the tree if requested
|
|
if args.export:
|
|
export_tree_to_dot(root, args.export, args.filter)
|
|
|
|
# Print the tree
|
|
print_tree(root, args.filter)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|