109 lines
2.6 KiB
Python
109 lines
2.6 KiB
Python
"""
|
|
A simple example project demonstrating CodeChunk CLI usage.
|
|
|
|
This is a simple web server module with basic routing and request handling.
|
|
"""
|
|
|
|
|
|
import json
|
|
from typing import Dict, List, Optional
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class Request:
|
|
"""HTTP request representation."""
|
|
method: str
|
|
path: str
|
|
headers: Dict[str, str]
|
|
body: Optional[str] = None
|
|
|
|
|
|
@dataclass
|
|
class Response:
|
|
"""HTTP response representation."""
|
|
status_code: int
|
|
body: str
|
|
content_type: str = "text/plain"
|
|
|
|
|
|
class Router:
|
|
"""Simple HTTP router for handling routes."""
|
|
|
|
def __init__(self):
|
|
self.routes: Dict[str, callable] = {}
|
|
|
|
def add_route(self, path: str, handler: callable) -> None:
|
|
"""Add a new route to the router."""
|
|
self.routes[path] = handler
|
|
|
|
def get_handler(self, path: str) -> Optional[callable]:
|
|
"""Get handler for a given path."""
|
|
return self.routes.get(path)
|
|
|
|
|
|
class WebServer:
|
|
"""Simple web server implementation."""
|
|
|
|
def __init__(self, host: str = "localhost", port: int = 8080):
|
|
self.host = host
|
|
self.port = port
|
|
self.router = Router()
|
|
self.running = False
|
|
|
|
def start(self) -> None:
|
|
"""Start the web server."""
|
|
self.running = True
|
|
self._log(f"Server started on {self.host}:{self.port}")
|
|
|
|
def stop(self) -> None:
|
|
"""Stop the web server."""
|
|
self.running = False
|
|
self._log("Server stopped")
|
|
|
|
def handle_request(self, request: Request) -> Response:
|
|
"""Handle an incoming HTTP request."""
|
|
handler = self.router.get_handler(request.path)
|
|
|
|
if handler is None:
|
|
return Response(404, "Not Found")
|
|
|
|
try:
|
|
result = handler(request)
|
|
return Response(200, json.dumps(result))
|
|
except Exception as e:
|
|
return Response(500, str(e))
|
|
|
|
def _log(self, message: str) -> None:
|
|
"""Log a message."""
|
|
print(f"[Server] {message}")
|
|
|
|
|
|
def create_default_server() -> WebServer:
|
|
"""Create a web server with default configuration."""
|
|
server = WebServer(host="0.0.0.0", port=8080)
|
|
|
|
@server.router.add_route
|
|
def home(request: Request) -> Dict:
|
|
return {"status": "ok", "message": "Welcome!"}
|
|
|
|
@server.router.add_route
|
|
def health(request: Request) -> Dict:
|
|
return {"status": "healthy"}
|
|
|
|
return server
|
|
|
|
|
|
def main() -> None:
|
|
"""Main entry point for the web server."""
|
|
server = create_default_server()
|
|
|
|
print("Starting web server...")
|
|
server.start()
|
|
|
|
print("Server is running. Press Ctrl+C to stop.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|