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

This commit is contained in:
2026-03-22 10:44:35 +00:00
parent 3111452ee7
commit de0bf688a2

View File

@@ -0,0 +1,64 @@
"""Code generators for different programming languages."""
from abc import ABC, abstractmethod
from typing import Dict, Callable
from curlconverter.parser import ParsedCurl
class Generator(ABC):
"""Base class for code generators."""
@property
@abstractmethod
def language(self) -> str:
"""Return the language name."""
pass
@abstractmethod
def generate(self, parsed: ParsedCurl) -> str:
"""Generate code from parsed curl data."""
pass
_generators: Dict[str, Callable[[ParsedCurl], str]] = {}
def register_generator(name: str):
"""Decorator to register a generator function."""
def decorator(func: Callable[[ParsedCurl], str]):
_generators[name.lower()] = func
return func
return decorator
def generate_code(parsed: ParsedCurl, language: str) -> str:
"""Generate code for the given language."""
lang = language.lower()
if lang not in _generators:
supported = ", ".join(sorted(_generators.keys()))
raise ValueError(f"Unsupported language: {language}. Supported: {supported}")
return _generators[lang](parsed)
def get_supported_languages() -> list:
"""Return list of supported language names."""
return sorted(_generators.keys())
def get_language_display_name(lang: str) -> str:
"""Return display name for a language."""
names = {
"python": "Python (requests)",
"javascript": "JavaScript (fetch)",
"go": "Go (net/http)",
"ruby": "Ruby (Net::HTTP)",
"php": "PHP (cURL)"
}
return names.get(lang.lower(), lang.capitalize())
from curlconverter.generators import python
from curlconverter.generators import javascript
from curlconverter.generators import go
from curlconverter.generators import ruby
from curlconverter.generators import php