Initial upload with CI/CD workflow
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 16:20:28 +00:00
parent 065ce8f4c5
commit 6ffee37505

75
src/cli.py Normal file
View File

@@ -0,0 +1,75 @@
import click
from .core.parser import parse_openapi_spec
from .core.generator import generate_docs
from .core.models import APISpec, Endpoint, RequestExample, ResponseExample
from .utils.search import search_endpoints
@click.group()
def main():
"""LocalAPI Docs - Generate local API documentation from OpenAPI specs."""
pass
@main.command()
@click.argument('spec_file', type=click.Path(exists=True))
@click.option('--host', '-h', default='127.0.0.1', help='Host to bind to')
@click.option('--port', '-p', default=8080, help='Port to serve on')
@click.option('--no-browser', is_flag=True, help='Don\'t open browser automatically')
def serve(spec_file, host, port, no_browser):
"""Start an interactive HTML documentation server."""
from .templates.html_template import generate_html_server
generate_html_server(spec_file, host, port, not no_browser)
@main.command()
@click.argument('spec_file', type=click.Path(exists=True))
@click.option('--output', '-o', help='Output file or directory')
@click.option('--format', '-f', type=click.Choice(['html', 'markdown', 'json', 'all']), default='html', help='Output format')
@click.option('--open', is_flag=True, help='Open the generated file in browser')
def generate(spec_file, output, format, open):
"""Generate static documentation in various formats."""
generate_docs(spec_file, output, format, open)
@main.command()
@click.argument('spec_file', type=click.Path(exists=True))
@click.option('--json', is_flag=True, help='Output as JSON')
def validate(spec_file, json_output):
"""Validate an OpenAPI specification file."""
result = parse_openapi_spec(spec_file)
if result.get('valid'):
click.echo("✓ OpenAPI spec is valid")
if json_output:
import json
click.echo(json.dumps(result, indent=2))
else:
click.echo("✗ OpenAPI spec is invalid")
if json_output:
import json
click.echo(json.dumps(result, indent=2))
else:
for error in result.get('errors', []):
click.echo(f" - {error}")
@main.command()
@click.argument('spec_file', type=click.Path(exists=True))
@click.argument('query', nargs=-1)
@click.option('--limit', '-l', default=10, help='Maximum results')
@click.option('--json', is_flag=True, help='Output as JSON')
def search(spec_file, query, limit, json_output):
"""Search for endpoints in an OpenAPI specification."""
search_term = ' '.join(query)
results = search_endpoints(spec_file, search_term, limit)
if json_output:
import json
click.echo(json.dumps(results, indent=2))
else:
if not results:
click.echo("No results found.")
return
for result in results:
click.echo(f"\n{result['method']} {result['path']}")
click.echo(f" {result.get('summary', result.get('description', 'No description'))}")
click.echo(f" Tags: {', '.join(result.get('tags', []))}")