Configuration¶
When a django project is starting, it will configure blacksmith using
the settings module of the app, usually the DJANGO_SETTINGS_MODULE
environment variable.
Loading resources¶
The first setting is used to fillout the blacksmith registry.
BLACKSMITH_IMPORT = ["my.resources"]
Service Discovery¶
A service discovery method has to be configured, and blacksmith discover can be choosen following the example bellow.
Example using a static¶
BLACKSMITH_CLIENT = {
"default": {
"sd": "static",
"static_sd_config": {
"srv": "http://srv:80",
"api/v1": "http://api.v1:80",
},
},
}
Example using a consul¶
BLACKSMITH_CLIENT = {
"default": {
"sd": "consul",
"consul_sd_config": {
"addr": "http://consul:8500/v1",
"service_name_fmt": "{service}-{version}",
"service_url_fmt": "http://{address}:{port}/{version}",
"unversioned_service_name_fmt": "{service}",
"unversioned_service_url_fmt": "http://{address}:{port}",
},
},
}
Example using the router¶
BLACKSMITH_CLIENT = {
"default": {
"sd": "router",
"router_sd_config": {
"service_url_fmt": "http://router/{service}-{version}/{version}",
"unversioned_service_url_fmt": "http://router/{service}",
},
},
}
Timeout¶
BLACKSMITH_CLIENT = {
"default": {
"timeout": {"read": 10, "connect": 5},
},
}
Proxies¶
BLACKSMITH_CLIENT = {
"default": {
"proxies": {
"http://": "http://letmeout:8080/",
"https://": "https://letmeout:8443/",
},
},
}
Disable Certificate Verification¶
BLACKSMITH_CLIENT = {
"default": {
"verify_certificate": False,
},
}
Important
Updating the collection parser¶
While consuming API that does not do bared collection, a collection parser
has to be set in blacksmith to change the collection_get method that
deserialize and build back the pyrantic model.
BLACKSMITH_CLIENT = {
"default": {
"path.to.MyCollectionParser"
},
}
Middlewares¶
The blacksmith middlewares can also be configured using Django’s settings, this is going to be documented in the next chapters.
In blacksmith, there are global middlewares per ClientFactory, and
there are middlewares per Client. Global Middlewares are usefull for
metrics, tracing, caching, but they are not usesull for authentication in
a multi user application. Middleware Factories are usefull for that
purpose.
Transport¶
For testing purpose, the transport can be updated.
The transport is updated for all the clients, using the BLACKSMITH_TRANSPORT
setting. This setting has to be set in the DJANGO_SETTINGS_MODULE used
for tests, not for production.
BLACKSMITH_TRANSPORT = "path.to.FakeTransport"