def test_wmts_config(self): projectPath = self.projectGroupsPath assert os.path.exists( projectPath), "Project file not found: " + projectPath project = QgsProject() project.read(projectPath) self.wmts_request_compare_project( project, 'GetCapabilities', reference_base_name='wmts_getcapabilities_config') self.assertTrue(project.removeEntry('WMTSGrids', 'Config')) self.assertTrue(project.removeEntry('WMTSGrids', 'CRS')) self.wmts_request_compare_project( project, 'GetCapabilities', reference_base_name='wmts_getcapabilities_config') self.assertTrue( project.writeEntry('WMTSGrids', 'Config', ( 'EPSG:3857,20037508.342789248,-20037508.342789248,559082264.0287179,20', ))) self.assertTrue(project.writeEntry('WMTSGrids', 'CRS', ('EPSG:3857', ))) self.wmts_request_compare_project( project, 'GetCapabilities', reference_base_name='wmts_getcapabilities_config_3857')
def test_wmts_config(self): projectPath = self.projectGroupsPath assert os.path.exists(projectPath), "Project file not found: " + projectPath project = QgsProject() project.read(projectPath) self.wmts_request_compare_project(project, 'GetCapabilities', reference_base_name='wmts_getcapabilities_config') self.assertTrue(project.removeEntry('WMTSGrids', 'Config')) self.assertTrue(project.removeEntry('WMTSGrids', 'CRS')) self.wmts_request_compare_project(project, 'GetCapabilities', reference_base_name='wmts_getcapabilities_config') self.assertTrue(project.writeEntry('WMTSGrids', 'Config', ('EPSG:3857,20037508.342789248,-20037508.342789248,559082264.0287179,20',))) self.assertTrue(project.writeEntry('WMTSGrids', 'CRS', ('EPSG:3857',))) self.wmts_request_compare_project(project, 'GetCapabilities', reference_base_name='wmts_getcapabilities_config_3857')
def testWriteEntryDirtying(self): project = QgsProject() # writing a new entry should dirty the project project.setDirty(False) self.assertTrue(project.writeEntry('myscope', 'myentry', True)) self.assertTrue(project.isDirty()) # over-writing a pre-existing entry with the same value should _not_ dirty the project project.setDirty(False) self.assertTrue(project.writeEntry('myscope', 'myentry', True)) self.assertFalse(project.isDirty()) # over-writing a pre-existing entry with a different value should dirty the project project.setDirty(False) self.assertTrue(project.writeEntry('myscope', 'myentry', False)) self.assertTrue(project.isDirty())
def testDirtying(self): project = QgsProject() # writing a new entry should dirty the project project.setDirty(False) self.assertTrue(project.writeEntry('myscope', 'myentry', True)) self.assertTrue(project.isDirty()) # over-writing a pre-existing entry with the same value should _not_ dirty the project project.setDirty(False) self.assertTrue(project.writeEntry('myscope', 'myentry', True)) self.assertFalse(project.isDirty()) # over-writing a pre-existing entry with a different value should dirty the project project.setDirty(False) self.assertTrue(project.writeEntry('myscope', 'myentry', False)) self.assertTrue(project.isDirty()) # removing an existing entry should dirty the project project.setDirty(False) self.assertTrue(project.removeEntry('myscope', 'myentry')) self.assertTrue(project.isDirty()) # removing a non-existing entry should _not_ dirty the project project.setDirty(False) self.assertTrue(project.removeEntry('myscope', 'myentry')) self.assertFalse(project.isDirty()) # setting a project CRS with a new value should dirty the project project.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) project.setDirty(False) project.setCrs(QgsCoordinateReferenceSystem('EPSG:3148')) self.assertTrue(project.isDirty()) # setting a project CRS with the same project CRS should not dirty the project project.setDirty(False) project.setCrs(QgsCoordinateReferenceSystem('EPSG:3148')) self.assertFalse(project.isDirty())
def testWriteEntry(self): tmpDir = QTemporaryDir() tmpFile = "{}/project.qgs".format(tmpDir.path()) # zip with existing file project = QgsProject() query = 'select * from "sample DH" where "sample DH"."Elev" > 130 and "sample DH"."Elev" < 140' self.assertTrue(project.writeEntry('myscope', 'myentry', query)) self.assertTrue(project.write(tmpFile)) self.assertTrue(project.read(tmpFile)) q, ok = project.readEntry('myscope', 'myentry') self.assertTrue(ok) self.assertEqual(q, query)
def prepare_project(self, project: QgsProject) -> None: """ Set project configuration """ if self._disable_owsurls: # Disable ows urls defined in project # May be needed because it overrides # any proxy settings project.writeEntry("WMSUrl", "/", "") project.writeEntry("WFSUrl", "/", "") project.writeEntry("WCSUrl", "/", "") project.writeEntry("WMTSUrl", "/", "")
def test_project_server_validator(self): """Test project server validator.""" project = QgsProject() layer = QgsVectorLayer('Point?field=fldtxt:string', 'layer_1', 'memory') project.addMapLayers([layer]) # Valid valid, results = QgsProjectServerValidator.validate(project) self.assertTrue(valid) self.assertFalse(results) layer_1 = QgsVectorLayer('Point?field=fldtxt:string', 'layer_1', 'memory') project.addMapLayers([layer_1]) # Not valid, same layer name valid, results = QgsProjectServerValidator.validate(project) self.assertFalse(valid) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.DuplicatedNames, results[0].error) # Not valid, short name is invalid layer_1.setShortName('layer_1_invalid_#') valid, results = QgsProjectServerValidator.validate(project) self.assertFalse(valid) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.LayerShortName, results[0].error) # Not valid, same short name as the first layer name layer_1.setShortName('layer_1') valid, results = QgsProjectServerValidator.validate(project) self.assertFalse(valid) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.DuplicatedNames, results[0].error) # Valid layer_1.setShortName('layer_1_bis') valid, results = QgsProjectServerValidator.validate(project) self.assertTrue(valid) self.assertEqual(0, len(results)) # Not valid, a group with same name as the first layer group = project.layerTreeRoot().addGroup('layer_1') valid, results = QgsProjectServerValidator.validate(project) self.assertFalse(valid) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.DuplicatedNames, results[0].error) # Valid group.setCustomProperty('wmsShortName', 'my_group1') valid, results = QgsProjectServerValidator.validate(project) self.assertTrue(valid) self.assertEqual(0, len(results)) # Not valid, the project title is invalid project.setTitle('@ layer 1') valid, results = QgsProjectServerValidator.validate(project) self.assertFalse(valid) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.ProjectShortName, results[0].error) # Valid project title project.setTitle('project_title') valid, results = QgsProjectServerValidator.validate(project) self.assertTrue(valid) self.assertEqual(0, len(results)) # Valid despite the bad project title, use project short name project.setTitle('@ layer 1') project.writeEntry('WMSRootName', '/', 'project_short_name') valid, results = QgsProjectServerValidator.validate(project) self.assertTrue(valid) self.assertEqual(0, len(results)) # Not valid project short name project.setTitle('project_title') project.writeEntry('WMSRootName', '/', 'project with space') valid, results = QgsProjectServerValidator.validate(project) self.assertFalse(valid) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.ProjectShortName, results[0].error) # Not valid, duplicated project short name project.writeEntry('WMSRootName', '/', 'layer_1') valid, results = QgsProjectServerValidator.validate(project) self.assertEqual(1, len(results)) self.assertEqual(QgsProjectServerValidator.ProjectRootNameConflict, results[0].error)
def test_getFeatureFeatureEnvelopeCrs(self): """Test issue GH #48642""" project = QgsProject() layer = QgsVectorLayer("Point?crs=epsg:3857&field=fldint:integer", "layer", "memory") project.addMapLayers([layer]) project.writeEntry("WFSLayers", "/", [layer.id()]) f = QgsFeature(layer.fields()) f.setGeometry(QgsGeometry.fromWkt('point(807305 5592878)')) f.setAttributes([123]) layer.dataProvider().addFeatures([f]) f = QgsFeature(layer.fields()) f.setGeometry(QgsGeometry.fromWkt('point(812191 5589555)')) f.setAttributes([123]) layer.dataProvider().addFeatures([f]) query_string = "?" + "&".join([ "%s=%s" % i for i in list({ "SERVICE": "WFS", "REQUEST": "GetFeature", "VERSION": "1.1.0", "TYPENAME": "layer", "SRSNAME": "EPSG:4326" }.items()) ]) header, body = self._execute_request_project(query_string, project) root = et.fromstring(body) e = root.findall('.//gml:Envelope', root.nsmap)[0] self.assertEqual(e.attrib, {'srsName': 'EPSG:4326'}) self.assertEqual([c[:4] for c in e.findall('.//')[0].text.split(' ')], ['7.25', '44.7']) self.assertEqual([c[:4] for c in e.findall('.//')[1].text.split(' ')], ['7.29', '44.8']) query_string = "?" + "&".join([ "%s=%s" % i for i in list({ "SERVICE": "WFS", "REQUEST": "GetFeature", "VERSION": "1.1.0", "TYPENAME": "layer", "SRSNAME": "EPSG:4326", "BBOX": "7.2,44.5,8.2,45.1,EPSG:4326" }.items()) ]) header, body = self._execute_request_project(query_string, project) root = et.fromstring(body) e = root.findall('.//gml:Envelope', root.nsmap)[0] self.assertEqual(e.attrib, {'srsName': 'EPSG:4326'}) self.assertEqual([c[:4] for c in e.findall('.//')[0].text.split(' ')], ['7.2', '44.5']) self.assertEqual([c[:4] for c in e.findall('.//')[1].text.split(' ')], ['8.2', '45.1']) query_string = "?" + "&".join([ "%s=%s" % i for i in list({ "SERVICE": "WFS", "REQUEST": "GetFeature", "VERSION": "1.1.0", "TYPENAME": "layer", "SRSNAME": "EPSG:4326", "BBOX": "807305,5589555,812191,5592878,EPSG:3857" }.items()) ]) header, body = self._execute_request_project(query_string, project) root = et.fromstring(body) e = root.findall('.//gml:Envelope', root.nsmap)[0] self.assertEqual(e.attrib, {'srsName': 'EPSG:4326'}) self.assertEqual([c[:4] for c in e.findall('.//')[0].text.split(' ')], ['7.25', '44.7']) self.assertEqual([c[:4] for c in e.findall('.//')[1].text.split(' ')], ['7.29', '44.8'])
def _add_decorations(project: qgc.QgsProject) -> None: """Add "decorations" to QGIS project. Decorations are overlaid on the QGIS viewport. """ logger.debug('Adding decorations...') # Add CopyrightLabel: project.writeEntry('CopyrightLabel', '/Enabled', True) # project.writeEntry('CopyrightLabel', '/FontName', 'Sans Serif') # NOTE: Does the copyright symbol work this way or should we use HTML codes? year = dt.date.today().year copyright_label = escape( f'QGreenland {get_build_version()} © NSIDC {year}' '\nhttps://qgreenland.org | https://github.com/nsidc/qgreenland/', ) project.writeEntry('CopyrightLabel', '/Label', copyright_label) project.writeEntry('CopyrightLabel', '/Placement', 0) project.writeEntry('CopyrightLabel', '/MarginH', 0) project.writeEntry('CopyrightLabel', '/MarginV', 0) # Add Image (QGreenland logo): project.writeEntry('Image', '/Enabled', True) project.writeEntry('Image', '/Placement', 0) project.writeEntry('Image', '/MarginH', 4) project.writeEntry('Image', '/MarginV', 8) project.writeEntry('Image', '/Size', 24) project.writeEntry('Image', '/ImagePath', 'qgreenland.png') # Enable the scalebar project.writeEntry('ScaleBar', '/Enabled', True) # Placement 3 corresponds to lower-right corner project.writeEntry('ScaleBar', '/Placement', 3) logger.debug('Done adding decorations.')