def testOpenIteratorAfterLayerRemoval(self): """ Test that removing layer after opening an iterator does not crash. All required information should be captured in the iterator's source and there MUST be no links between the iterators and the layer's data provider """ if not getattr(self, 'getEditableLayer', None): return l = self.getEditableLayer() self.assertTrue(l.isValid()) # store the source source = QgsVectorLayerFeatureSource(l) # delete the layer del l # get the features pks = [] for f in source.getFeatures(): pks.append(f['pk']) self.assertEqual(set(pks), {1, 2, 3, 4, 5})
def testOpenIteratorAfterLayerRemoval(self): """ Test that removing layer after opening an iterator does not crash. All required information should be captured in the iterator's source and there MUST be no links between the iterators and the layer's data provider """ if not getattr(self, 'getEditableLayer', None): return l = self.getEditableLayer() self.assertTrue(l.isValid()) # store the source source = QgsVectorLayerFeatureSource(l) # delete the layer del l # get the features pks = [] for f in source.getFeatures(): pks.append(f['pk']) self.assertEqual(set(pks), {1, 2, 3, 4, 5})
def createRenderer(self) -> QgsSingleSymbolRenderer: # pylint: disable=missing-function-docstring filtering = SettingsRegistry.label_filtering() topological = self.topological and self.layer.selectedFeatureCount( ) == 2 if filtering == SettingsRegistry.LABEL_NONE: return QgsNullSymbolRenderer() if filtering == SettingsRegistry.LABEL_SELECTED: if self.feature_id is None or self.vertex_number is None: # labeling selected vertex only, and no selection => no renderer return QgsNullSymbolRenderer() selection = {self.feature_id} vertex_number = self.vertex_number else: selection = self.layer.selectedFeatureIds() vertex_number = None if topological: request = QgsFeatureRequest().setFilterFids( self.layer.selectedFeatureIds()).setNoAttributes() topological_geometries = { f.id(): f.geometry() for f in self.layer.getFeatures(request) } else: topological_geometries = None layer_source = QgsVectorLayerFeatureSource(self.layer) return VertexHighlighterRenderer( source=layer_source, layer_type=self.layer_type, selection=selection, vertex_number=vertex_number, topological_geometries=topological_geometries, )