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

View File

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