in elasticapm/conf/__init__.py [0:0]
def update(self, config_dict=None, env_dict=None, inline_dict=None, initial=False) -> None:
if config_dict is None:
config_dict = {}
if env_dict is None:
env_dict = os.environ
if inline_dict is None:
inline_dict = {}
for field, config_value in self.__class__.__dict__.items():
if not isinstance(config_value, _ConfigValue):
continue
new_value = self._NO_VALUE
# first check environment
if config_value.env_key and config_value.env_key in env_dict:
new_value = env_dict[config_value.env_key]
# check the inline config
elif field in inline_dict:
new_value = inline_dict[field]
# finally, check config dictionary
elif config_value.dict_key in config_dict:
new_value = config_dict[config_value.dict_key]
# only set if new_value changed. We'll fall back to the field default if not.
if new_value is not self._NO_VALUE:
try:
setattr(self, field, new_value)
except ConfigurationError as e:
self._errors[e.field_name] = str(e)
# handle initial callbacks
if (
initial
and config_value.callbacks_on_default
and getattr(self, field) is not None
and getattr(self, field) == config_value.default
):
self.callbacks_queue.append((config_value.dict_key, self._NO_VALUE, config_value.default))
# if a field has not been provided by any config source, we have to check separately if it is required
if config_value.required and getattr(self, field) is None:
self._errors[config_value.dict_key] = "Configuration error: value for {} is required.".format(
config_value.dict_key
)
self.call_pending_callbacks()