Initial commit: Penpot MCP Server - Complete AI-powered design workflow automation with MCP protocol, Penpot API integration, Claude AI support, CLI tools, and comprehensive documentation
This commit is contained in:
62
penpot_mcp/tools/cli/tree_cmd.py
Normal file
62
penpot_mcp/tools/cli/tree_cmd.py
Normal file
@@ -0,0 +1,62 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user