Example #1
0
    def _rItem2Index(self, item, parent=None):
        if parent is None:
            parent = QModelIndex()
        if item == self.getItem(parent):
            return parent

        if not parent.isValid() or parent.internalPointer().populated:
            for i in range(self.rowCount(parent)):
                index = self.index(i, 0, parent)
                index = self._rItem2Index(item, index)
                if index.isValid():
                    return index

        return QModelIndex()
Example #2
0
    def testModel(self):
        conn = QgsProviderRegistry.instance().providerMetadata(
            'postgres').createConnection(self.uri, {})
        self.assertTrue(conn)
        model = QgsDatabaseTableModel(conn)
        self.assertGreaterEqual(model.rowCount(), 3)
        old_count = model.rowCount()
        self.assertEqual(model.columnCount(), 1)
        tables = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('qgis_test.someData', tables)
        self.assertIn('qgis_test.some_poly_data', tables)
        self.assertIn('information_schema.attributes', tables)
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()),
                QgsDatabaseTableModel.RoleTableName), 'someData')
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()), QgsDatabaseTableModel.RoleSchema),
            'qgis_test')
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()), QgsDatabaseTableModel.RoleComment),
            'QGIS Test Table')
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()), QgsDatabaseTableModel.RoleCrs),
            QgsCoordinateReferenceSystem('EPSG:4326'))
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()),
                QgsDatabaseTableModel.RoleCustomInfo), {})
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()),
                QgsDatabaseTableModel.RoleTableFlags), 4)
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.someData'), 0,
                            QModelIndex()), QgsDatabaseTableModel.RoleWkbType),
            QgsWkbTypes.Point)
        self.assertEqual(
            model.data(
                model.index(tables.index('qgis_test.some_poly_data'), 0,
                            QModelIndex()), QgsDatabaseTableModel.RoleWkbType),
            QgsWkbTypes.Polygon)
        self.assertIsNone(
            model.data(model.index(model.rowCount(), 0, QModelIndex()),
                       Qt.DisplayRole))

        model.refresh()
        self.assertEqual(model.rowCount(), old_count)

        fields = QgsFields()
        fields.append(QgsField('test', QVariant.String))
        conn.createVectorTable('qgis_test', 'myNewTable', fields,
                               QgsWkbTypes.Point,
                               QgsCoordinateReferenceSystem('EPSG:3857'),
                               False, {})
        self.assertEqual(model.rowCount(), old_count)
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 1)
        tables = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('qgis_test.someData', tables)
        self.assertIn('qgis_test.some_poly_data', tables)
        self.assertIn('information_schema.attributes', tables)
        self.assertIn('qgis_test.myNewTable', tables)

        conn.createVectorTable('qgis_test', 'myNewTable2', fields,
                               QgsWkbTypes.Point,
                               QgsCoordinateReferenceSystem('EPSG:3857'),
                               False, {})
        conn.createVectorTable('qgis_test', 'myNewTable3', fields,
                               QgsWkbTypes.Point,
                               QgsCoordinateReferenceSystem('EPSG:3857'),
                               False, {})
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 3)
        tables = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('qgis_test.someData', tables)
        self.assertIn('qgis_test.some_poly_data', tables)
        self.assertIn('information_schema.attributes', tables)
        self.assertIn('qgis_test.myNewTable', tables)
        self.assertIn('qgis_test.myNewTable2', tables)
        self.assertIn('qgis_test.myNewTable3', tables)

        conn.createVectorTable('qgis_test', 'myNewTable4', fields,
                               QgsWkbTypes.Point,
                               QgsCoordinateReferenceSystem('EPSG:3857'),
                               False, {})
        conn.dropVectorTable('qgis_test', 'myNewTable2')
        conn.dropVectorTable('qgis_test', 'myNewTable')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 2)
        tables = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('qgis_test.someData', tables)
        self.assertIn('qgis_test.some_poly_data', tables)
        self.assertIn('information_schema.attributes', tables)
        self.assertNotIn('qgis_test.myNewTable', tables)
        self.assertNotIn('qgis_test.myNewTable2', tables)
        self.assertIn('qgis_test.myNewTable3', tables)
        self.assertIn('qgis_test.myNewTable4', tables)

        conn.dropVectorTable('qgis_test', 'myNewTable3')
        conn.dropVectorTable('qgis_test', 'myNewTable4')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count)
        tables = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('qgis_test.someData', tables)
        self.assertIn('qgis_test.some_poly_data', tables)
        self.assertIn('information_schema.attributes', tables)
        self.assertNotIn('qgis_test.myNewTable', tables)
        self.assertNotIn('qgis_test.myNewTable2', tables)
        self.assertNotIn('qgis_test.myNewTable3', tables)
        self.assertNotIn('qgis_test.myNewTable4', tables)
Example #3
0
    def testModel(self):
        res1 = QgsValidityCheckResult()
        res1.type = QgsValidityCheckResult.Warning
        res1.title = 'test'
        res1.detailedDescription = 'blah blah'

        res2 = QgsValidityCheckResult()
        res2.type = QgsValidityCheckResult.Critical
        res2.title = 'test2'
        res2.detailedDescription = 'blah blah2'

        res3 = QgsValidityCheckResult()
        res3.type = QgsValidityCheckResult.Warning
        res3.title = 'test3'
        res3.detailedDescription = 'blah blah3'
        res4 = QgsValidityCheckResult()
        res4.type = QgsValidityCheckResult.Warning
        res4.title = 'test4'
        res4.detailedDescription = 'blah blah4'

        model = QgsValidityCheckResultsModel([])
        self.assertEqual(model.rowCount(), 0)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertFalse(
            model.data(model.index(-1, 0, QModelIndex()), Qt.DisplayRole))
        self.assertFalse(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole))

        model = QgsValidityCheckResultsModel([res1, res2, res3, res4])
        self.assertEqual(model.rowCount(), 4)
        self.assertFalse(
            model.data(model.index(-1, 0, QModelIndex()), Qt.DisplayRole))
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'test')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'test2')
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()), Qt.DisplayRole),
            'test3')
        self.assertEqual(
            model.data(model.index(3, 0, QModelIndex()), Qt.DisplayRole),
            'test4')
        self.assertFalse(
            model.data(model.index(4, 0, QModelIndex()), Qt.DisplayRole))
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsValidityCheckResultsModel.DescriptionRole),
            'blah blah')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsValidityCheckResultsModel.DescriptionRole),
            'blah blah2')
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()),
                       QgsValidityCheckResultsModel.DescriptionRole),
            'blah blah3')
        self.assertEqual(
            model.data(model.index(3, 0, QModelIndex()),
                       QgsValidityCheckResultsModel.DescriptionRole),
            'blah blah4')
