def get_description(self, section, key):
        ''' Get the description of a config key. If it does not exist an
            Exception will be thrown.

            @param section: the section where the key is stored.
            @param key:     the key to get the description for.
            @return: A tuple with three elements (description, type, default)
        '''
        if section in self.config_description:
            if key in self.config_description[section]:
                desc, value_type, default = \
                        self.config_description[section][key]
                return (desc, value_type, default)
            else:
                if self.has_option(section, key):
                    # return an empty string since it is possible that a
                    # section is not initialized, this happens if a plugin
                    # that has some config values but is not initialized.
                    return "", str, ""
                else:
                    raise AppConfigValueException('Key ({0}) does not exist '
                            'in section: {1}'.format(key, section))
        else:
            if self.has_section(section):
                # return an empty string since it is possible that a section
                # is not initialized, this happens if a plugin that has some
                # config values but is not initialized.
                return "", str, ""
            else:
                raise AppConfigValueException('Section does not exist '
                        '[{0}]'.format(section))
Get the description of a config key. If it does not exist an
            Exception will be thrown.

            @param section: the section where the key is stored.
            @param key:     the key to get the description for.
            @return: A tuple with three elements (description, type, default)