'Get the value contained  by the named parameter.
This method applies interpolation/escaping of the named parameter and
retrieves the interpolated value.
Args:
name: The name of the parameter to retrieve. This should be in the format
of "Section.name"
default: If retrieving the value results in an error, return this default.
context: A list of context strings to resolve the configuration. This is a
set of roles the caller is current executing with. For example (client,
windows). If not specified we take the context from the current thread\'s
TLS stack.
Returns:
The value of the parameter.
Raises:
ConfigFormatError: if verify=True and the config doesn\'t validate.
RuntimeError: if a value is retrieved before the config is initialized.
ValueError: if a bad context is passed.'

def Get(self, name, default=utils.NotAValue, context=None):

    if (not self.initialized):
        if (name not in self.constants):
            raise RuntimeError(("Error    while    retrieving    %s:    Configuration    hasn't    been    initialized    yet." % name))
    if context:
        if (isinstance(context, basestring) or (not isinstance(context, collections.Iterable))):
            raise ValueError(('context    should    be    a    list,    got    %s' % str(context)))
    calc_context = context
    cache_key = (name, tuple((context or ())))
    if ((default is utils.NotAValue) and (cache_key in self.cache)):
        return self.cache[cache_key]
    if (context is None):
        calc_context = self.context
    type_info_obj = self.FindTypeInfo(name)
    (_, return_value) = self._GetValue(name, context=calc_context, default=default)
    if (return_value is default):
        return default
    try:
        return_value = self.InterpolateValue(return_value, default_section=name.split('.')[0], type_info_obj=type_info_obj, context=calc_context)
    except (lexer.ParseError, ValueError) as e:
        if (default is not utils.NotAValue):
            return default
        raise ConfigFormatError(('While    parsing    %s:    %s' % (name, e)))
    try:
        new_value = type_info_obj.Validate(return_value)
        if (new_value is not None):
            return_value = new_value
    except ValueError:
        if (default is not utils.NotAValue):
            return default
        raise
    if (default is utils.NotAValue):
        self.cache[cache_key] = return_value
    return return_value
