Wsgiserver 0.2 | Real
def get_metrics(self): return 'total_requests': self.request_count, 'error_requests': self.error_count, 'error_rate': self.error_count / self.request_count if self.request_count else 0 class SecurityMiddleware: """Add security headers and protections""" def __init__(self, app): self.app = app def __call__(self, environ, start_response): def secure_start_response(status, headers, exc_info=None): # Add security headers headers.extend([ ('X-Content-Type-Options', 'nosniff'), ('X-Frame-Options', 'DENY'), ('X-XSS-Protection', '1; mode=block'), ]) return start_response(status, headers, exc_info) return self.app(environ, secure_start_response) Request size limiting MAX_REQUEST_SIZE = 10 * 1024 * 1024 # 10MB
COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt wsgiserver 0.2
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() ] ) def get_metrics(self): return 'total_requests': self
async def handle_client(self, reader, writer): data = await reader.read(4096) # Process request writer.write(response) await writer.drain() writer.close() 6.1 Hello World ( examples/hello_world.py ) from wsgiserver.server import WSGIServer def hello_world_app(environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/html; charset=utf-8')] start_response(status, headers) app): self.app = app def __call__(self
# Give server time to start import time time.sleep(0.5)
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"""