Example #4
0
 def rowCount(self, parent=QModelIndex()):
     if parent.isValid():
         return 0
     return self._mapping.__len__()
    def test_model(self):
        model = QgsProviderSublayerModel()
        self.assertEqual(model.rowCount(QModelIndex()), 0)
        self.assertEqual(model.columnCount(QModelIndex()), 2)
        self.assertEqual(model.headerData(0, Qt.Horizontal, Qt.DisplayRole),
                         'Item')
        self.assertEqual(model.headerData(0, Qt.Horizontal, Qt.ToolTipRole),
                         'Item')
        self.assertEqual(model.headerData(1, Qt.Horizontal, Qt.DisplayRole),
                         'Description')
        self.assertEqual(model.headerData(1, Qt.Horizontal, Qt.ToolTipRole),
                         'Description')

        # no crash, should return invalid results
        self.assertFalse(
            model.indexToSublayer(model.index(0, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())

        layer1 = QgsProviderSublayerDetails()
        layer1.setType(QgsMapLayerType.RasterLayer)
        layer1.setName('layer 1')
        layer1.setDescription('description 1')
        layer1.setProviderKey('gdal')
        layer1.setUri('uri 1')

        model.setSublayerDetails([layer1])
        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Flags),
            0)

        self.assertEqual(
            model.indexToSublayer(model.index(0, 0, QModelIndex())), layer1)
        self.assertFalse(
            model.indexToSublayer(model.index(1, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())

        layer2 = QgsProviderSublayerDetails()
        layer2.setType(QgsMapLayerType.VectorLayer)
        layer2.setName('layer 2')
        layer2.setDescription('description 2')
        layer2.setProviderKey('ogr')
        layer2.setUri('uri 2')
        layer2.setFeatureCount(-1)
        layer2.setWkbType(QgsWkbTypes.LineString)
        layer2.setFlags(Qgis.SublayerFlags(Qgis.SublayerFlag.SystemTable))

        model.setSublayerDetails([layer1, layer2])
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Flags),
            0)

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'layer 2')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole),
                         'description 2 - LineString (Uncounted)')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'ogr')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.VectorLayer)
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 2')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Name),
            'layer 2')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 2')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Flags),
            1)

        self.assertEqual(
            model.indexToSublayer(model.index(0, 0, QModelIndex())), layer1)
        self.assertEqual(
            model.indexToSublayer(model.index(1, 0, QModelIndex())), layer2)
        self.assertFalse(
            model.indexToSublayer(model.index(2, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())

        layer3 = QgsProviderSublayerDetails()
        layer3.setType(QgsMapLayerType.VectorLayer)
        layer3.setName('layer 3')
        layer3.setProviderKey('ogr')
        layer3.setUri('uri 3')
        layer3.setFeatureCount(1001)
        layer3.setWkbType(QgsWkbTypes.Polygon)

        model.setSublayerDetails([layer1, layer2, layer3])
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'layer 2')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole),
                         'description 2 - LineString (Uncounted)')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'ogr')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.VectorLayer)
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 2')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Name),
            'layer 2')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 2')

        self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole),
                         'layer 3')
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole),
                         'Polygon (1,001)')
        self.assertEqual(
            model.data(model.index(2, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'ogr')
        self.assertEqual(
            model.data(model.index(2, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.VectorLayer)
        self.assertEqual(
            model.data(model.index(2, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 3')
        self.assertEqual(
            model.data(model.index(2, 0), QgsProviderSublayerModel.Role.Name),
            'layer 3')
        self.assertEqual(
            model.data(model.index(2, 0),
                       QgsProviderSublayerModel.Role.Description), None)

        self.assertEqual(
            model.indexToSublayer(model.index(0, 0, QModelIndex())), layer1)
        self.assertEqual(
            model.indexToSublayer(model.index(1, 0, QModelIndex())), layer2)
        self.assertEqual(
            model.indexToSublayer(model.index(2, 0, QModelIndex())), layer3)
        self.assertFalse(
            model.indexToSublayer(model.index(3, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())

        # remove a layer
        model.setSublayerDetails([layer3, layer1])
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'layer 3')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole),
                         'Polygon (1,001)')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'ogr')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.VectorLayer)
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 3')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Name),
            'layer 3')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.Description), None)

        # remove another layer
        model.setSublayerDetails([layer3])
        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 3')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'Polygon (1,001)')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'ogr')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.VectorLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 3')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 3')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description), None)
    def test_model_allow_empty(self):
        """Test model with empty entry"""
        model = QgsProviderConnectionModel('ogr')
        self.assertEqual(model.rowCount(), 0)
        model.setAllowEmptyConnection(True)
        self.assertEqual(model.rowCount(), 1)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))
        md = QgsProviderRegistry.instance().providerMetadata('ogr')
        conn = md.createConnection(self.gpkg_path, {})
        md.saveConnection(conn, 'qgis_test1')

        model.setAllowEmptyConnection(False)
        model.setAllowEmptyConnection(False)

        self.assertEqual(model.rowCount(), 1)
        self.assertEqual(model.columnCount(), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.ToolTipRole),
            self.gpkg_path)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConnectionName),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleUri), self.gpkg_path)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConfiguration), {})
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))

        model.setAllowEmptyConnection(True)
        model.setAllowEmptyConnection(True)
        self.assertEqual(model.rowCount(), 2)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.ToolTipRole))
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConnectionName))
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleUri))
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConfiguration))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.ToolTipRole),
            self.gpkg_path)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConnectionName),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleUri), self.gpkg_path)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConfiguration), {})
        self.assertFalse(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))

        md.saveConnection(conn, 'qgis_test1')
        self.assertEqual(model.rowCount(), 2)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test1')
        self.assertFalse(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))

        model.setAllowEmptyConnection(False)
        self.assertEqual(model.rowCount(), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test1')
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))
        model.setAllowEmptyConnection(True)

        conn2 = md.createConnection(self.gpkg_path2, {})
        md.saveConnection(conn2, 'qgis_test2')
        self.assertEqual(model.rowCount(), 3)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.ToolTipRole),
            self.gpkg_path)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConnectionName),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleUri), self.gpkg_path)
        self.assertFalse(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test2')
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()), Qt.ToolTipRole),
            self.gpkg_path2)
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleConnectionName),
            'qgis_test2')
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleUri), self.gpkg_path2)
        self.assertFalse(
            model.data(model.index(2, 0, QModelIndex()),
                       QgsProviderConnectionModel.RoleEmpty))

        model.setAllowEmptyConnection(False)
        self.assertEqual(model.rowCount(), 2)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test1')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test2')
        model.setAllowEmptyConnection(True)

        md.deleteConnection('qgis_test1')
        self.assertEqual(model.rowCount(), 2)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test2')

        model.setAllowEmptyConnection(False)
        self.assertEqual(model.rowCount(), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'qgis_test2')
    def test_model_allow_empty(self):
        """Test model with empty entry"""
        conn = QgsProviderRegistry.instance().providerMetadata(
            'postgres').createConnection(self.uri, {})
        self.assertTrue(conn)
        model = QgsDatabaseSchemaModel(conn)
        self.assertGreaterEqual(model.rowCount(), 3)
        old_count = model.rowCount()
        model.setAllowEmptySchema(True)
        self.assertEqual(model.rowCount(), old_count + 1)

        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        self.assertFalse(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                QgsDatabaseSchemaModel.RoleEmpty))
        self.assertIsNone(
            model.data(model.index(model.rowCount(), 0, QModelIndex()),
                       Qt.DisplayRole))

        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 1)

        conn.createSchema('myNewSchema')
        self.assertEqual(model.rowCount(), old_count + 1)
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 2)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertIn('myNewSchema', schemas)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        self.assertFalse(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                QgsDatabaseSchemaModel.RoleEmpty))

        model.setAllowEmptySchema(False)
        self.assertEqual(model.rowCount(), old_count + 1)
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        model.setAllowEmptySchema(True)
        self.assertEqual(model.rowCount(), old_count + 2)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        self.assertFalse(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                QgsDatabaseSchemaModel.RoleEmpty))

        conn.createSchema('myNewSchema2')
        conn.createSchema('myNewSchema3')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 4)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertIn('myNewSchema', schemas)
        self.assertIn('myNewSchema2', schemas)
        self.assertIn('myNewSchema3', schemas)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        self.assertFalse(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                QgsDatabaseSchemaModel.RoleEmpty))

        conn.createSchema('myNewSchema4')
        conn.dropSchema('myNewSchema2')
        conn.dropSchema('myNewSchema')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 3)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertNotIn('myNewSchema', schemas)
        self.assertNotIn('myNewSchema2', schemas)
        self.assertIn('myNewSchema3', schemas)
        self.assertIn('myNewSchema4', schemas)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        self.assertFalse(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                QgsDatabaseSchemaModel.RoleEmpty))

        conn.dropSchema('myNewSchema3')
        conn.dropSchema('myNewSchema4')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 1)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertNotIn('myNewSchema3', schemas)
        self.assertNotIn('myNewSchema4', schemas)
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
        self.assertFalse(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                QgsDatabaseSchemaModel.RoleEmpty))

        model.setAllowEmptySchema(False)
        self.assertEqual(model.rowCount(), old_count)
        self.assertTrue(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole))
        self.assertFalse(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsDatabaseSchemaModel.RoleEmpty))
