Initial upload: API Mock CLI v0.1.0
Some checks failed
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled
CI / test (3.9) (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / build (push) Has been cancelled
Some checks failed
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled
CI / test (3.9) (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / type-check (push) Has been cancelled
CI / build (push) Has been cancelled
This commit is contained in:
133
src/cli/commands/init.py
Normal file
133
src/cli/commands/init.py
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
import click
|
||||||
|
from src.cli.config import ConfigLoader
|
||||||
|
from src.utils.file import FileUtils
|
||||||
|
|
||||||
|
|
||||||
|
@click.command("init")
|
||||||
|
@click.option(
|
||||||
|
"--name",
|
||||||
|
type=str,
|
||||||
|
default="my-mock-api",
|
||||||
|
help="Project name"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"--description",
|
||||||
|
type=str,
|
||||||
|
default=None,
|
||||||
|
help="Project description"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"--template",
|
||||||
|
type=click.Choice(["basic", "full", "minimal"]),
|
||||||
|
default="basic",
|
||||||
|
help="Project template"
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"--path",
|
||||||
|
type=click.Path(),
|
||||||
|
default=".",
|
||||||
|
help="Project directory"
|
||||||
|
)
|
||||||
|
def init_command(name: str, description: str, template: str, path: str):
|
||||||
|
project_path = Path(path) / name
|
||||||
|
project_path.mkdir(parents=True, exist_ok=True)
|
||||||
|
config_path = project_path / "config.yaml"
|
||||||
|
endpoints_path = project_path / "endpoints.yaml"
|
||||||
|
config_loader = ConfigLoader()
|
||||||
|
config_loader.create_default_config(str(config_path))
|
||||||
|
template_content = _get_template_content(template)
|
||||||
|
FileUtils.write_yaml(str(endpoints_path), template_content)
|
||||||
|
click.echo(f"Created mock API project: {name}")
|
||||||
|
click.echo(f" - Config: {config_path}")
|
||||||
|
click.echo(f" - Endpoints: {endpoints_path}")
|
||||||
|
click.echo("Run 'api-mock start' to start the mock server")
|
||||||
|
|
||||||
|
|
||||||
|
def _get_template_content(template: str) -> dict:
|
||||||
|
templates = {
|
||||||
|
"minimal": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"endpoints": []
|
||||||
|
},
|
||||||
|
"basic": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"endpoints": [
|
||||||
|
{
|
||||||
|
"path": "/api/hello",
|
||||||
|
"method": "GET",
|
||||||
|
"name": "Hello World",
|
||||||
|
"description": "Returns a greeting message",
|
||||||
|
"response": {
|
||||||
|
"status_code": 200,
|
||||||
|
"body": {
|
||||||
|
"message": "Hello, World!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"full": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"endpoints": [
|
||||||
|
{
|
||||||
|
"path": "/api/users/{id}",
|
||||||
|
"method": "GET",
|
||||||
|
"name": "Get User",
|
||||||
|
"description": "Retrieve a user by ID",
|
||||||
|
"response": {
|
||||||
|
"status_code": 200,
|
||||||
|
"body": {
|
||||||
|
"id": "{{request.path.id}}",
|
||||||
|
"name": "John Doe",
|
||||||
|
"email": "john@example.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "/api/users",
|
||||||
|
"method": "GET",
|
||||||
|
"name": "List Users",
|
||||||
|
"description": "List all users",
|
||||||
|
"response": {
|
||||||
|
"status_code": 200,
|
||||||
|
"body": {
|
||||||
|
"users": [
|
||||||
|
{"id": 1, "name": "John"},
|
||||||
|
{"id": 2, "name": "Jane"}
|
||||||
|
],
|
||||||
|
"total": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "/api/users",
|
||||||
|
"method": "POST",
|
||||||
|
"name": "Create User",
|
||||||
|
"description": "Create a new user",
|
||||||
|
"response": {
|
||||||
|
"status_code": 201,
|
||||||
|
"body": {
|
||||||
|
"message": "User created",
|
||||||
|
"id": "{{uuid}}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"validators": {
|
||||||
|
"body": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "email"],
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string", "minLength": 1},
|
||||||
|
"email": {"type": "string", "format": "email"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return templates.get(template, templates["basic"])
|
||||||
|
|
||||||
|
|
||||||
|
def _get_endpoints_content(template: str) -> dict:
|
||||||
|
return _get_template_content(template)
|
||||||
Reference in New Issue
Block a user