Middleware Factories#
The middleware factory differ from the middleware in their need and usage. A middleware is global, and, sometimes, middleware data may differ per incoming requests.
The middleware factory, build a middleware and inject in in the blacksmith client on instanciation.
The main use case is for forwardin header
Forward http headers#
The list of middleware are defined under the
setting keys middleware_factories
and forwarded_headers
,
as in the example above.
BLACKSMITH_CLIENT = {
"default": {
"sd": "router",
"router_sd_config": {},
"forwarded_headers": ["Authorization", "Accept-Language"],
"middleware_factories": [
"dj_blacksmith.AsyncForwardHeaderFactoryBuilder",
# Or the Sync version for synchronous client
# "dj_blacksmith.SyncForwardHeaderFactoryBuilder",
],
},
}
In this example, the forward_header
middleware factory
will forward the Authorization
header if present in the Django request,
to every blacksmith instanciated clients without writing a line of code.
Custom Middleware Factory#
To load a custom middleware, a class can be passed on the same line
BLACKSMITH_CLIENT = {
"default": {
"sd": "router",
"router_sd_config": {},
"my_middleware_configuration": {"I can configure from this"},
"middleware_factories": [
"path.to.my.MyMiddlewareBuilder",
],
},
}
In the example above, the class MyMiddlewareBuilder
overrides the class
pyramid_blacksmith.AbstractMiddlewareFactoryBuilder
.
The constructor of the class will received the whole default
dict content,
and can configure itself throw the keys in it such as my_middleware_configuration
.