Example #8
0
    def testWidget(self):
        """Test widget operations"""

        widget = QgsFieldMappingWidget()
        for i in range(10):
            widget.appendField(QgsField(str(i)))
        self.assertTrue(widget.model().rowCount(QModelIndex()), 10)

        def _compare(widget, expected):
            actual = []
            for field in widget.mapping():
                actual.append(int(field.originalName))
            self.assertEqual(actual, expected)

        _compare(widget, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

        selection_model = widget.selectionModel()
        selection_model.clear()
        for i in range(0, 10, 2):
            selection_model.select(widget.model().index(i, 0),
                                   QItemSelectionModel.Select)

        self.assertTrue(widget.moveSelectedFieldsDown())
        _compare(widget, [1, 0, 3, 2, 5, 4, 7, 6, 9, 8])

        selection_model.clear()
        for i in range(1, 10, 2):
            selection_model.select(widget.model().index(i, 0),
                                   QItemSelectionModel.Select)

        self.assertTrue(widget.moveSelectedFieldsUp())
        _compare(widget, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

        selection_model.clear()
        for i in range(0, 10, 2):
            selection_model.select(widget.model().index(i, 0),
                                   QItemSelectionModel.Select)

        self.assertTrue(widget.removeSelectedFields())
        _compare(widget, [1, 3, 5, 7, 9])

        # Test set destination fields
        widget.setSourceFields(self.source_fields)
        widget.setDestinationFields(self.destination_fields)
        mapping = widget.mapping()
        self.assertEqual(mapping[0].field.name(), 'destination_field1')
        self.assertEqual(mapping[1].field.name(), 'destination_field2')
        self.assertEqual(mapping[2].field.name(), 'destination_field3')
        self.assertEqual(mapping[0].originalName, 'destination_field1')
        self.assertEqual(mapping[1].originalName, 'destination_field2')
        self.assertEqual(mapping[2].originalName, 'destination_field3')

        # Test constraints
        f = QgsField('constraint_field', QVariant.Int)
        constraints = QgsFieldConstraints()
        constraints.setConstraint(QgsFieldConstraints.ConstraintNotNull,
                                  QgsFieldConstraints.ConstraintOriginProvider)
        constraints.setConstraint(QgsFieldConstraints.ConstraintExpression,
                                  QgsFieldConstraints.ConstraintOriginProvider)
        constraints.setConstraint(QgsFieldConstraints.ConstraintUnique,
                                  QgsFieldConstraints.ConstraintOriginProvider)
        f.setConstraints(constraints)
        fields = QgsFields()
        fields.append(f)
        widget.setDestinationFields(fields)
        self.assertEqual(
            widget.model().data(widget.model().index(0, 5, QModelIndex()),
                                Qt.DisplayRole), "Constraints active")
        self.assertEqual(
            widget.model().data(widget.model().index(0, 5, QModelIndex()),
                                Qt.ToolTipRole),
            "Unique<br>Not null<br>Expression")
        self.assertEqual(
            widget.model().data(widget.model().index(0, 5, QModelIndex()),
                                Qt.BackgroundColorRole), QColor(255, 224, 178))
Example #9
0
 def setcurrentindex(self, index):
     if index is None:
         index = QModelIndex()
     if isinstance(index, int):
         index = self.listView.model().index(index, 0)
     self.listView.setCurrentIndex(index)
    def testModel(self):
        project = QgsProject()
        manager = QgsLayoutManager(project)
        model = QgsLayoutManagerModel(manager)
        self.assertEqual(model.rowCount(QModelIndex()), 0)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), None)
        self.assertEqual(model.indexFromLayout(None), QModelIndex())

        layout = QgsPrintLayout(project)
        layout.setName('test layout')
        self.assertEqual(model.indexFromLayout(layout), QModelIndex())
        self.assertTrue(manager.addLayout(layout))

        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'test layout')
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), layout)
        self.assertEqual(model.indexFromLayout(layout),
                         model.index(0, 0, QModelIndex()))
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(1, 0, QModelIndex())), None)

        layout.setName('test Layout')
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'test Layout')

        layout2 = QgsPrintLayout(project)
        layout2.setName('test layout2')
        self.assertTrue(manager.addLayout(layout2))

        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'test Layout')
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), layout)
        self.assertEqual(model.indexFromLayout(layout),
                         model.index(0, 0, QModelIndex()))
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'test layout2')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)
        self.assertEqual(
            model.layoutFromIndex(model.index(1, 0, QModelIndex())), layout2)
        self.assertEqual(model.indexFromLayout(layout2),
                         model.index(1, 0, QModelIndex()))

        manager.removeLayout(layout)
        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'test layout2')
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), layout2)
        self.assertEqual(
            model.layoutFromIndex(model.index(1, 0, QModelIndex())), None)
        self.assertEqual(model.indexFromLayout(layout2),
                         model.index(0, 0, QModelIndex()))

        manager.clear()
        self.assertEqual(model.rowCount(QModelIndex()), 0)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), None)

        # with empty row
        model.setAllowEmptyLayout(True)
        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), None)

        layout = QgsPrintLayout(project)
        layout.setName('test layout')
        self.assertTrue(manager.addLayout(layout))
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'test layout')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(1, 0, QModelIndex())), layout)
        self.assertEqual(model.indexFromLayout(layout),
                         model.index(1, 0, QModelIndex()))

        layout2 = QgsPrintLayout(project)
        layout2.setName('test layout2')
        self.assertTrue(manager.addLayout(layout2))
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'test layout')
        self.assertEqual(
            model.data(model.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()), Qt.DisplayRole),
            'test layout2')
        self.assertEqual(
            model.data(model.index(2, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(1, 0, QModelIndex())), layout)
        self.assertEqual(
            model.layoutFromIndex(model.index(2, 0, QModelIndex())), layout2)
        self.assertEqual(model.indexFromLayout(layout),
                         model.index(1, 0, QModelIndex()))
        self.assertEqual(model.indexFromLayout(layout2),
                         model.index(2, 0, QModelIndex()))

        manager.clear()
        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            model.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            model.layoutFromIndex(model.index(0, 0, QModelIndex())), None)
    def testProxyModel(self):
        project = QgsProject()
        manager = QgsLayoutManager(project)
        model = QgsLayoutManagerModel(manager)
        proxy = QgsLayoutManagerProxyModel()
        proxy.setSourceModel(model)
        self.assertEqual(proxy.rowCount(QModelIndex()), 0)
        self.assertEqual(
            proxy.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            proxy.data(model.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)

        layout = QgsPrintLayout(project)
        layout.setName('ccc')
        self.assertTrue(manager.addLayout(layout))

        self.assertEqual(proxy.rowCount(QModelIndex()), 1)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'ccc')
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)

        layout2 = QgsPrintLayout(project)
        layout2.setName('bbb')
        self.assertTrue(manager.addLayout(layout2))
        self.assertEqual(proxy.rowCount(QModelIndex()), 2)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'bbb')
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'ccc')
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)

        layout.setName('aaa')
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole),
            'aaa')
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'bbb')
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)

        model.setAllowEmptyLayout(True)
        self.assertEqual(proxy.rowCount(QModelIndex()), 3)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'aaa')
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole),
            'bbb')
        self.assertEqual(
            proxy.data(proxy.index(2, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)

        r = QgsReport(project)
        r.setName('ddd')
        manager.addLayout(r)
        self.assertEqual(proxy.rowCount(QModelIndex()), 4)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'aaa')
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole),
            'bbb')
        self.assertEqual(
            proxy.data(proxy.index(2, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)
        self.assertEqual(
            proxy.data(proxy.index(3, 0, QModelIndex()), Qt.DisplayRole),
            'ddd')
        self.assertEqual(
            proxy.data(proxy.index(3, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), r)

        proxy.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts)
        self.assertEqual(proxy.filters(),
                         QgsLayoutManagerProxyModel.FilterPrintLayouts)
        self.assertEqual(proxy.rowCount(QModelIndex()), 3)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'aaa')
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout)
        self.assertEqual(
            proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole),
            'bbb')
        self.assertEqual(
            proxy.data(proxy.index(2, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), layout2)

        proxy.setFilters(QgsLayoutManagerProxyModel.FilterReports)
        self.assertEqual(proxy.filters(),
                         QgsLayoutManagerProxyModel.FilterReports)
        self.assertEqual(proxy.rowCount(QModelIndex()), 2)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None)
        self.assertEqual(
            proxy.data(proxy.index(0, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), None)
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole),
            'ddd')
        self.assertEqual(
            proxy.data(proxy.index(1, 0, QModelIndex()),
                       QgsLayoutManagerModel.LayoutRole), r)

        proxy.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts
                         | QgsLayoutManagerProxyModel.FilterReports)
        self.assertEqual(
            proxy.filters(), QgsLayoutManagerProxyModel.FilterPrintLayouts
            | QgsLayoutManagerProxyModel.FilterReports)
        self.assertEqual(proxy.rowCount(QModelIndex()), 4)
