From 6ed284c506c2ac383b75c7a67ebae8fe496606c4 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 22 Mar 2026 10:44:34 +0000 Subject: [PATCH] Initial upload: curl-converter-cli with CI/CD workflow --- curlconverter/cli.py | 105 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 curlconverter/cli.py diff --git a/curlconverter/cli.py b/curlconverter/cli.py new file mode 100644 index 0000000..7bfb4c3 --- /dev/null +++ b/curlconverter/cli.py @@ -0,0 +1,105 @@ +"""CLI module for curl converter.""" + +import sys +import click +from curlconverter.parser import parse_curl +from curlconverter.generators import generate_code, get_supported_languages, get_language_display_name + + +@click.group() +def cli(): + """Convert curl commands to code in multiple programming languages.""" + pass + + +@cli.command() +@click.option("-c", "--curl", "curl_input", help="The curl command to convert") +@click.option("-l", "--language", default="python", help="Target programming language") +@click.option("-o", "--output", type=click.Path(), help="Output file path") +@click.option("-i", "--interactive", is_flag=True, help="Interactive mode - paste curl command") +def convert(curl_input, language, output, interactive): + """Convert a curl command to code.""" + if interactive: + click.echo("Paste your curl command (press Ctrl+D or Ctrl+Z when done):") + try: + curl_input = click.edit() + except Exception: + curl_input = click.prompt("", type=str) + + if not curl_input: + click.echo("Error: No curl command provided. Use --curl or --interactive", err=True) + sys.exit(1) + + try: + parsed = parse_curl(curl_input) + code = generate_code(parsed, language) + + if output: + with open(output, "w") as f: + f.write(code) + click.echo(f"Code written to {output}") + else: + click.echo(code) + + except ValueError as e: + click.echo(f"Error: {e}", err=True) + sys.exit(1) + + +@cli.command() +def languages(): + """List supported programming languages.""" + click.echo("Supported languages:") + for lang in get_supported_languages(): + display = get_language_display_name(lang) + click.echo(f" {lang:12} - {display}") + + +@cli.command() +@click.option("-c", "--curl", "curl_input", help="The curl command to analyze") +@click.option("-i", "--interactive", is_flag=True, help="Interactive mode") +def analyze(curl_input, interactive): + """Analyze and display parsed curl command details.""" + if interactive: + click.echo("Paste your curl command:") + curl_input = click.prompt("", type=str) + + if not curl_input: + click.echo("Error: No curl command provided", err=True) + sys.exit(1) + + try: + parsed = parse_curl(curl_input) + + click.echo("Parsed curl command:") + click.echo(f" URL: {parsed.url}") + click.echo(f" Method: {parsed.method}") + + if parsed.headers: + click.echo(" Headers:") + for k, v in parsed.headers.items(): + click.echo(f" {k}: {v}") + + if parsed.data: + click.echo(f" Data: {parsed.data}") + + if parsed.auth: + click.echo(f" Auth: {parsed.auth[0]}:****") + + if parsed.cookies: + click.echo(f" Cookies: {parsed.cookies}") + + if parsed.user_agent: + click.echo(f" User-Agent: {parsed.user_agent}") + + except ValueError as e: + click.echo(f"Error: {e}", err=True) + sys.exit(1) + + +def main(): + cli() + + +if __name__ == "__main__": + main()