Wsgiserver 0.2 May 2026

html = f""" <html> <body> <h1>Hello, World!</h1> <p>Method: environ['REQUEST_METHOD']</p> <p>Path: environ['PATH_INFO']</p> </body> </html> """ return [html.encode('utf-8')] if == ' main ': server = WSGIServer('0.0.0.0', 8000, hello_world_app) server.serve_forever() 6.2 Middleware Example ( examples/middleware_demo.py ) class LoggingMiddleware: """Log all requests""" def __init__(self, app): self.app = app def __call__(self, environ, start_response): print(f"environ['REQUEST_METHOD'] environ['PATH_INFO']") return self.app(environ, start_response) class TimingMiddleware: """Measure request duration"""

def __init__(self, app): self.app = app def __call__(self, environ, start_response): import time start = time.time() response = self.app(environ, start_response) duration = time.time() - start print(f"Request took: duration:.4fs") return response app = hello_world_app app = LoggingMiddleware(app) app = TimingMiddleware(app)

def __init__(self, host, port, application, workers=4): self.host = host self.port = port self.application = application self.workers = workers def run(self): for _ in range(self.workers): pid = os.fork() if pid == 0: # Child process server = WSGIServer(self.host, self.port, self.application) server.serve_forever() exit() # Parent waits os.wait() # /etc/systemd/system/wsgiserver.service [Unit] Description=WSGIServer 0.2 Application After=network.target [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/var/www/myapp Environment="PYTHONPATH=/var/www/myapp" ExecStart=/var/www/myapp/venv/bin/python /var/www/myapp/app.py Restart=always wsgiserver 0.2

response = requests.get('http://127.0.0.1:8888/') assert response.status_code == 200 assert response.text == 'Hello, World!'

server = WSGIServer('0.0.0.0', 8000, app) server.serve_forever() 7.1 Production Configuration # production_server.py import os from wsgiserver.server import WSGIServer Production settings HOST = os.getenv('WSGI_HOST', '0.0.0.0') PORT = int(os.getenv('WSGI_PORT', 8000)) WORKERS = int(os.getenv('WSGI_WORKERS', 4)) html = f""" &lt;html&gt; &lt;body&gt; &lt;h1&gt;Hello, World

def limit_request_size(environ): content_length = environ.get('CONTENT_LENGTH', 0) if content_length and int(content_length) > MAX_REQUEST_SIZE: raise ValueError("Request too large") # benchmark.py import time import threading import requests from concurrent.futures import ThreadPoolExecutor def benchmark_server(url='http://localhost:8000/', num_requests=1000): def make_request(): try: response = requests.get(url) return response.status_code == 200 except: return False

services: web: build: . ports: - "8000:8000" environment: - WSGI_HOST=0.0.0.0 - WSGI_PORT=8000 restart: unless-stopped 8.1 Logging Configuration import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('wsgiserver.log'), logging.StreamHandler() ] ) html = f""" &lt

class MultiProcessServer: """Fork multiple worker processes"""