Example #12
0
    def testModel(self):
        """Test the mapping model"""

        model = QgsAggregateMappingModel(self.source_fields)
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertIsNone(model.data(model.index(9999, 0), Qt.DisplayRole))

        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         '"source_field1"')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'concatenate')
        self.assertEqual(model.data(model.index(0, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole),
                         'source_field1')
        self.assertEqual(model.data(model.index(0, 4), Qt.DisplayRole),
                         QVariant.String)
        self.assertEqual(model.data(model.index(0, 5), Qt.DisplayRole), 0)
        self.assertEqual(model.data(model.index(0, 6), Qt.DisplayRole), 0)

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         '"source_field2"')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'sum')
        self.assertEqual(model.data(model.index(1, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(1, 3), Qt.DisplayRole),
                         'source_field2')
        self.assertEqual(model.data(model.index(1, 4), Qt.DisplayRole),
                         QVariant.Int)
        self.assertEqual(model.data(model.index(1, 5), Qt.DisplayRole), 10)
        self.assertEqual(model.data(model.index(1, 6), Qt.DisplayRole), 8)

        # Test expression scope
        ctx = model.contextGenerator().createExpressionContext()
        self.assertTrue('source_field1' in ctx.fields().names())

        # Test add fields
        model.appendField(QgsField('field3', QVariant.String),
                          'upper("field3")', 'first_value')
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole),
                         'upper("field3")')
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole),
                         'first_value')
        self.assertEqual(model.data(model.index(2, 2), Qt.DisplayRole), ',')
        self.assertEqual(model.data(model.index(2, 3), Qt.DisplayRole),
                         'field3')
        self.assertEqual(model.data(model.index(2, 4), Qt.DisplayRole),
                         QVariant.String)
        self.assertEqual(model.data(model.index(2, 5), Qt.DisplayRole), 0)
        self.assertEqual(model.data(model.index(2, 6), Qt.DisplayRole), 0)

        # Test remove field
        model.removeField(model.index(1, 0))
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         '"source_field1"')
        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'upper("field3")')

        # Test edit fields
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[0].aggregate, 'concatenate')
        self.assertEqual(mapping[0].delimiter, ',')
        self.assertEqual(mapping[0].source, '"source_field1"')
        self.assertEqual(mapping[1].field.name(), 'field3')
        self.assertEqual(mapping[1].aggregate, 'first_value')
        self.assertEqual(mapping[1].delimiter, ',')
        self.assertEqual(mapping[1].source, 'upper("field3")')

        # Test move up or down
        self.assertFalse(model.moveUp(model.index(0, 0)))
        self.assertFalse(model.moveUp(model.index(100, 0)))
        self.assertFalse(model.moveDown(model.index(1, 0)))
        self.assertFalse(model.moveDown(model.index(100, 0)))

        self.assertTrue(model.moveDown(model.index(0, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'field3')
        self.assertEqual(mapping[1].field.name(), 'source_field1')

        self.assertTrue(model.moveUp(model.index(1, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[1].field.name(), 'field3')
Example #13
0
    def testWidget(self):
        """Test widget operations"""

        widget = QgsAggregateMappingWidget()
        for i in range(10):
            widget.appendField(QgsField(str(i)), source=str(i))
        self.assertTrue(widget.model().rowCount(QModelIndex()), 10)

        def _compare(widget, expected):
            actual = []
            for aggregate in widget.mapping():
                actual.append(int(aggregate.source))
            self.assertEqual(actual, expected)

        _compare(widget, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

        selection_model = widget.selectionModel()
        selection_model.clear()
        for i in range(0, 10, 2):
            selection_model.select(widget.model().index(i, 0),
                                   QItemSelectionModel.Select)

        self.assertTrue(widget.moveSelectedFieldsDown())
        _compare(widget, [1, 0, 3, 2, 5, 4, 7, 6, 9, 8])

        selection_model.clear()
        for i in range(1, 10, 2):
            selection_model.select(widget.model().index(i, 0),
                                   QItemSelectionModel.Select)

        self.assertTrue(widget.moveSelectedFieldsUp())
        _compare(widget, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

        selection_model.clear()
        for i in range(0, 10, 2):
            selection_model.select(widget.model().index(i, 0),
                                   QItemSelectionModel.Select)

        self.assertTrue(widget.removeSelectedFields())
        _compare(widget, [1, 3, 5, 7, 9])

        widget.setSourceFields(self.source_fields)
        mapping = widget.mapping()

        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[0].source, '"source_field1"')
        self.assertEqual(mapping[0].aggregate, 'concatenate')
        self.assertEqual(mapping[0].delimiter, ',')
        self.assertEqual(mapping[1].field.name(), 'source_field2')
        self.assertEqual(mapping[1].source, '"source_field2"')
        self.assertEqual(mapping[1].aggregate, 'sum')
        self.assertEqual(mapping[1].delimiter, ',')

        mapping[0].source = 'upper("source_field2")'
        mapping[0].aggregate = 'first_value'
        mapping[0].delimiter = '|'
        new_aggregate = QgsAggregateMappingModel.Aggregate()
        new_aggregate.field = QgsField('output_field3',
                                       QVariant.Double,
                                       len=4,
                                       prec=2)
        new_aggregate.source = 'randf(1,2)'
        new_aggregate.aggregate = 'mean'
        new_aggregate.delimiter = '*'
        mapping.append(new_aggregate)

        widget.setMapping(mapping)

        mapping = widget.mapping()

        self.assertEqual(mapping[0].field.name(), 'source_field1')
        self.assertEqual(mapping[0].source, 'upper("source_field2")')
        self.assertEqual(mapping[0].aggregate, 'first_value')
        self.assertEqual(mapping[0].delimiter, '|')
        self.assertEqual(mapping[1].field.name(), 'source_field2')
        self.assertEqual(mapping[1].source, '"source_field2"')
        self.assertEqual(mapping[1].aggregate, 'sum')
        self.assertEqual(mapping[1].delimiter, ',')
        self.assertEqual(mapping[2].field.name(), 'output_field3')
        self.assertEqual(mapping[2].source, 'randf(1,2)')
        self.assertEqual(mapping[2].aggregate, 'mean')
        self.assertEqual(mapping[2].delimiter, '*')
    def test_proxy(self):
        """
        Test QgsProviderSublayerProxyModel
        """
        model = QgsProviderSublayerModel()
        proxy = QgsProviderSublayerProxyModel()
        proxy.setSourceModel(model)
        self.assertEqual(model.rowCount(QModelIndex()), 0)
        self.assertEqual(proxy.columnCount(QModelIndex()), 2)
        self.assertEqual(proxy.headerData(0, Qt.Horizontal, Qt.DisplayRole),
                         'Item')
        self.assertEqual(proxy.headerData(0, Qt.Horizontal, Qt.ToolTipRole),
                         'Item')
        self.assertEqual(proxy.headerData(1, Qt.Horizontal, Qt.DisplayRole),
                         'Description')
        self.assertEqual(proxy.headerData(1, Qt.Horizontal, Qt.ToolTipRole),
                         'Description')

        layer1 = QgsProviderSublayerDetails()
        layer1.setType(QgsMapLayerType.RasterLayer)
        layer1.setName('layer 1')
        layer1.setDescription('description 1')
        layer1.setProviderKey('gdal')
        layer1.setUri('uri 1')

        layer2 = QgsProviderSublayerDetails()
        layer2.setType(QgsMapLayerType.VectorLayer)
        layer2.setName('another layer 2')
        layer2.setDescription('description 2')
        layer2.setProviderKey('ogr')
        layer2.setUri('uri 2')
        layer2.setFeatureCount(-1)
        layer2.setWkbType(QgsWkbTypes.LineString)

        model.setSublayerDetails([layer1, layer2])

        item1 = QgsProviderSublayerModel.NonLayerItem()
        item1.setUri('item uri 1')
        item1.setName('item name 1')
        item1.setType('item type 1')
        item1.setDescription('item desc 1')

        model.addNonLayerItem(item1)

        self.assertEqual(proxy.rowCount(QModelIndex()), 3)

        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(proxy.data(proxy.index(0, 1), Qt.DisplayRole),
                         'item desc 1')
        self.assertEqual(
            proxy.data(proxy.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'item uri 1')
        self.assertEqual(
            proxy.data(proxy.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'item name 1')
        self.assertEqual(
            proxy.data(proxy.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'item desc 1')
        self.assertEqual(
            proxy.data(proxy.index(0, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), True)

        self.assertEqual(proxy.data(proxy.index(1, 0), Qt.DisplayRole),
                         'another layer 2')
        self.assertEqual(proxy.data(proxy.index(1, 1), Qt.DisplayRole),
                         'description 2 - LineString (Uncounted)')
        self.assertEqual(
            proxy.data(proxy.index(1, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'ogr')
        self.assertEqual(
            proxy.data(proxy.index(1, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.VectorLayer)
        self.assertEqual(
            proxy.data(proxy.index(1, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 2')
        self.assertEqual(
            proxy.data(proxy.index(1, 0), QgsProviderSublayerModel.Role.Name),
            'another layer 2')
        self.assertEqual(
            proxy.data(proxy.index(1, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 2')
        self.assertEqual(
            proxy.data(proxy.index(1, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), False)

        self.assertEqual(proxy.data(proxy.index(2, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(proxy.data(proxy.index(2, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            proxy.data(proxy.index(2, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            proxy.data(proxy.index(2, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            proxy.data(proxy.index(2, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            proxy.data(proxy.index(2, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            proxy.data(proxy.index(2, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')
        self.assertEqual(
            proxy.data(proxy.index(2, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), False)

        proxy.setFilterString(' 1')
        self.assertEqual(proxy.rowCount(QModelIndex()), 2)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(proxy.data(proxy.index(1, 0), Qt.DisplayRole),
                         'layer 1')

        proxy.setFilterString(' 2')
        self.assertEqual(proxy.rowCount(QModelIndex()), 1)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'another layer 2')

        proxy.setFilterString('ITEM')
        self.assertEqual(proxy.rowCount(QModelIndex()), 1)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'item name 1')

        # should also allow filtering by vector layer wkb type strings
        proxy.setFilterString('LineSTRING')
        self.assertEqual(proxy.rowCount(QModelIndex()), 1)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'another layer 2')

        proxy.setFilterString('')
        self.assertEqual(proxy.rowCount(QModelIndex()), 3)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(proxy.data(proxy.index(1, 0), Qt.DisplayRole),
                         'another layer 2')
        self.assertEqual(proxy.data(proxy.index(2, 0), Qt.DisplayRole),
                         'layer 1')

        # add a system table
        layer3 = QgsProviderSublayerDetails()
        layer3.setType(QgsMapLayerType.VectorLayer)
        layer3.setName('system table')
        layer3.setFlags(Qgis.SublayerFlags(Qgis.SublayerFlag.SystemTable))

        model.setSublayerDetails([layer1, layer2, layer3])
        # system tables should be hidden by default
        self.assertEqual(proxy.rowCount(QModelIndex()), 3)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(proxy.data(proxy.index(1, 0), Qt.DisplayRole),
                         'another layer 2')
        self.assertEqual(proxy.data(proxy.index(2, 0), Qt.DisplayRole),
                         'layer 1')

        proxy.setIncludeSystemTables(True)
        self.assertEqual(proxy.rowCount(QModelIndex()), 4)
        self.assertEqual(proxy.data(proxy.index(0, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(proxy.data(proxy.index(1, 0), Qt.DisplayRole),
                         'another layer 2')
        self.assertEqual(proxy.data(proxy.index(2, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(proxy.data(proxy.index(3, 0), Qt.DisplayRole),
                         'system table')
    def test_model_with_non_layer_items(self):
        model = QgsProviderSublayerModel()
        self.assertEqual(model.rowCount(QModelIndex()), 0)
        self.assertEqual(model.columnCount(QModelIndex()), 2)
        self.assertEqual(model.headerData(0, Qt.Horizontal, Qt.DisplayRole),
                         'Item')
        self.assertEqual(model.headerData(0, Qt.Horizontal, Qt.ToolTipRole),
                         'Item')
        self.assertEqual(model.headerData(1, Qt.Horizontal, Qt.DisplayRole),
                         'Description')
        self.assertEqual(model.headerData(1, Qt.Horizontal, Qt.ToolTipRole),
                         'Description')

        layer1 = QgsProviderSublayerDetails()
        layer1.setType(QgsMapLayerType.RasterLayer)
        layer1.setName('layer 1')
        layer1.setDescription('description 1')
        layer1.setProviderKey('gdal')
        layer1.setUri('uri 1')

        model.setSublayerDetails([layer1])
        self.assertEqual(model.rowCount(QModelIndex()), 1)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), False)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Flags),
            0)

        self.assertEqual(
            model.indexToSublayer(model.index(0, 0, QModelIndex())), layer1)
        self.assertFalse(
            model.indexToSublayer(model.index(1, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())

        item1 = QgsProviderSublayerModel.NonLayerItem()
        item1.setUri('item uri 1')
        item1.setName('item name 1')
        item1.setType('item type 1')
        item1.setDescription('item desc 1')

        model.addNonLayerItem(item1)
        self.assertEqual(model.rowCount(QModelIndex()), 2)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), False)

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole),
                         'item desc 1')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Uri),
            'item uri 1')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Name),
            'item name 1')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.Description),
            'item desc 1')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), True)
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.NonLayerItemType),
            'item type 1')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Flags),
            None)

        self.assertEqual(
            model.indexToSublayer(model.index(0, 0, QModelIndex())), layer1)
        self.assertFalse(
            model.indexToSublayer(model.index(1, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())
        self.assertEqual(
            model.indexToNonLayerItem(model.index(1, 0, QModelIndex())), item1)
        self.assertFalse(
            model.indexToNonLayerItem(model.index(2, 0, QModelIndex())).name())

        item2 = QgsProviderSublayerModel.NonLayerItem()
        item2.setUri('item uri 2')
        item2.setName('item name 2')
        item2.setType('item type 2')
        item2.setDescription('item desc 2')

        model.addNonLayerItem(item2)
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         'layer 1')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.ProviderKey), 'gdal')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.LayerType),
            QgsMapLayerType.RasterLayer)
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Uri),
            'uri 1')
        self.assertEqual(
            model.data(model.index(0, 0), QgsProviderSublayerModel.Role.Name),
            'layer 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.Description),
            'description 1')
        self.assertEqual(
            model.data(model.index(0, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), False)

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         'item name 1')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole),
                         'item desc 1')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Uri),
            'item uri 1')
        self.assertEqual(
            model.data(model.index(1, 0), QgsProviderSublayerModel.Role.Name),
            'item name 1')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.Description),
            'item desc 1')
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), True)
        self.assertEqual(
            model.data(model.index(1, 0),
                       QgsProviderSublayerModel.Role.NonLayerItemType),
            'item type 1')

        self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole),
                         'item name 2')
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole),
                         'item desc 2')
        self.assertEqual(
            model.data(model.index(2, 0), QgsProviderSublayerModel.Role.Uri),
            'item uri 2')
        self.assertEqual(
            model.data(model.index(2, 0), QgsProviderSublayerModel.Role.Name),
            'item name 2')
        self.assertEqual(
            model.data(model.index(2, 0),
                       QgsProviderSublayerModel.Role.Description),
            'item desc 2')
        self.assertEqual(
            model.data(model.index(2, 0),
                       QgsProviderSublayerModel.Role.IsNonLayerItem), True)
        self.assertEqual(
            model.data(model.index(2, 0),
                       QgsProviderSublayerModel.Role.NonLayerItemType),
            'item type 2')

        self.assertEqual(
            model.indexToSublayer(model.index(0, 0, QModelIndex())), layer1)
        self.assertFalse(
            model.indexToSublayer(model.index(1, 0, QModelIndex())).name())
        self.assertFalse(
            model.indexToNonLayerItem(model.index(0, 0, QModelIndex())).name())
        self.assertEqual(
            model.indexToNonLayerItem(model.index(1, 0, QModelIndex())), item1)
        self.assertEqual(
            model.indexToNonLayerItem(model.index(2, 0, QModelIndex())), item2)
        self.assertFalse(
            model.indexToNonLayerItem(model.index(3, 0, QModelIndex())).name())
Example #16
0
    def testCollection(self):
        p = QgsProject()
        l = QgsLayout(p)
        l.initializeDefaults()  # add a page
        guides = l.guides()

        # no guides initially
        self.assertEqual(guides.rowCount(QModelIndex()), 0)
        self.assertFalse(
            guides.data(QModelIndex(),
                        QgsLayoutGuideCollection.OrientationRole))
        self.assertFalse(guides.guides(Qt.Horizontal))
        self.assertFalse(guides.guides(Qt.Vertical))

        # add a guide
        g1 = QgsLayoutGuide(
            Qt.Horizontal,
            QgsLayoutMeasurement(5, QgsUnitTypes.LayoutCentimeters),
            l.pageCollection().page(0))
        guides.addGuide(g1)
        self.assertEqual(guides.rowCount(QModelIndex()), 1)
        self.assertEqual(
            guides.data(guides.index(0, 0),
                        QgsLayoutGuideCollection.OrientationRole),
            Qt.Horizontal)
        self.assertEqual(
            guides.data(guides.index(0, 0),
                        QgsLayoutGuideCollection.PositionRole), 5)
        self.assertEqual(
            guides.data(guides.index(0, 0),
                        QgsLayoutGuideCollection.UnitsRole),
            QgsUnitTypes.LayoutCentimeters)
        self.assertEqual(
            guides.data(guides.index(0, 0), QgsLayoutGuideCollection.PageRole),
            0)
        self.assertEqual(guides.guides(Qt.Horizontal), [g1])
        self.assertFalse(guides.guides(Qt.Vertical))
        self.assertEqual(guides.guidesOnPage(0), [g1])
        self.assertEqual(guides.guidesOnPage(1), [])

        g2 = QgsLayoutGuide(Qt.Horizontal, QgsLayoutMeasurement(15),
                            l.pageCollection().page(0))
        guides.addGuide(g2)
        self.assertEqual(guides.rowCount(QModelIndex()), 2)
        self.assertEqual(
            guides.data(guides.index(1, 0),
                        QgsLayoutGuideCollection.OrientationRole),
            Qt.Horizontal)
        self.assertEqual(
            guides.data(guides.index(1, 0),
                        QgsLayoutGuideCollection.PositionRole), 15)
        self.assertEqual(
            guides.data(guides.index(1, 0),
                        QgsLayoutGuideCollection.UnitsRole),
            QgsUnitTypes.LayoutMillimeters)
        self.assertEqual(
            guides.data(guides.index(1, 0), QgsLayoutGuideCollection.PageRole),
            0)
        self.assertEqual(guides.guides(Qt.Horizontal), [g1, g2])
        self.assertFalse(guides.guides(Qt.Vertical))
        self.assertEqual(guides.guidesOnPage(0), [g1, g2])

        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A3')
        l.pageCollection().addPage(page2)
        g3 = QgsLayoutGuide(Qt.Vertical, QgsLayoutMeasurement(35),
                            l.pageCollection().page(1))
        guides.addGuide(g3)
        self.assertEqual(guides.rowCount(QModelIndex()), 3)
        self.assertEqual(
            guides.data(guides.index(2, 0),
                        QgsLayoutGuideCollection.OrientationRole), Qt.Vertical)
        self.assertEqual(
            guides.data(guides.index(2, 0),
                        QgsLayoutGuideCollection.PositionRole), 35)
        self.assertEqual(
            guides.data(guides.index(2, 0),
                        QgsLayoutGuideCollection.UnitsRole),
            QgsUnitTypes.LayoutMillimeters)
        self.assertEqual(
            guides.data(guides.index(2, 0), QgsLayoutGuideCollection.PageRole),
            1)
        self.assertEqual(guides.guides(Qt.Horizontal), [g1, g2])
        self.assertEqual(guides.guides(Qt.Horizontal, 0), [g1, g2])
        self.assertEqual(guides.guides(Qt.Horizontal, 1), [])
        self.assertEqual(guides.guides(Qt.Vertical), [g3])
        self.assertEqual(guides.guides(Qt.Vertical, 0), [])
        self.assertEqual(guides.guides(Qt.Vertical, 1), [g3])
        self.assertEqual(guides.guides(Qt.Vertical, 2), [])
        self.assertEqual(guides.guidesOnPage(0), [g1, g2])
        self.assertEqual(guides.guidesOnPage(1), [g3])
    def test_model(self):
        """Test model functionality"""

        md = QgsProviderRegistry.instance().providerMetadata('ogr')
        conn = md.createConnection(self.gpkg_path, {})
        md.saveConnection(conn, 'qgis_test1')

        model = QgsProviderConnectionModel('ogr')
        self.assertEqual(model.rowCount(), 1)
        self.assertEqual(model.columnCount(), 1)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'qgis_test1')
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), Qt.ToolTipRole), self.gpkg_path)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), QgsProviderConnectionModel.RoleConnectionName), 'qgis_test1')
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), QgsProviderConnectionModel.RoleUri), self.gpkg_path)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), QgsProviderConnectionModel.RoleConfiguration), {})

        md.saveConnection(conn, 'qgis_test1')
        self.assertEqual(model.rowCount(), 1)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'qgis_test1')

        conn2 = md.createConnection(self.gpkg_path2, {})
        md.saveConnection(conn2, 'qgis_test2')
        self.assertEqual(model.rowCount(), 2)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'qgis_test1')
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), Qt.ToolTipRole), self.gpkg_path)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), QgsProviderConnectionModel.RoleConnectionName), 'qgis_test1')
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), QgsProviderConnectionModel.RoleUri), self.gpkg_path)
        self.assertEqual(model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole), 'qgis_test2')
        self.assertEqual(model.data(model.index(1, 0, QModelIndex()), Qt.ToolTipRole), self.gpkg_path2)
        self.assertEqual(model.data(model.index(1, 0, QModelIndex()), QgsProviderConnectionModel.RoleConnectionName), 'qgis_test2')
        self.assertEqual(model.data(model.index(1, 0, QModelIndex()), QgsProviderConnectionModel.RoleUri), self.gpkg_path2)

        md.deleteConnection('qgis_test1')
        self.assertEqual(model.rowCount(), 1)
        self.assertEqual(model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'qgis_test2')

        md.deleteConnection('qgis_test2')
