def testCreateField(self): s = QgsAuxiliaryStorage() self.assertTrue(s.isValid()) # Create a new auxiliary layer with 'pk' as key vl = createLayer() pkf = vl.fields().field(vl.fields().indexOf('pk')) al = s.createAuxiliaryLayer(pkf, vl) self.assertTrue(al.isValid()) vl.setAuxiliaryLayer(al) prop = QgsPropertyDefinition() prop.setComment('test_field') prop.setDataType(QgsPropertyDefinition.DataTypeNumeric) prop.setOrigin('user') prop.setName('custom') self.assertTrue(al.addAuxiliaryField(prop)) prop = QgsPropertyDefinition() prop.setComment('test_field_string') prop.setDataType(QgsPropertyDefinition.DataTypeString) prop.setOrigin('user') prop.setName('custom') self.assertTrue(al.addAuxiliaryField(prop)) self.assertEqual(len(al.auxiliaryFields()), 2) self.assertEqual(al.auxiliaryFields()[0].name(), 'user_custom_test_field') self.assertEqual(al.auxiliaryFields()[0].type(), QVariant.Double) self.assertEqual(al.auxiliaryFields()[0].typeName(), 'Real') self.assertEqual(al.auxiliaryFields()[1].name(), 'user_custom_test_field_string') self.assertEqual(al.auxiliaryFields()[1].type(), QVariant.String) self.assertEqual(al.auxiliaryFields()[1].typeName(), 'String')
def test_ZFeatureRequestSortByAuxiliaryField(self): s = QgsAuxiliaryStorage() self.assertTrue(s.isValid()) layer = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer", "addfeat", "memory") pr = layer.dataProvider() f1 = QgsFeature() f1.setAttributes(["test", 123]) f2 = QgsFeature() f2.setAttributes(["test", 124]) self.assertTrue(pr.addFeatures([f1, f2])) # Create a new auxiliary layer with 'pk' as key pkf = layer.fields().field(layer.fields().indexOf('fldint')) al = s.createAuxiliaryLayer(pkf, layer) self.assertTrue(al.isValid()) layer.setAuxiliaryLayer(al) prop = QgsPropertyDefinition() prop.setComment('test_field') prop.setDataType(QgsPropertyDefinition.DataTypeNumeric) prop.setOrigin('user') prop.setName('custom') self.assertTrue(al.addAuxiliaryField(prop)) layer.startEditing() i = 2 for feat in layer.getFeatures(): feat.setAttribute(2, i) layer.updateFeature(feat) i -= 1 layer.commitChanges() request = QgsFeatureRequest() request.setOrderBy(QgsFeatureRequest.OrderBy([QgsFeatureRequest.OrderByClause(layer.fields()[2].name(), True)])) ids = [] for feat in layer.getFeatures(request): ids.append(feat.id()) self.assertEqual(ids, [2, 1]) request.setOrderBy(QgsFeatureRequest.OrderBy([QgsFeatureRequest.OrderByClause(layer.fields()[2].name(), False)])) ids = [] for feat in layer.getFeatures(request): ids.append(feat.id()) self.assertEqual(ids, [1, 2]) QgsProject.instance().removeMapLayers([layer.id()])