Refactor fields configuration in the modeler does not insist on layer

Inside the modeler, there is not enough knowledge about the layer on
which the refactor fields algorithm will run.
Let's be graceful with error messages here therefore.
This commit is contained in:
Matthias Kuhn 2017-12-12 14:35:10 +01:00
parent 3abff0e938
commit b619dcb00a
2 changed files with 10 additions and 7 deletions

View File

@ -137,8 +137,8 @@ class FieldsMapper(QgisFeatureBasedAlgorithm):
if expression.hasParserError():
raise QgsProcessingException(
self.tr(u'Parser error in expression "{}": {}')
.format(str(expression.expression()),
str(expression.parserErrorString())))
.format(expression.expression(),
expression.parserErrorString()))
self.expressions.append(expression)
return True
@ -160,8 +160,8 @@ class FieldsMapper(QgisFeatureBasedAlgorithm):
if expression.hasEvalError():
raise QgsProcessingException(
self.tr(u'Evaluation error in expression "{}": {}')
.format(str(expression.expression()),
str(expression.parserErrorString())))
.format(expression.expression(),
expression.parserErrorString()))
attributes.append(value)
feature.setAttributes(attributes)
self._row_number += 1

View File

@ -225,8 +225,7 @@ class FieldsMappingModel(QAbstractTableModel):
self._mapping = []
if layer is not None:
dp = layer.dataProvider()
for field in dp.fields():
for field in layer.fields():
self._mapping.append(self.newField(field))
self.endResetModel()
@ -263,6 +262,7 @@ class ExpressionDelegate(QStyledItemDelegate):
editor.registerExpressionContextGenerator(index.model().contextGenerator())
editor.fieldChanged.connect(self.on_expression_fieldChange)
editor.setAutoFillBackground(True)
editor.setAllowEvalErrors(self.parent().dialogType == DIALOG_MODELER)
return editor
def setEditorData(self, editor, index):
@ -303,6 +303,7 @@ class FieldsMappingPanel(BASE, WIDGET):
self.layerCombo.setAllowEmptyLayer(True)
self.layerCombo.setFilters(QgsMapLayerProxyModel.VectorLayer)
self.dialogType = None
def configure(self):
self.model = FieldsMappingModel()
@ -472,7 +473,9 @@ class FieldsMappingWidgetWrapper(WidgetWrapper):
self._layer = None
def createWidget(self):
return FieldsMappingPanel()
panel = FieldsMappingPanel()
panel.dialogType = self.dialogType
return panel
def postInitialize(self, wrappers):
for wrapper in wrappers: