John-Jiang's picture
init commit
5301c48
import typer
from pathlib import Path
from typing import Optional
from starfish.data_gen_template.core import data_gen_template
app = typer.Typer(help="Data Template CLI")
@app.command()
def list_templates(detail: bool = False):
"""List all available templates"""
templates = data_gen_template.list(is_detail=detail)
if detail:
for template in templates:
typer.echo(f"Template: {template['name']}")
typer.echo(f" Description: {template['description']}")
typer.echo(f" Author: {template['author']}")
typer.echo(f" Version: {template['starfish_version']}")
typer.echo(f" Dependencies: {', '.join(template.get('dependencies', []))}")
typer.echo()
else:
for template in templates:
typer.echo(template)
@app.command()
def get_template(name: str):
"""Get details about a specific template"""
try:
data_gen_template.list()
template = data_gen_template.get(name)
typer.echo(f"Template: {template.name}")
typer.echo(f"Description: {template.description}")
typer.echo(f"Author: {template.author}")
typer.echo(f"Version: {template.starfish_version}")
typer.echo(f"Dependencies: {', '.join(template.dependencies)}")
except Exception as e:
typer.echo(f"Error: {str(e)}", err=True)
# @app.command()
# def export_template(name: str, output_path: str):
# """Export a template to a specific path"""
# try:
# template = data_gen_template.get(name)
# exported_path = template.export(output_path)
# typer.echo(f"Template exported to: {exported_path}")
# except Exception as e:
# typer.echo(f"Error: {str(e)}", err=True)
@app.command()
def run_template(
name: str,
input_file: Optional[Path] = typer.Option(None, help="Path to JSON file with input data"),
output_file: Optional[Path] = typer.Option(None, help="Path to save output to"),
):
"""Run a template with the provided input data"""
try:
data_gen_template.list()
template = data_gen_template.get(name)
# Load input data
if input_file:
import json
with open(input_file) as f:
input_data = json.load(f)
else:
typer.echo("Please enter the input data (JSON format):")
input_data = json.loads(typer.prompt("Input data"))
# Run the template
import asyncio
result = asyncio.run(template.run(input_data=input_data))
# Handle output
if output_file:
with open(output_file, "w") as f:
json.dump(result, f, indent=2)
typer.echo(f"Output saved to {output_file}")
else:
typer.echo(json.dumps(result, indent=2))
except Exception as e:
typer.echo(f"Error: {str(e)}", err=True)
@app.command()
def print_schema(name: str):
"""Print the input schema for a template"""
try:
data_gen_template.list()
template = data_gen_template.get(name)
template.print_schema()
except Exception as e:
typer.echo(f"Error: {str(e)}", err=True)
@app.command()
def print_example(name: str):
"""Print an example input for a template"""
try:
data_gen_template.list()
template = data_gen_template.get(name)
template.print_example()
except Exception as e:
typer.echo(f"Error: {str(e)}", err=True)
def main():
app()
if __name__ == "__main__":
main()