def metadata_plus_exceptions(<EOL>self, output_format=None, feature_name_callback=None, **kwargs<EOL>):
callback = feature_name_callback or str<EOL>if output_format is None:<EOL><INDENT>output_format = (<EOL>'<STR_LIT>'<EOL>)<EOL><DEDENT>responses = {}<EOL>response_failures = {}<EOL>if self.features is not None:<EOL><INDENT>for feature in self.features:<EOL><INDENT>ds_kwargs = kwargs.copy()<EOL>ds_kwargs.update(<EOL>{<EOL>"<STR_LIT>": output_format,<EOL>"<STR_LIT>": callback(feature),<EOL>}<EOL>)<EOL>try:<EOL><INDENT>responses[feature] = SensorML(<EOL>self.server.describe_sensor(**ds_kwargs)<EOL>)<EOL><DEDENT>except (ServiceException, ExceptionReport) as e:<EOL><INDENT>response_failures[feature] = str(e)<EOL><DEDENT><DEDENT><DEDENT>return (responses, response_failures)<EOL>
Gets SensorML objects for all procedures in your filtered features.

Return two dictionaries for service responses keyed by 'feature':
    responses: values are SOS DescribeSensor response text
    response_failures: values are exception text content furnished from ServiceException, ExceptionReport

You should override the default output_format for servers that do not
respond properly.