Example #1
0
    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')
Example #2
0
    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')
Example #3
0
    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())
Example #4
0
    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())
Example #5
0
    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())
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
 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)
Example #10
0
    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'])
Example #11
0
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.')