'Appends the given key/value configuration mapping, behaving the same as if
we\'d loaded this from a configuration file.
:param str key: key for the configuration mapping
:param str,list value: value we\'re setting the mapping to
:param bool overwrite: replaces the previous value if **True**, otherwise
the values are appended'

def set(self, key, value, overwrite=True):

    with self._contents_lock:
        if isinstance(value, str):
            if ((not overwrite) and (key in self._contents)):
                self._contents[key].append(value)
            else:
                self._contents[key] = [value]
            for listener in self._listeners:
                listener(self, key)
        elif isinstance(value, (list, tuple)):
            if ((not overwrite) and (key in self._contents)):
                self._contents[key] += value
            else:
                self._contents[key] = value
            for listener in self._listeners:
                listener(self, key)
        else:
            raise ValueError(("Config.set()    only    accepts    str,    list,    or    tuple.    Provided    value    was    a    '%s'" % type(value)))
