def test_print_default_template(self): """Test printing report to pdf using default template works.""" impact_layer_path = test_data_path( 'impact', 'population_affected_entire_area.shp') layer, _ = load_layer(impact_layer_path) # noinspection PyUnresolvedReferences QgsMapLayerRegistry.instance().addMapLayer(layer) # noinspection PyCallingNonCallable rect = QgsRectangle(106.8194, -6.2108, 106.8201, -6.1964) CANVAS.setExtent(rect) CANVAS.refresh() template = resources_path( 'qgis-composer-templates', 'inasafe-portrait-a4.qpt') report = ImpactReport(IFACE, template, layer) out_path = unique_filename( prefix='map_default_template_test', suffix='.pdf', dir=temp_dir('test')) report.print_map_to_pdf(out_path) # Check the file exists message = 'Rendered output does not exist: %s' % out_path self.assertTrue(os.path.exists(out_path), message) # Check the file is not corrupt message = 'The output file %s is corrupt' % out_path out_size = os.stat(out_path).st_size self.assertTrue(out_size > 0, message) # Check the components in composition are default components if qgis_version() < 20500: safe_logo = report.composition.getComposerItemById( 'safe-logo').pictureFile() north_arrow = report.composition.getComposerItemById( 'north-arrow').pictureFile() org_logo = report.composition.getComposerItemById( 'organisation-logo').pictureFile() else: safe_logo = report.composition.getComposerItemById( 'safe-logo').picturePath() north_arrow = report.composition.getComposerItemById( 'north-arrow').picturePath() org_logo = report.composition.getComposerItemById( 'organisation-logo').picturePath() expected_safe_logo = resources_path( 'img', 'logos', 'inasafe-logo-url.svg') expected_north_arrow = resources_path( 'img', 'north_arrows', 'simple_north_arrow.png') expected_org_logo = resources_path('img', 'logos', 'supporters.png') message = 'The safe logo path is not the default one' self.assertEqual(expected_safe_logo, safe_logo, message) message = 'The north arrow path is not the default one' self.assertEqual(expected_north_arrow, north_arrow, message) message = 'The organisation logo path is not the default one' self.assertEqual(expected_org_logo, org_logo, message)
def test_print_default_template(self): """Test printing report to pdf using default template works.""" impact_layer_path = test_data_path( 'impact', 'population_affected_entire_area.shp') layer, _ = load_layer(impact_layer_path) # noinspection PyUnresolvedReferences,PyArgumentList QgsMapLayerRegistry.instance().addMapLayer(layer) # noinspection PyCallingNonCallable rect = QgsRectangle(106.8194, -6.2108, 106.8201, -6.1964) CANVAS.setExtent(rect) CANVAS.refresh() template = resources_path('qgis-composer-templates', 'a4-portrait-blue.qpt') report = ImpactReport(IFACE, template, layer) out_path = unique_filename(prefix='map_default_template_test', suffix='.pdf', dir=temp_dir('test')) report.print_map_to_pdf(out_path) # Check the file exists message = 'Rendered output does not exist: %s' % out_path self.assertTrue(os.path.exists(out_path), message) # Check the file is not corrupt message = 'The output file %s is corrupt' % out_path out_size = os.stat(out_path).st_size self.assertTrue(out_size > 0, message) # Check the components in composition are default components if qgis_version() < 20500: safe_logo = report.composition.getComposerItemById( 'inasafe-logo').pictureFile() north_arrow = report.composition.getComposerItemById( 'north-arrow').pictureFile() org_logo = report.composition.getComposerItemById( 'organisation-logo').pictureFile() else: safe_logo = report.composition.getComposerItemById( 'white-inasafe-logo').picturePath() north_arrow = report.composition.getComposerItemById( 'north-arrow').picturePath() org_logo = report.composition.getComposerItemById( 'organisation-logo').picturePath() expected_safe_logo = resources_path('img', 'logos', 'inasafe-logo-url-white.svg') expected_north_arrow = resources_path('img', 'north_arrows', 'simple_north_arrow.png') expected_org_logo = resources_path('img', 'logos', 'supporters.png') message = ('The safe logo path is not the default one: %s isn\'t %s' % (expected_safe_logo, safe_logo)) self.assertEqual(expected_safe_logo, safe_logo, message) message = 'The north arrow path is not the default one' self.assertEqual(expected_north_arrow, north_arrow, message) message = 'The organisation logo path is not the default one' self.assertEqual(expected_org_logo, org_logo, message)
def test_custom_logo(self): """Test that setting user-defined logo works.""" LOGGER.info('Testing custom_logo') impact_layer_path = test_data_path( 'impact', 'population_affected_entire_area.shp') layer, _ = load_layer(impact_layer_path) # noinspection PyUnresolvedReferences QgsMapLayerRegistry.instance().addMapLayer(layer) # noinspection PyCallingNonCallable rect = QgsRectangle(106.8194, -6.2108, 106.8201, -6.1964) CANVAS.setExtent(rect) CANVAS.refresh() template = resources_path('qgis-composer-templates', 'inasafe-portrait-a4.qpt') report = ImpactReport(IFACE, template, layer) # Set custom logo custom_logo_path = resources_path('img', 'logos', 'logo-flower.png') report.organisation_logo = custom_logo_path out_path = unique_filename(prefix='map_custom_logo_test', suffix='.pdf', dir=temp_dir('test')) report.print_map_to_pdf(out_path) # Check the file exists message = 'Rendered output does not exist: %s' % out_path self.assertTrue(os.path.exists(out_path), message) # Check the file is not corrupt message = 'The output file %s is corrupt' % out_path out_size = os.stat(out_path).st_size self.assertTrue(out_size > 0, message) # Check the organisation logo in composition sets correctly to # logo-flower if qgis_version() < 20500: custom_img_path = report.composition.getComposerItemById( 'organisation-logo').pictureFile() else: custom_img_path = report.composition.getComposerItemById( 'organisation-logo').picturePath() message = 'The custom logo path is not set correctly' self.assertEqual(custom_logo_path, custom_img_path, message)
def generate_report(self): # Generate pdf report from impact if not self.impact_exists: # Cannot generate report when no impact layer present return layer_registry = QgsMapLayerRegistry.instance() layer_registry.removeAllMapLayers() impact_qgis_layer = read_qgis_layer(self.impact_layer.filename) layer_registry.addMapLayer(impact_qgis_layer) CANVAS.setExtent(impact_qgis_layer.extent()) CANVAS.refresh() report = ImpactReport(IFACE, template=None, layer=impact_qgis_layer) report.print_map_to_pdf(self.map_report_path) report.print_impact_table(self.table_report_path) layer_registry.removeAllMapLayers()
def test_custom_logo(self): """Test that setting user-defined logo works.""" LOGGER.info('Testing custom_logo') impact_layer_path = test_data_path( 'impact', 'population_affected_entire_area.shp') layer, _ = load_layer(impact_layer_path) # noinspection PyUnresolvedReferences,PyArgumentList QgsMapLayerRegistry.instance().addMapLayer(layer) # noinspection PyCallingNonCallable rect = QgsRectangle(106.8194, -6.2108, 106.8201, -6.1964) CANVAS.setExtent(rect) CANVAS.refresh() template = resources_path( 'qgis-composer-templates', 'a4-portrait-blue.qpt') report = ImpactReport(IFACE, template, layer) # Set custom logo custom_logo_path = resources_path('img', 'logos', 'supporters.png') report.organisation_logo = custom_logo_path out_path = unique_filename( prefix='map_custom_logo_test', suffix='.pdf', dir=temp_dir('test')) report.print_map_to_pdf(out_path) # Check the file exists message = 'Rendered output does not exist: %s' % out_path self.assertTrue(os.path.exists(out_path), message) # Check the file is not corrupt message = 'The output file %s is corrupt' % out_path out_size = os.stat(out_path).st_size self.assertTrue(out_size > 0, message) # Check the organisation logo in composition sets correctly to # logo-flower if qgis_version() < 20500: custom_img_path = report.composition.getComposerItemById( 'organisation-logo').pictureFile() else: custom_img_path = report.composition.getComposerItemById( 'organisation-logo').picturePath() message = 'The custom logo path is not set correctly' self.assertEqual(custom_logo_path, custom_img_path, message)
def build_report(cli_arguments): """Produces pdf products. To be called after shapefile has been written into arguments.output_file. .. versionadded:: 3.2 :param cli_arguments: User inputs. :type cli_arguments: CommandLineArguments :raises: Exception """ try: LOGGER.info('Building a report') basename, ext = os.path.splitext(cli_arguments.output_file) if ext == '.shp': impact_layer = QgsVectorLayer(cli_arguments.output_file, 'Impact Layer', 'ogr') elif ext == '.tif': impact_layer = QgsRasterLayer(cli_arguments.output_file, 'Impact Layer') layer_registry = QgsMapLayerRegistry.instance() layer_registry.removeAllMapLayers() layer_registry.addMapLayer(impact_layer) CANVAS.setExtent(impact_layer.extent()) CANVAS.refresh() report = ImpactReport(IFACE, cli_arguments.report_template, impact_layer) LOGGER.debug(os.path.splitext(cli_arguments.output_file)[0] + '.pdf') map_path = report.print_map_to_pdf( os.path.splitext(cli_arguments.output_file)[0] + '.pdf') print "Impact Map : " + map_path table_path = report.print_impact_table( os.path.splitext(cli_arguments.output_file)[0] + '_table.pdf') print "Impact Summary Table : " + table_path layer_registry.removeAllMapLayers() except Exception as exception: print exception.message print exception.__doc__ raise RuntimeError
def build_report(cli_arguments): """Produces pdf products. To be called after shapefile has been written into arguments.output_file. .. versionadded:: 3.2 :param cli_arguments: User inputs. :type cli_arguments: CommandLineArguments :raises: Exception """ try: LOGGER.info('Building a report') impact_layer = get_layer(cli_arguments.output_file, 'Impact Layer') hazard_layer = get_layer(cli_arguments.hazard, 'Hazard Layer') layer_registry = QgsMapLayerRegistry.instance() layer_registry.removeAllMapLayers() extra_layers = [hazard_layer] layer_registry.addMapLayer(impact_layer) layer_registry.addMapLayers(extra_layers) CANVAS.setExtent(impact_layer.extent()) CANVAS.refresh() report = ImpactReport( IFACE, cli_arguments.report_template, impact_layer, extra_layers=extra_layers) report.extent = CANVAS.fullExtent() LOGGER.debug(os.path.splitext(cli_arguments.output_file)[0] + '.pdf') map_path = report.print_map_to_pdf( os.path.splitext(cli_arguments.output_file)[0] + '.pdf') print "Impact Map : " + map_path table_path = report.print_impact_table( os.path.splitext(cli_arguments.output_file)[0] + '_table.pdf') print "Impact Summary Table : " + table_path layer_registry.removeAllMapLayers() except Exception as exception: print exception.message print exception.__doc__ raise RuntimeError
def build_report(cli_arguments): """Produces pdf products. To be called after shapefile has been written into arguments.output_file. .. versionadded:: 3.2 :param cli_arguments: User inputs. :type cli_arguments: CommandLineArguments :raises: Exception """ try: LOGGER.info("Building a report") basename, ext = os.path.splitext(cli_arguments.output_file) if ext == ".shp": impact_layer = QgsVectorLayer(cli_arguments.output_file, "Impact Layer", "ogr") elif ext == ".tif": impact_layer = QgsRasterLayer(cli_arguments.output_file, "Impact Layer") layer_registry = QgsMapLayerRegistry.instance() layer_registry.removeAllMapLayers() layer_registry.addMapLayer(impact_layer) CANVAS.setExtent(impact_layer.extent()) CANVAS.refresh() report = ImpactReport(IFACE, cli_arguments.report_template, impact_layer) LOGGER.debug(os.path.splitext(cli_arguments.output_file)[0] + ".pdf") map_path = report.print_map_to_pdf(os.path.splitext(cli_arguments.output_file)[0] + ".pdf") print "Impact Map : " + map_path table_path = report.print_impact_table(os.path.splitext(cli_arguments.output_file)[0] + "_table.pdf") print "Impact Summary Table : " + table_path layer_registry.removeAllMapLayers() except Exception as exception: print exception.message print exception.__doc__ raise RuntimeError