@@ -78,10 +78,7 @@ def processAlgorithm(self, progress):
78
78
da .setEllipsoid (QgsProject .instance ().readEntry (
79
79
'Measure' , '/Ellipsoid' , GEO_NONE )[0 ])
80
80
81
- exp_context = QgsExpressionContext ()
82
- exp_context .appendScope (QgsExpressionContextUtils .globalScope ())
83
- exp_context .appendScope (QgsExpressionContextUtils .projectScope ())
84
- exp_context .appendScope (QgsExpressionContextUtils .layerScope (layer ))
81
+ exp_context = layer .createExpressionContext ()
85
82
86
83
for field_def in mapping :
87
84
fields .append (QgsField (name = field_def ['name' ],
@@ -93,27 +90,20 @@ def processAlgorithm(self, progress):
93
90
expression .setGeomCalculator (da )
94
91
expression .setDistanceUnits (QgsProject .instance ().distanceUnits ())
95
92
expression .setAreaUnits (QgsProject .instance ().areaUnits ())
96
-
93
+ expression . prepare ( exp_context )
97
94
if expression .hasParserError ():
98
95
raise GeoAlgorithmExecutionException (
99
96
self .tr (u'Parser error in expression "{}": {}' )
100
- .format (str (field_def ['expression' ]),
101
- str (expression .parserErrorString ())))
102
- expression .prepare (exp_context )
103
- if expression .hasEvalError ():
104
- raise GeoAlgorithmExecutionException (
105
- self .tr (u'Evaluation error in expression "{}": {}' )
106
- .format (str (field_def ['expression' ]),
107
- str (expression .evalErrorString ())))
97
+ .format (unicode (expression .expression ()),
98
+ unicode (expression .parserErrorString ())))
108
99
expressions .append (expression )
109
100
110
101
writer = output .getVectorWriter (fields ,
111
102
layer .wkbType (),
112
103
layer .crs ())
113
104
114
105
# Create output vector layer with new attributes
115
- error = ''
116
- calculationSuccess = True
106
+ error_exp = None
117
107
inFeat = QgsFeature ()
118
108
outFeat = QgsFeature ()
119
109
features = vector .features (layer )
@@ -132,8 +122,7 @@ def processAlgorithm(self, progress):
132
122
exp_context .lastScope ().setVariable ("row_number" , rownum )
133
123
value = expression .evaluate (exp_context )
134
124
if expression .hasEvalError ():
135
- calculationSuccess = False
136
- error = expression .evalErrorString ()
125
+ error_exp = expression
137
126
break
138
127
139
128
attrs .append (value )
@@ -145,7 +134,8 @@ def processAlgorithm(self, progress):
145
134
146
135
del writer
147
136
148
- if not calculationSuccess :
137
+ if error_exp is not None :
149
138
raise GeoAlgorithmExecutionException (
150
- self .tr ('An error occurred while evaluating the calculation'
151
- ' string:\n ' ) + error )
139
+ self .tr (u'Evaluation error in expression "{}": {}' )
140
+ .format (unicode (error_exp .expression ()),
141
+ unicode (error_exp .parserErrorString ())))
0 commit comments