def get_error_message(exception, context=None, suggestion=None): """Convert exception into an ErrorMessage containing a stack trace. :param exception: Exception object. :type exception: Exception :param context: Optional context message. :type context: str :param suggestion: Optional suggestion. :type suggestion: str .. see also:: https://github.com/AIFDR/inasafe/issues/577 :returns: An error message with stack trace info suitable for display. :rtype: ErrorMessage """ myTraceback = ''.join(traceback.format_tb(sys.exc_info()[2])) myProblem = m.Message(m.Text(exception.__class__.__name__)) if str(exception) is None or str(exception) == '': myProblem.append = m.Text(tr('No details provided')) else: myProblem.append = m.Text(str(exception)) mySuggestion = suggestion if mySuggestion is None and hasattr(exception, 'suggestion'): mySuggestion = exception.message myErrorMessage = ErrorMessage( myProblem, detail=context, suggestion=mySuggestion, traceback=myTraceback ) myArgs = exception.args for myArg in myArgs: myErrorMessage.details.append(myArg) return myErrorMessage
def impact_attribution(keywords, inasafe_flag=False): """Make a little table for attribution of data sources used in impact. :param keywords: A keywords dict for an impact layer. :type keywords: dict :param inasafe_flag: bool - whether to show a little InaSAFE promotional text in the attribution output. Defaults to False. :returns: An html snippet containing attribution information for the impact layer. If no keywords are present or no appropriate keywords are present, None is returned. :rtype: str """ if keywords is None: return None myJoinWords = ' - %s ' % tr('sourced from') myHazardDetails = tr('Hazard details') myHazardTitleKeyword = 'hazard_title' myHazardSourceKeyword = 'hazard_source' myExposureDetails = tr('Exposure details') myExposureTitleKeyword = 'exposure_title' myExposureSourceKeyword = 'exposure_source' if myHazardTitleKeyword in keywords: # We use safe translation infrastructure for this one (rather than Qt) myHazardTitle = safeTr(keywords[myHazardTitleKeyword]) else: myHazardTitle = tr('Hazard layer') if myHazardSourceKeyword in keywords: # We use safe translation infrastructure for this one (rather than Qt) myHazardSource = safeTr(keywords[myHazardSourceKeyword]) else: myHazardSource = tr('an unknown source') if myExposureTitleKeyword in keywords: myExposureTitle = keywords[myExposureTitleKeyword] else: myExposureTitle = tr('Exposure layer') if myExposureSourceKeyword in keywords: myExposureSource = keywords[myExposureSourceKeyword] else: myExposureSource = tr('an unknown source') myReport = m.Message() myReport.add(m.Heading(myHazardDetails, **INFO_STYLE)) myReport.add(m.Paragraph(myHazardTitle, myJoinWords, myHazardSource)) myReport.add(m.Heading(myExposureDetails, **INFO_STYLE)) myReport.add(m.Paragraph(myExposureTitle, myJoinWords, myExposureSource)) if inasafe_flag: myReport.add(m.Heading(tr('Software notes'), **INFO_STYLE)) myInaSAFEPhrase = tr( 'This report was created using InaSAFE version %1. Visit ' 'http://inasafe.org to get your free copy of this software!' 'InaSAFE has been jointly developed by BNPB, AusAid/AIFDRR & the ' 'World Bank').arg(get_version()) myReport.add(m.Paragraph(m.Text(myInaSAFEPhrase))) return myReport
def impact_attribution(keywords, inasafe_flag=False): """Make a little table for attribution of data sources used in impact. :param keywords: A keywords dict for an impact layer. :type keywords: dict :param inasafe_flag: bool - whether to show a little InaSAFE promotional text in the attribution output. Defaults to False. :returns: An html snippet containing attribution information for the impact layer. If no keywords are present or no appropriate keywords are present, None is returned. :rtype: safe.messaging.Message """ if keywords is None: return None join_words = ' - %s ' % tr('sourced from') hazard_details = tr('Hazard details') hazard_title_keywords = 'hazard_title' hazard_source_keywords = 'hazard_source' exposure_details = tr('Exposure details') exposure_title_keywords = 'exposure_title' exposure_source_keyword = 'exposure_source' if hazard_title_keywords in keywords: # We use safe translation infrastructure for this one (rather than Qt) hazard_title = safeTr(keywords[hazard_title_keywords]) else: hazard_title = tr('Hazard layer') if hazard_source_keywords in keywords: # We use safe translation infrastructure for this one (rather than Qt) hazard_source = safeTr(keywords[hazard_source_keywords]) else: hazard_source = tr('an unknown source') if exposure_title_keywords in keywords: exposure_title = keywords[exposure_title_keywords] else: exposure_title = tr('Exposure layer') if exposure_source_keyword in keywords: exposure_source = keywords[exposure_source_keyword] else: exposure_source = tr('an unknown source') report = m.Message() report.add(m.Heading(hazard_details, **INFO_STYLE)) report.add(m.Paragraph(hazard_title, join_words, hazard_source)) report.add(m.Heading(exposure_details, **INFO_STYLE)) report.add(m.Paragraph(exposure_title, join_words, exposure_source)) if inasafe_flag: report.add(m.Heading(tr('Software notes'), **INFO_STYLE)) # noinspection PyUnresolvedReferences inasafe_phrase = tr( 'This report was created using InaSAFE version %s. Visit ' 'http://inasafe.org to get your free copy of this software!' 'InaSAFE has been jointly developed by BNPB, AusAid/AIFDRR & the ' 'World Bank') % (get_version()) report.add(m.Paragraph(m.Text(inasafe_phrase))) return report