@@ -145,98 +145,126 @@ def processParameterLine(self, line):
145
145
if tokens [1 ].lower ().strip () == 'name' :
146
146
self .name = self .i18n_name = tokens [0 ]
147
147
return
148
- if tokens [1 ].lower ().strip () == 'raster' :
149
- param = ParameterRaster (tokens [0 ], desc , False )
150
- elif tokens [1 ].lower ().strip () == 'vector' :
151
- param = ParameterVector (tokens [0 ], desc ,
148
+
149
+ if tokens [1 ].lower ().strip ().startswith ('output' ):
150
+ outToken = tokens [1 ].strip ()[len ('output' ) + 1 :]
151
+ out = self .processOutputParameterToken (outToken )
152
+
153
+ elif tokens [1 ].lower ().strip ().startswith ('optional' ):
154
+ optToken = tokens [1 ].strip ()[len ('optional' ) + 1 :]
155
+ param = self .processInputParameterToken (optToken , tokens [0 ])
156
+ if param :
157
+ param .optional = True
158
+
159
+ else :
160
+ param = self .processInputParameterToken (tokens [1 ], tokens [0 ])
161
+
162
+
163
+ if param is not None :
164
+ self .addParameter (param )
165
+ elif out is not None :
166
+ out .name = tokens [0 ]
167
+ out .description = desc
168
+ self .addOutput (out )
169
+ else :
170
+ raise WrongScriptException (
171
+ self .tr ('Could not load script: %s.\n '
172
+ 'Problem with line "%s"' , 'ScriptAlgorithm' ) % (self .descriptionFile or '' , line ))
173
+
174
+ def processInputParameterToken (self , token , name ):
175
+ param = None
176
+
177
+ descName = self .createDescriptiveName (name )
178
+
179
+ if token .lower ().strip () == 'raster' :
180
+ param = ParameterRaster (name , descName , False )
181
+ elif token .lower ().strip () == 'vector' :
182
+ param = ParameterVector (name , descName ,
152
183
[ParameterVector .VECTOR_TYPE_ANY ])
153
- elif tokens [ 1 ] .lower ().strip () == 'vector point' :
154
- param = ParameterVector (tokens [ 0 ], desc ,
184
+ elif token .lower ().strip () == 'vector point' :
185
+ param = ParameterVector (name , descName ,
155
186
[ParameterVector .VECTOR_TYPE_POINT ])
156
- elif tokens [ 1 ] .lower ().strip () == 'vector line' :
157
- param = ParameterVector (tokens [ 0 ], desc ,
187
+ elif token .lower ().strip () == 'vector line' :
188
+ param = ParameterVector (name , descName ,
158
189
[ParameterVector .VECTOR_TYPE_LINE ])
159
- elif tokens [ 1 ] .lower ().strip () == 'vector polygon' :
160
- param = ParameterVector (tokens [ 0 ], desc ,
190
+ elif token .lower ().strip () == 'vector polygon' :
191
+ param = ParameterVector (name , descName ,
161
192
[ParameterVector .VECTOR_TYPE_POLYGON ])
162
- elif tokens [ 1 ] .lower ().strip () == 'table' :
163
- param = ParameterTable (tokens [ 0 ], desc , False )
164
- elif tokens [ 1 ] .lower ().strip () == 'multiple raster' :
165
- param = ParameterMultipleInput (tokens [ 0 ], desc ,
193
+ elif token .lower ().strip () == 'table' :
194
+ param = ParameterTable (name , descName , False )
195
+ elif token .lower ().strip () == 'multiple raster' :
196
+ param = ParameterMultipleInput (name , descName ,
166
197
ParameterMultipleInput .TYPE_RASTER )
167
198
param .optional = False
168
- elif tokens [ 1 ] .lower ().strip () == 'multiple vector' :
169
- param = ParameterMultipleInput (tokens [ 0 ], desc ,
199
+ elif token .lower ().strip () == 'multiple vector' :
200
+ param = ParameterMultipleInput (name , descName ,
170
201
ParameterMultipleInput .TYPE_VECTOR_ANY )
171
202
param .optional = False
172
- elif tokens [ 1 ] .lower ().strip ().startswith ('selectionfromfile' ):
173
- options = tokens [ 1 ] .strip ()[len ('selectionfromfile ' ):].split (';' )
174
- param = ParameterSelection (tokens [ 0 ], desc , options , isSource = True )
175
- elif tokens [ 1 ] .lower ().strip ().startswith ('selection' ):
203
+ elif token .lower ().strip ().startswith ('selectionfromfile' ):
204
+ options = token .strip ()[len ('selectionfromfile ' ):].split (';' )
205
+ param = ParameterSelection (name , descName , options , isSource = True )
206
+ elif token .lower ().strip ().startswith ('selection' ):
176
207
options = tokens [1 ].strip ()[len ('selection ' ):].split (';' )
177
- param = ParameterSelection (tokens [ 0 ], desc , options )
178
- elif tokens [ 1 ] .lower ().strip ().startswith ('boolean' ):
179
- default = tokens [ 1 ] .strip ()[len ('boolean' ) + 1 :]
180
- param = ParameterBoolean (tokens [ 0 ], desc , default )
181
- elif tokens [ 1 ] .lower ().strip () == 'extent' :
182
- param = ParameterExtent (tokens [ 0 ], desc )
183
- elif tokens [ 1 ] .lower ().strip () == 'file' :
184
- param = ParameterFile (tokens [ 0 ], desc , False )
185
- elif tokens [ 1 ] .lower ().strip () == 'folder' :
186
- param = ParameterFile (tokens [ 0 ], desc , True )
187
- elif tokens [ 1 ] .lower ().strip ().startswith ('number' ):
188
- default = tokens [ 1 ] .strip ()[len ('number' ) + 1 :]
189
- param = ParameterNumber (tokens [ 0 ], desc , default = default )
190
- elif tokens [ 1 ] .lower ().strip ().startswith ('field' ):
191
- field = tokens [ 1 ] .strip ()[len ('field' ) + 1 :]
208
+ param = ParameterSelection (name , descName , options )
209
+ elif token .lower ().strip ().startswith ('boolean' ):
210
+ default = token .strip ()[len ('boolean' ) + 1 :]
211
+ param = ParameterBoolean (name , descName , default )
212
+ elif token .lower ().strip () == 'extent' :
213
+ param = ParameterExtent (name , descName )
214
+ elif token .lower ().strip () == 'file' :
215
+ param = ParameterFile (name , descName , False )
216
+ elif token .lower ().strip () == 'folder' :
217
+ param = ParameterFile (name , descName , True )
218
+ elif token .lower ().strip ().startswith ('number' ):
219
+ default = token .strip ()[len ('number' ) + 1 :]
220
+ param = ParameterNumber (name , descName , default = default )
221
+ elif token .lower ().strip ().startswith ('field' ):
222
+ field = token .strip ()[len ('field' ) + 1 :]
192
223
found = False
193
224
for p in self .parameters :
194
225
if p .name == field :
195
226
found = True
196
227
break
197
228
if found :
198
- param = ParameterTableField (tokens [ 0 ], desc , field )
199
- elif tokens [ 1 ] .lower ().strip ().startswith ('string' ):
200
- default = tokens [ 1 ] .strip ()[len ('string' ) + 1 :]
201
- param = ParameterString (tokens [ 0 ], desc , default )
202
- elif tokens [ 1 ] .lower ().strip ().startswith ('longstring' ):
203
- default = tokens [ 1 ] .strip ()[len ('longstring' ) + 1 :]
204
- param = ParameterString (tokens [ 0 ], desc , default , multiline = True )
205
- elif tokens [ 1 ] .lower ().strip ().startswith ('crs' ):
206
- default = tokens [ 1 ] .strip ()[len ('crs' ) + 1 :]
229
+ param = ParameterTableField (name , descName , field )
230
+ elif token .lower ().strip ().startswith ('string' ):
231
+ default = token .strip ()[len ('string' ) + 1 :]
232
+ param = ParameterString (name , descName , default )
233
+ elif token .lower ().strip ().startswith ('longstring' ):
234
+ default = token .strip ()[len ('longstring' ) + 1 :]
235
+ param = ParameterString (name , descName , default , multiline = True )
236
+ elif token .lower ().strip ().startswith ('crs' ):
237
+ default = token .strip ()[len ('crs' ) + 1 :]
207
238
if not default :
208
239
default = 'EPSG:4326'
209
- param = ParameterCrs (tokens [0 ], desc , default )
210
- elif tokens [1 ].lower ().strip ().startswith ('output raster' ):
240
+ param = ParameterCrs (name , descName , default )
241
+
242
+ return param
243
+
244
+ def processOutputParameterToken (self , token ):
245
+ out = None
246
+
247
+ if token .lower ().strip ().startswith ('raster' ):
211
248
out = OutputRaster ()
212
- elif tokens [ 1 ] .lower ().strip ().startswith ('output vector' ):
249
+ elif token .lower ().strip ().startswith ('vector' ):
213
250
out = OutputVector ()
214
- elif tokens [ 1 ] .lower ().strip ().startswith ('output table' ):
251
+ elif token .lower ().strip ().startswith ('table' ):
215
252
out = OutputTable ()
216
- elif tokens [ 1 ] .lower ().strip ().startswith ('output html' ):
253
+ elif token .lower ().strip ().startswith ('html' ):
217
254
out = OutputHTML ()
218
- elif tokens [ 1 ] .lower ().strip ().startswith ('output file' ):
255
+ elif token .lower ().strip ().startswith ('file' ):
219
256
out = OutputFile ()
220
- subtokens = tokens [ 1 ] .split (' ' )
257
+ subtokens = token .split (' ' )
221
258
if len (subtokens ) > 2 :
222
259
out .ext = subtokens [2 ]
223
- elif tokens [ 1 ] .lower ().strip ().startswith ('output directory' ):
260
+ elif token .lower ().strip ().startswith ('directory' ):
224
261
out = OutputDirectory ()
225
- elif tokens [ 1 ] .lower ().strip ().startswith ('output number' ):
262
+ elif token .lower ().strip ().startswith ('number' ):
226
263
out = OutputNumber ()
227
- elif tokens [ 1 ] .lower ().strip ().startswith ('output string' ):
264
+ elif token .lower ().strip ().startswith ('string' ):
228
265
out = OutputString ()
229
-
230
- if param is not None :
231
- self .addParameter (param )
232
- elif out is not None :
233
- out .name = tokens [0 ]
234
- out .description = desc
235
- self .addOutput (out )
236
- else :
237
- raise WrongScriptException (
238
- self .tr ('Could not load script: %s.\n '
239
- 'Problem with line "%s"' , 'ScriptAlgorithm' ) % (self .descriptionFile or '' , line ))
266
+
267
+ return out
240
268
241
269
def processDescriptionParameterLine (self , line ):
242
270
try :
0 commit comments