Apply additional configuration from a flattened dictionary

        This will look for dictionary items that match flattened keys from base_config and apply their values on the
        current configuration object.

        This can be useful for applying configuration from environment variables and flat configuration file formats
        such as INI files.

def apply_flat(self, config, namespace_separator='_', prefix=''):
        # type: (Dict[str, Any], str, str) -> None
        """Apply additional configuration from a flattened dictionary

        This will look for dictionary items that match flattened keys from base_config and apply their values on the
        current configuration object.

        This can be useful for applying configuration from environment variables and flat configuration file formats
        such as INI files.
        """
        self._init_flat_pointers()
        for key_stack, (container, orig_key) in self._flat_pointers.items():
            flat_key = '{prefix}{joined_key}'.format(prefix=prefix, joined_key=namespace_separator.join(key_stack))
            if flat_key in config:
                container[orig_key] = config[flat_key]