def infographic_pdf_extractor(impact_report, component_metadata): """Extracting infographic result and format it for PDF generation. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. QgisComposerComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ # QGIS Composer needed certain context to generate the output # - Map Settings # - Substitution maps # - Element settings, such as icon for picture file or image source context = QGISComposerContext() # we only have html elements for this try: infographic_html = jinja2_output_as_string( impact_report, 'infographic-layout') except TemplateError: return context if infographic_html.strip(): # get component object margin_left = 0 margin_right = 0 margin_top = 4.5 margin_bottom = 0 html_frame_elements = [ { 'id': 'infographic', 'mode': 'text', 'text': jinja2_output_as_string( impact_report, 'infographic-layout'), 'margin_left': margin_left, 'margin_top': margin_top, 'height': ( component_metadata.page_height - margin_top - margin_bottom), 'width': ( component_metadata.page_width - margin_left - margin_right) } ] context.html_frame_elements = html_frame_elements return context
def infographic_pdf_extractor(impact_report, component_metadata): """Extracting infographic result and format it for PDF generation. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. QgisComposerComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ # QGIS Composer needed certain context to generate the output # - Map Settings # - Substitution maps # - Element settings, such as icon for picture file or image source context = QGISComposerContext() # we only have html elements for this try: infographic_html = jinja2_output_as_string(impact_report, 'infographic-layout') except TemplateError: return context if infographic_html.strip(): # get component object margin_left = 0 margin_right = 0 margin_top = 4.5 margin_bottom = 0 html_frame_elements = [{ 'id': 'infographic', 'mode': 'text', 'text': jinja2_output_as_string(impact_report, 'infographic-layout'), 'margin_left': margin_left, 'margin_top': margin_top, 'height': (component_metadata.page_height - margin_top - margin_bottom), 'width': (component_metadata.page_width - margin_left - margin_right) }] context.html_frame_elements = html_frame_elements return context
def analysis_provenance_details_report_extractor(impact_report, component_metadata): """Extracting the main provenance details to its own report. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.1 """ context = {} extra_args = component_metadata.extra_args components_list = resolve_from_dictionary(extra_args, 'components_list') context['brand_logo'] = resource_url( resources_path('img', 'logos', 'inasafe-logo-white.png')) for key, component in list(components_list.items()): context[key] = jinja2_output_as_string(impact_report, component['key']) context['inasafe_resources_base_dir'] = resources_path() return context
def action_checklist_report_extractor(impact_report, component_metadata): """Extracting action checklist of the impact layer to its own report. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.1 """ context = {} extra_args = component_metadata.extra_args components_list = resolve_from_dictionary( extra_args, 'components_list') context['brand_logo'] = resource_url( resources_path('img', 'logos', 'inasafe-logo-white.png')) for key, component in list(components_list.items()): context[key] = jinja2_output_as_string( impact_report, component['key']) context['inasafe_resources_base_dir'] = resources_path() return context
def impact_table_extractor(impact_report, component_metadata): """Extracting impact summary of the impact layer. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ context = {} extra_args = component_metadata.extra_args components_list = resolve_from_dictionary(extra_args, 'components_list') # TODO: Decide either to use it or not if not impact_report.impact_function.debug_mode: # only show experimental MMI Detail when in debug mode components_list.pop('mmi_detail', None) context['brand_logo'] = resource_url( resources_path('img', 'logos', 'inasafe-logo-white.png')) for key, component in list(components_list.items()): context[key] = jinja2_output_as_string(impact_report, component['key']) context['inasafe_resources_base_dir'] = resources_path() return context
def infographic_layout_extractor(impact_report, component_metadata): """Extracting infographic result and format it with a layout. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ context = {} extra_args = component_metadata.extra_args infographics = resolve_from_dictionary(extra_args, ['infographics']) provenance = impact_report.impact_function.provenance infographic_result = '' for component_key in infographics: result = jinja2_output_as_string(impact_report, component_key) if result: infographic_result += result if not infographic_result: return context resources_dir = safe_dir(sub_dir='../resources') context['inasafe_resources_base_dir'] = resources_dir context['infographic_content'] = infographic_result version = provenance['inasafe_version'] start_datetime = provenance['start_datetime'] date = start_datetime.strftime('%Y-%m-%d') time = start_datetime.strftime('%H:%M') footer_format = resolve_from_dictionary(extra_args, 'footer_format') context['footer'] = footer_format.format(version=version, analysis_date=date, analysis_time=time) return context
def impact_table_pdf_extractor(impact_report, component_metadata): """Extracting impact summary of the impact layer. For PDF generations :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ # QGIS Composer needed certain context to generate the output # - Map Settings # - Substitution maps # - Element settings, such as icon for picture file or image source context = QGISComposerContext() extra_args = component_metadata.extra_args html_report_component_key = resolve_from_dictionary( extra_args, ['html_report_component_key']) # we only have html elements for this html_frame_elements = [{ 'id': 'impact-report', 'mode': 'text', 'text': jinja2_output_as_string(impact_report, html_report_component_key), 'margin_left': 10, 'margin_top': 10, }] context.html_frame_elements = html_frame_elements return context
def infographic_layout_extractor(impact_report, component_metadata): """Extracting infographic result and format it with a layout. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ context = {} extra_args = component_metadata.extra_args infographics = resolve_from_dictionary(extra_args, ['infographics']) provenance = impact_report.impact_function.provenance infographic_result = '' for component_key in infographics: result = jinja2_output_as_string(impact_report, component_key) if result: infographic_result += result if not infographic_result: return context resources_dir = safe_dir(sub_dir='../resources') context['inasafe_resources_base_dir'] = resources_dir context['infographic_content'] = infographic_result version = provenance['inasafe_version'] start_datetime = provenance['start_datetime'] date = start_datetime.strftime('%Y-%m-%d') time = start_datetime.strftime('%H:%M') footer_format = resolve_from_dictionary(extra_args, 'footer_format') context['footer'] = footer_format.format( version=version, analysis_date=date, analysis_time=time) return context
def analysis_provenance_details_pdf_extractor(impact_report, component_metadata): """Extracting the main provenance details to its own pdf report. For PDF generations :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.1 """ # QGIS Composer needed certain context to generate the output # - Map Settings # - Substitution maps # - Element settings, such as icon for picture file or image source context = QGISComposerContext() # we only have html elements for this html_frame_elements = [{ 'id': 'analysis-provenance-details-report', 'mode': 'text', 'text': jinja2_output_as_string(impact_report, 'analysis-provenance-details-report'), 'margin_left': 10, 'margin_top': 10, }] context.html_frame_elements = html_frame_elements return context
def impact_table_pdf_extractor(impact_report, component_metadata): """Extracting impact summary of the impact layer. For PDF generations :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ # QGIS Composer needed certain context to generate the output # - Map Settings # - Substitution maps # - Element settings, such as icon for picture file or image source context = QGISComposerContext() extra_args = component_metadata.extra_args html_report_component_key = resolve_from_dictionary( extra_args, ['html_report_component_key']) # we only have html elements for this html_frame_elements = [ { 'id': 'impact-report', 'mode': 'text', 'text': jinja2_output_as_string( impact_report, html_report_component_key), 'margin_left': 10, 'margin_top': 10, } ] context.html_frame_elements = html_frame_elements return context
def analysis_provenance_details_pdf_extractor( impact_report, component_metadata): """Extracting the main provenance details to its own pdf report. For PDF generations :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.1 """ # QGIS Composer needed certain context to generate the output # - Map Settings # - Substitution maps # - Element settings, such as icon for picture file or image source context = QGISComposerContext() # we only have html elements for this html_frame_elements = [ { 'id': 'analysis-provenance-details-report', 'mode': 'text', 'text': jinja2_output_as_string( impact_report, 'analysis-provenance-details-report'), 'margin_left': 10, 'margin_top': 10, } ] context.html_frame_elements = html_frame_elements return context
def impact_table_extractor(impact_report, component_metadata): """Extracting impact summary of the impact layer. :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.0 """ context = {} extra_args = component_metadata.extra_args debug_mode = impact_report.impact_function.debug_mode components_list = resolve_from_dictionary( extra_args, 'components_list') # TODO: Decide either to use it or not if not debug_mode: # only show experimental MMI Detail when in debug mode components_list.pop('mmi_detail', None) context['brand_logo'] = resource_url( resources_path('img', 'logos', 'inasafe-logo-white.png')) for key, component in components_list.iteritems(): context[key] = jinja2_output_as_string( impact_report, component['key']) context['inasafe_resources_base_dir'] = resources_path() return context
def qgis_composer_infographic_extractor(impact_report, component_metadata): """Extract composer context specific for infographic template. This method extract necessary context for a given impact report and component metadata and save the context so it can be used in composer rendering phase :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.2 """ qgis_context = impact_report.qgis_composition_context extra_args = component_metadata.extra_args context = QGISComposerContext() """Image Elements""" # get all image elements with their respective source path image_elements = deepcopy(image_item_elements) # remove inasafe_logo_white because we use expression for the image source image_elements.remove(inasafe_logo_white) # remove population_chart because we still don't have the source path image_elements.remove(population_chart) context.image_elements = image_elements # get the source path of population_chart population_donut_path = impact_report.component_absolute_output_path( 'population-chart-png') population_chart['path'] = population_donut_path context.image_elements.append(population_chart) """HTML Elements""" components = resolve_from_dictionary(extra_args, 'components') html_elements = deepcopy(html_frame_elements) # get the html content from component that has been proceed for element in html_elements: component = components.get(element['component']) if component: element['text'] = jinja2_output_as_string(impact_report, component['key']) context.html_frame_elements = html_elements """Map Elements""" map_overview_layer = None layer_registry = QgsMapLayerRegistry.instance() for layer in layer_registry.mapLayers().values(): if layer.name() == map_overview['id']: map_overview_layer = layer layers = [impact_report.impact_function.analysis_impacted] if map_overview_layer: layers.append(map_overview_layer) # default extent is analysis extent if not qgis_context.extent: qgis_context.extent = impact_report.impact_function.analysis_extent map_elements = [{ 'id': 'map-overview', 'extent': qgis_context.extent, 'grid_split_count': 5, 'layers': layers, }] context.map_elements = map_elements return context
def qgis_composer_infographic_extractor(impact_report, component_metadata): """Extract composer context specific for infographic template. This method extract necessary context for a given impact report and component metadata and save the context so it can be used in composer rendering phase :param impact_report: the impact report that acts as a proxy to fetch all the data that extractor needed :type impact_report: safe.report.impact_report.ImpactReport :param component_metadata: the component metadata. Used to obtain information about the component we want to render :type component_metadata: safe.report.report_metadata. ReportComponentsMetadata :return: context for rendering phase :rtype: dict .. versionadded:: 4.2 """ qgis_context = impact_report.qgis_composition_context extra_args = component_metadata.extra_args context = QGISComposerContext() """Image Elements""" # get all image elements with their respective source path image_elements = deepcopy(image_item_elements) # remove inasafe_logo_white because we use expression for the image source image_elements.remove(inasafe_logo_white) # remove population_chart because we still don't have the source path image_elements.remove(population_chart) context.image_elements = image_elements # get the source path of population_chart population_donut_path = impact_report.component_absolute_output_path( 'population-chart-png') population_chart['path'] = population_donut_path context.image_elements.append(population_chart) """HTML Elements""" components = resolve_from_dictionary(extra_args, 'components') html_elements = deepcopy(html_frame_elements) # get the html content from component that has been proceed for element in html_elements: component = components.get(element['component']) if component: element['text'] = jinja2_output_as_string( impact_report, component['key']) context.html_frame_elements = html_elements """Map Elements""" map_overview_layer = None layer_registry = QgsMapLayerRegistry.instance() for layer in layer_registry.mapLayers().values(): if layer.name() == map_overview['id']: map_overview_layer = layer layers = [impact_report.impact_function.analysis_impacted] if map_overview_layer: layers.append(map_overview_layer) # default extent is analysis extent if not qgis_context.extent: qgis_context.extent = impact_report.impact_function.analysis_extent map_elements = [ { 'id': 'map-overview', 'extent': qgis_context.extent, 'grid_split_count': 5, 'layers': layers, } ] context.map_elements = map_elements return context