HTTP authentication
Helpers are provided to manage the common schemes of HTTP authentications.
They take the HTTPAdapterSpec
instance as first argument. Internally, they register an
interceptor that will add the required Authorization
header.
Basic authentication
The BasicAuth
helper takes to optional arguments username
and password
:
>>> from sdkite.http import BasicAuth, HTTPAdapterSpec
>>> class RootClient(Client):
... _http = HTTPAdapterSpec(url="https://api.example.com/")
... _auth = BasicAuth(_http, "Alice", "W0nderl@nd")
...
... def whoami(self):
... return self._http.get('whoami').data_str
>>> RootClient().whoami()
'Welcome Alice!'
The values can also be set at runtime by modifying the corresponding attributes of the instance:
>>> class RootClient(Client):
... _http = HTTPAdapterSpec(url="https://api.example.com/")
... _auth = BasicAuth(_http)
...
... def __init__(self, username, password):
... super().__init__()
... self._auth.username = username
... self._auth.password = password
...
... def whoami(self):
... return self._http.get('whoami').data_str
>>> RootClient('Alice', 'W0nderl@nd').whoami()
'Welcome Alice!'
Removing authentication
If you have defined some authentication on a client, you can remove it on sub-clients by
using NoAuth
:
>>> from sdkite.http import NoAuth
>>> class ChildClient(Client):
... _http = HTTPAdapterSpec()
... _auth = NoAuth(_http)
...
... def example(self):
... return self._http.get('noauth').data_str
>>> class RootClient(Client):
... _http = HTTPAdapterSpec(url="https://api.example.com/")
... _auth = BasicAuth(_http, "user", "password")
... child: ChildClient
>>> RootClient().child.example() # will not add basic auth
'The /noauth endpoint has been called without auth'
Note
The name of the class attribute (_auth
in the example) must be the same in both clients, otherwise the authentication is not overridden.