Example #18
0
 def parent(self, index):
     return QModelIndex()
Example #19
0
    def testModel(self):
        """Test the mapping model"""

        model = QgsFieldMappingModel(self.source_fields,
                                     self.destination_fields)
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertIsNone(model.data(model.index(9999, 0), Qt.DisplayRole))
        # We now have this default mapping:
        # source exp        | destination fld
        # -------------------------------------------
        # source_field2     | destination_field1
        # source_field1     | destination_field2
        # NOT SET (NULL)    | destination_field3
        self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole),
                         '"source_field2"')
        self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole),
                         'destination_field1')
        self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole), 10)
        self.assertEqual(model.data(model.index(0, 4), Qt.DisplayRole), 8)

        self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole),
                         '"source_field1"')
        self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole),
                         'destination_field2')

        self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole),
                         QVariant())
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole),
                         'destination_field3')

        # Test expression scope
        ctx = model.contextGenerator().createExpressionContext()
        self.assertTrue('source_field1' in ctx.fields().names())

        # Test add fields
        model.appendField(QgsField('destination_field4', QVariant.String))
        self.assertEqual(model.rowCount(QModelIndex()), 4)
        self.assertEqual(model.data(model.index(3, 1), Qt.DisplayRole),
                         'destination_field4')

        # Test remove field
        model.removeField(model.index(3, 0))
        self.assertEqual(model.rowCount(QModelIndex()), 3)
        self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole),
                         'destination_field3')

        # Test edit fields
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'destination_field1')
        self.assertEqual(mapping[1].field.name(), 'destination_field2')
        self.assertEqual(mapping[2].field.name(), 'destination_field3')
        self.assertEqual(mapping[0].originalName, 'destination_field1')
        self.assertEqual(mapping[1].originalName, 'destination_field2')
        self.assertEqual(mapping[2].originalName, 'destination_field3')

        # Test move up or down
        self.assertFalse(model.moveUp(model.index(0, 0)))
        self.assertFalse(model.moveUp(model.index(100, 0)))
        self.assertFalse(model.moveDown(model.index(2, 0)))
        self.assertFalse(model.moveDown(model.index(100, 0)))

        self.assertTrue(model.moveDown(model.index(0, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[1].field.name(), 'destination_field1')
        self.assertEqual(mapping[0].field.name(), 'destination_field2')
        self.assertEqual(mapping[2].field.name(), 'destination_field3')
        self.assertEqual(mapping[1].originalName, 'destination_field1')
        self.assertEqual(mapping[0].originalName, 'destination_field2')
        self.assertEqual(mapping[2].originalName, 'destination_field3')

        self.assertTrue(model.moveUp(model.index(1, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'destination_field1')
        self.assertEqual(mapping[1].field.name(), 'destination_field2')
        self.assertEqual(mapping[2].field.name(), 'destination_field3')
        self.assertEqual(mapping[0].originalName, 'destination_field1')
        self.assertEqual(mapping[1].originalName, 'destination_field2')
        self.assertEqual(mapping[2].originalName, 'destination_field3')

        self.assertTrue(model.moveUp(model.index(2, 0)))
        mapping = model.mapping()
        self.assertEqual(mapping[0].field.name(), 'destination_field1')
        self.assertEqual(mapping[2].field.name(), 'destination_field2')
        self.assertEqual(mapping[1].field.name(), 'destination_field3')
        self.assertEqual(mapping[0].originalName, 'destination_field1')
        self.assertEqual(mapping[2].originalName, 'destination_field2')
        self.assertEqual(mapping[1].originalName, 'destination_field3')
Example #20
0
 def rowCount(self, parent=QModelIndex()):
     if parent.isValid():
         return 0
     return len(self._dataframe.index)
    def testModel(self):
        conn = QgsProviderRegistry.instance().providerMetadata(
            'postgres').createConnection(self.uri, {})
        self.assertTrue(conn)
        model = QgsDatabaseSchemaModel(conn)
        self.assertGreaterEqual(model.rowCount(), 3)
        old_count = model.rowCount()
        self.assertEqual(model.columnCount(), 1)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertEqual(
            model.data(
                model.index(schemas.index('qgis_test'), 0, QModelIndex()),
                Qt.ToolTipRole), 'qgis_test')
        self.assertIsNone(
            model.data(model.index(model.rowCount(), 0, QModelIndex()),
                       Qt.DisplayRole))

        model.refresh()
        self.assertEqual(model.rowCount(), old_count)

        conn.createSchema('myNewSchema')
        self.assertEqual(model.rowCount(), old_count)
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 1)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertIn('myNewSchema', schemas)

        conn.createSchema('myNewSchema2')
        conn.createSchema('myNewSchema3')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 3)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertIn('myNewSchema', schemas)
        self.assertIn('myNewSchema2', schemas)
        self.assertIn('myNewSchema3', schemas)

        conn.createSchema('myNewSchema4')
        conn.dropSchema('myNewSchema2')
        conn.dropSchema('myNewSchema')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count + 2)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertNotIn('myNewSchema', schemas)
        self.assertNotIn('myNewSchema2', schemas)
        self.assertIn('myNewSchema3', schemas)
        self.assertIn('myNewSchema4', schemas)

        conn.dropSchema('myNewSchema3')
        conn.dropSchema('myNewSchema4')
        model.refresh()
        self.assertEqual(model.rowCount(), old_count)
        schemas = [
            model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole)
            for r in range(model.rowCount())
        ]
        self.assertIn('public', schemas)
        self.assertIn('CamelCaseSchema', schemas)
        self.assertIn('qgis_test', schemas)
        self.assertNotIn('myNewSchema3', schemas)
        self.assertNotIn('myNewSchema4', schemas)
Example #22
0
 def columnCount(self, parent=QModelIndex()):
     if parent.isValid():
         return 0
     return self._dataframe.columns.size
Example #23
0
 def columnCount(self, parent=QModelIndex()):
     if parent.isValid():
         return 0
     return len(self.columns)
Example #24
0
 def parent(self, index):
     if index.isValid():
         p = index.internalPointer().parent()
         if p:
             return super().createIndex(p.row(), 0, p)
     return QModelIndex()