Configuration¶
pyramid_blacksmith is configuring the clients using the settings
of the pyramid configurator, usually loaded via a paste.ini
file format.
The configuration here will use this format for clarity.
Include pyramid_blacksmith as a pyramid plugin¶
If you read the Pyramid documentation, there are many way to initialize its Configurator, lets go straigth to the point, by loging the plugin using the pyramid depencency injection.
def includeme(config):
# Load the blacksmith binding
config.include('pyramid_blacksmith')
The line above will read the configuration bellow from the config.registry.settings.
Loading resources¶
The first setting is used to fillout the blacksmith registry.
blacksmith.scan =
my.resources
maybe.another.resources
Note
The resources is a list of packages.
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.service_discovery = static
blacksmith.client.static_sd_config =
foo http://foo:8000/
bar/v1 http://bar:8000/v1
Example using a consul¶
blacksmith.client.service_discovery = consul
blacksmith.client.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_router.service_discovery = router
blacksmith.client_router.router_sd_config =
service_url_fmt http://router/{service}-{version}/{version}
unversioned_service_url_fmt http://router/{service}
Note
This strategy is perfect for testing too. You can use the following section in your test.ini file.
blacksmith.client_router.service_discovery = router
blacksmith.client_router.router_sd_config =
service_url_fmt http://{service}.{version}
unversioned_service_url_fmt http://{service}.NaN
Timeout¶
blacksmith.client.read_timeout = 5
blacksmith.client.connect_timeout = 2
Proxies¶
blacksmith.client.proxies =
http:// https://letmeout.example.net:8443/
https:// https://letmeout.example.net:8443/
Disable Certificate Verification¶
blacksmith.client.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.collection_parser = path.to.module:MyCollectionParser
Updating the error parser¶
While consuming API, the unboxed error is by default a HTTPError, to add a generic parser for a whole client factory, the path to the error_parser can be provided as a setting.
blacksmith.client.error_parser = path.to.module:MyErrorParser
Middlewares¶
The blacksmith middlewares can also be configured using the configurator, 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.