from shell to rest, webrtc, grpc API, from bash script to service using local LLM mistral:7b and cookiecutter templates
Project description
shapi
from shell to api
shapi - Shell to API Service Generator
Transform your bash scripts into production-ready APIs with REST, WebRTC, and gRPC support.
shapi - Shell to API Service Generator
Transform your bash scripts into production-ready APIs with REST, WebRTC, and gRPC support.
Features
- 🚀 Instant API Generation: Convert any shell script into a REST API with a single command
- 🐳 Docker Ready: Automatic Dockerfile and docker-compose.yml generation
- 🧪 Testing Included: Generated test suites and Ansible playbooks
- 🔄 Multiple Protocols: Support for REST, WebRTC, and gRPC
- 📊 Health Monitoring: Built-in health checks and status endpoints
- 🔧 Production Ready: Makefile, monitoring, and deployment configurations
Quick Start
Installation
pip install shapi
Generate API Service
# Generate complete service structure
shapi generate /path/to/your/script.sh --name my-service
# Or serve directly
shapi serve /path/to/your/script.sh --name my-service --port 8000
Generated Structure
my-service/
├── main.py # FastAPI service
├── Dockerfile # Container configuration
├── docker-compose.yml # Multi-service setup
├── Makefile # Build and deployment commands
├── requirements.txt # Python dependencies
├── test_service.py # Test suite
├── ansible/
│ └── test.yml # Infrastructure tests
└── script.sh # Your original script
Usage Examples
Basic Script Conversion
#!/bin/bash
# hello.sh
echo "Hello, $1!"
Generate the service:
shapi generate hello.sh --name greeting-service
cd greeting-service
python main.py
Access your API:
- Health Check:
GET http://localhost:8000/health - Documentation:
GET http://localhost:8000/docs - Execute Script:
POST http://localhost:8000/run
API Endpoints
Every generated service includes:
GET /health- Service health checkGET /info- Script informationPOST /run- Execute script (sync/async)GET /status/{task_id}- Check async task statusGET /docs- Interactive API documentation
Example API Request
POST /run
{
"parameters": {
"name": "World",
"verbose": true
},
"async_execution": false
}
Docker Deployment
# Build and run with Docker
make docker-build
make docker-run
# Or use docker-compose
docker-compose up -d
Testing
# Run tests
make test
# Or directly
python -m pytest test_service.py -v
Configuration
Create a config.yaml file for advanced configuration:
service:
name: "my-advanced-service"
description: "Advanced shell script API"
version: "1.0.0"
protocols:
rest: true
grpc: true
webrtc: true
security:
auth_required: false
cors_enabled: true
monitoring:
health_check_interval: 30
metrics_enabled: true
CLI Commands
# Generate service structure
shapi generate script.sh --name service-name --output ./output
# Serve script directly
shapi serve script.sh --host 0.0.0.0 --port 8000
# Test generated service
shapi test ./generated/service-name
# Build Docker image
shapi build ./generated/service-name
Advanced Features
Async Execution
# Enable async execution for long-running scripts
response = requests.post("/run", json={
"parameters": {"input": "data"},
"async_execution": True
})
task_id = response.json()["task_id"]
# Check status
status = requests.get(f"/status/{task_id}")
Multiple Protocols
The generated service supports multiple communication protocols:
- REST API: Standard HTTP endpoints
- WebRTC: Real-time data streaming
- gRPC: High-performance RPC calls
Production Deployment
# Using Makefile
make deploy
# Manual deployment
docker-compose up -d
Requirements
- Python 3.8+
- Docker (optional, for containerization)
- Bash (for shell script execution)
Contributing
Contributions are welcome! Please see our Contributing Guidelines.
License
Apache License 2.0 - see LICENSE file for details.
Support
shapi - From shell to service in seconds! 🚀
Contributing Guidelines
CONTRIBUTING.md
"""
Contributing to shapi
We welcome contributions to shapi! This document provides guidelines for contributing.
Development Setup
- Clone the repository:
git clone https://github.com/wronai/shapi.git
cd shapi
- Create virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install in development mode:
pip install -e .[dev]
Running Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=shapi
# Run specific test file
pytest tests/test_core.py -v
Code Style
We use black for code formatting and flake8 for linting:
# Format code
black shapi/
# Check linting
flake8 shapi/
Submitting Changes
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
Reporting Issues
Please use the GitHub issue tracker to report bugs or request features. """
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shapi-0.2.4.tar.gz.
File metadata
- Download URL: shapi-0.2.4.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.14.9-300.fc42.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e42af27c3c7f13c11fbc52fe746d04d036bbd0d44b221bd2fff0715c9be1bd3b
|
|
| MD5 |
cd156f339b9f973a9ea84580825a140f
|
|
| BLAKE2b-256 |
2756739d5d29ab58f165d3d3e470a4e2c55872784a04a05cd84b253e686c0485
|
File details
Details for the file shapi-0.2.4-py3-none-any.whl.
File metadata
- Download URL: shapi-0.2.4-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.11.12 Linux/6.14.9-300.fc42.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e310ab5f30ddf6225de6439bc197a07b355f3d73218520aad61945e51539c85
|
|
| MD5 |
1196d72e2763cb80cf98ecacba708dfe
|
|
| BLAKE2b-256 |
0a9ef965c98be194feadd31e73df17f9606eec91652d0f46dcc5adb539ac4d5a
|