Initial upload: curl-converter-cli with CI/CD workflow

This commit is contained in:
2026-03-22 10:44:34 +00:00
parent 4237043d1d
commit 6ed284c506

105
curlconverter/cli.py Normal file
View File

@@ -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()