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()
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)
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')
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))
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))
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)
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')
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())
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')
def parent(self, index): return QModelIndex()
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')
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)
def columnCount(self, parent=QModelIndex()): if parent.isValid(): return 0 return self._dataframe.columns.size
def columnCount(self, parent=QModelIndex()): if parent.isValid(): return 0 return len(self.columns)
def parent(self, index): if index.isValid(): p = index.internalPointer().parent() if p: return super().createIndex(p.row(), 0, p) return QModelIndex()