Configuration¶
There are 3 ways to configure the SDK, taking precedence in the following order:
arguments passed to the
DataStewardshipWizardSDK
class when creating it’s instanceeach config value can be set as an environment variable prefixed with
DSW_SDK_
(e.g.DSW_SDK_EMAIL
orDSW_SDK_API_URL
is the same as passingapi_url
to the SDK constructor)config loaded from a YAML file (it’s path is passed as
conf_file
keyword argument to__init__()
method)
You can combine these to achieve whatever configuration you need. Consider following scenario: You are administrator of multiple DSW instances and you need to manage them in an effective way. You write a script using this SDK that leverage all of the above mentioned configuration possibilities:
Storing the general configuration that is common for all instances in the
dsw_conf.yml
file.Password for each admin user is saved in
DSW_SDK_PASSWORD
environment variable. That way you can include all of the source codes and even the configuration files in your version control system without compromising some secrets.Each instance can have it’s specific configuration passed when initializing the library (e.g. some values that are computed only at runtime).
Example of a file config
dsw_sdk: # This section is mandatory
enable_ssl: false
headers:
'User-Agent': 'DSW SDK'
default_timeout:
- 6
- 120
Taking from the example introduced in the quickstart section:
# Make sure that we have the password set in an env variable
assert os.getenv('DSW_SDK_PASSWORD')
dsw_sdk = DataStewardshipWizardSDK(
api_url='http://localhost:3000',
email='albert.einstein@example.com',
file_conf='dsw_conf.yml',
)
Dependency injection¶
You can also pass pre-configured instances of HTTP client, session used with HTTP client and logger to the SDK constructor in order to achieve even more customizations.
from dsw_sdk.http_client.interface import HttpClient, HttpResponse
from somewhere.inside.your.code import already_setup_logger
class CustomHttpClient(HttpClient):
# Implementing all abstract methods of
# the `HttpClient` interface
def get(self, path: str, **kwargs) -> HttpResponse:
...
# Initializing the HTTP client in your own way
http_client = CustomHttpClient(...)
dsw_sdk = DataStewardshipWizardSDK(
http_client=http_client,
logger=already_setup_logger,
)
In the case of HTTP client, you can also pass only the class of your custom client. It will then get instantiated with all the other config values as it normally would. This is useful if you don’t want to perform the initialization yourself or in cases, when you want to override just one aspect of the default HTTP client shipped with this library.
from dsw_sdk.http_client.requests_impl.http_client import SessionHttpClient
class CustomHttpClient(SessionHttpClient):
def after_request(self, response):
... # Some custom logic here
dsw_sdk = DataStewardshipWizardSDK(
api_url='http://localhost:3000',
email='albert.einstein@example.com',
http_client=CustomHttpClient,
)
For a complete list of all possible configuration values, see configuration values.