<div dir="ltr">Hi all,<div><br></div><div>Noticed some strange behaviour in QGIS' Python API the other day.</div><div>I needed to get a subset of points from a memory layer of point features, and had previously done so by calling <font face="monospace">getFeatures()</font>, and then filtering this iterable in Python. I thought I could speed it up by using a filter expression directly to let c++ do the filtering instead, but was surprised to see that now the geometry wasn't up to date with the memory layer's edit buffer.</div><div><br></div><div>I've replicated the behaviour it in a small script here:</div><div><br></div><div><font face="monospace">from qgis.core import QgsVectorLayer, QgsField, QgsGeometry, QgsPointXY, QgsFeature<br>from PyQt5.QtCore import QVariant<br><br>layer = QgsVectorLayer("Point", "test", "memory")<br>pr = layer.dataProvider()<br>pr.addAttributes([QgsField("name", QVariant.String)])<br>layer.updateFields()<br><br>initialGeom = QgsGeometry.fromPointXY(QgsPointXY(0, 0))<br>f = QgsFeature()<br>f.setGeometry(initialGeom)<br>f.setAttributes(["Tom"])<br>added, (f,) = layer.dataProvider().addFeatures([f])<br><br>layer.startEditing()<br>editedGeom = QgsGeometry.fromPointXY(QgsPointXY(1, 1))<br>layer.changeGeometry(<a href="http://f.id">f.id</a>(), editedGeom)<br>layer.changeAttributeValues(<a href="http://f.id">f.id</a>(), {0: "Harry"})<br><br>for f in layer.getFeatures():<br>    print(<a href="http://f.id">f.id</a>(), f.attributes(), f.geometry())<br><br>for f in layer.getFeatures("name = 'Harry'"):<br>    print(<a href="http://f.id">f.id</a>(), f.attributes(), f.geometry())<br><br># >>> Prints different results!</font><br></div><div><br></div><div>This only seems to happen with both calls to <font face="monospace">changeGeometry</font> and <font face="monospace">changeAttributeValues</font>.</div><div>Is there some way of getting around this? Would it be classified as a bug in the API?</div><div><br></div><div>Cheers,</div><div>Erik</div></div>