Overview

Sanic 21.12, released on December 27, 2021, exposes a low-level API for request control and introduces a custom configuration system.

Main Features

Low-level API

The low-level API provides granular control over the HTTP request lifecycle, allowing interception and manipulation of connections before handler processing.

python
from sanic import Sanic, Request, json

app = Sanic('MyApp')

@app.on_request
async def before_request(request: Request):
    """Intercept every request."""
    request.ctx.start_time = __import__('time').time()

@app.on_response
async def after_request(request: Request, response):
    """Add headers to every response."""
    elapsed = __import__('time').time() - request.ctx.start_time
    response.headers['X-Process-Time'] = str(elapsed)

@app.get('/')
async def index(request: Request):
    return json({'message': 'Hello'})

Custom configuration

The configuration system now accepts custom classes with type validation and default values, replacing simple dictionaries.

python
from sanic import Sanic
from sanic.config import Config

class MyConfig(Config):
    API_KEY: str = ''
    MAX_REQUESTS: int = 100
    DEBUG_MODE: bool = False

app = Sanic('MyApp', config=MyConfig())
app.config.API_KEY = 'secret_key'
app.config.MAX_REQUESTS = 500

print(f'Max requests: {app.config.MAX_REQUESTS}')

Sources