init
This commit is contained in:
60
zig_fetch_py/main.py
Normal file
60
zig_fetch_py/main.py
Normal file
@ -0,0 +1,60 @@
|
||||
"""
|
||||
Command-line interface for the ZON parser.
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import click
|
||||
from loguru import logger
|
||||
|
||||
from zig_fetch_py.parser import parse_zon_file
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("file", type=click.Path(exists=True, readable=True))
|
||||
@click.option(
|
||||
"-o",
|
||||
"--output",
|
||||
type=click.Path(writable=True),
|
||||
help="Output JSON file path (default: stdout)",
|
||||
)
|
||||
@click.option("-p", "--pretty", is_flag=True, help="Pretty print JSON output")
|
||||
@click.option("-v", "--verbose", is_flag=True, help="Enable verbose logging")
|
||||
def main(file, output, pretty, verbose):
|
||||
"""Parse ZON files and convert to JSON.
|
||||
|
||||
This tool parses Zig Object Notation (ZON) files and converts them to JSON format.
|
||||
"""
|
||||
# Configure logging
|
||||
log_level = "DEBUG" if verbose else "INFO"
|
||||
logger.remove() # Remove default handler
|
||||
logger.add(sys.stderr, level=log_level)
|
||||
|
||||
logger.info(f"Processing file: {file}")
|
||||
|
||||
try:
|
||||
result = parse_zon_file(file)
|
||||
|
||||
indent = 4 if pretty else None
|
||||
json_str = json.dumps(result, indent=indent)
|
||||
|
||||
if output:
|
||||
logger.info(f"Writing output to: {output}")
|
||||
with open(output, "w") as f:
|
||||
f.write(json_str)
|
||||
else:
|
||||
logger.debug("Writing output to stdout")
|
||||
click.echo(json_str)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
# This is only executed when the module is run directly
|
||||
if __name__ == "__main__":
|
||||
# When imported as a module, click will handle the function call
|
||||
# When run directly, we need to call it explicitly
|
||||
main()
|
||||
Reference in New Issue
Block a user