Skip to content

Commit

Permalink
Merge pull request #36618 from alexbruy/grass-tempfile
Browse files Browse the repository at this point in the history
[processing] fix handling for stdout and file outputs in GRASS
  • Loading branch information
alexbruy committed May 24, 2020
2 parents d73eaa1 + 938dc61 commit 585db64
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 12 deletions.
27 changes: 15 additions & 12 deletions python/plugins/processing/algs/grass7/Grass7Algorithm.py
Expand Up @@ -116,6 +116,7 @@ def __init__(self, descriptionfile):
self.commands = []
self.outputCommands = []
self.exportedLayers = {}
self.fileOutputs = {}
self.descriptionFile = descriptionfile

# Default GRASS parameters
Expand Down Expand Up @@ -398,6 +399,7 @@ def processAlgorithm(self, original_parameters, context, feedback):
self.commands = []
self.outputCommands = []
self.exportedLayers = {}
self.fileOutputs = {}

# If GRASS session has been created outside of this algorithm then
# get the list of layers loaded in GRASS otherwise start a new
Expand Down Expand Up @@ -442,9 +444,15 @@ def processAlgorithm(self, original_parameters, context, feedback):
for out in self.outputDefinitions():
outName = out.name()
if outName in parameters:
outputs[outName] = parameters[outName]
if outName in self.fileOutputs:
print('ADD', outName)
print('VAL', parameters[outName])
print('VAL 2', self.fileOutputs[outName])
outputs[outName] = self.fileOutputs[outName]
else:
outputs[outName] = parameters[outName]
if isinstance(out, QgsProcessingOutputHtml):
self.convertToHtml(parameters[outName])
self.convertToHtml(self.fileOutputs[outName])

return outputs

Expand Down Expand Up @@ -643,23 +651,18 @@ def processCommand(self, parameters, context, feedback, delOutputs=False):
# For File destination
if isinstance(out, QgsProcessingParameterFileDestination):
if outName in parameters and parameters[outName] is not None:
outPath = self.parameterAsFileOutput(parameters, outName, context)
self.fileOutputs[outName] = outPath
# for HTML reports, we need to redirect stdout
if out.defaultFileExtension().lower() == 'html':
if outName == 'html':
# for "fake" outputs redirect command stdout
command += ' > "{}"'.format(
self.parameterAsFileOutput(
parameters, outName, context)
)
command += ' > "{}"'.format(outPath)
else:
# for real outputs only output itself should be redirected
command += ' {}=- > "{}"'.format(
outName,
self.parameterAsFileOutput(parameters, outName, context))
command += ' {}=- > "{}"'.format(outName, outPath)
else:
command += ' {}="{}"'.format(
outName,
self.parameterAsFileOutput(parameters, outName, context))
command += ' {}="{}"'.format(outName, outPath)
# For folders destination
elif isinstance(out, QgsProcessingParameterFolderDestination):
# We need to add a unique temporary basename
Expand Down
1 change: 1 addition & 0 deletions python/plugins/processing/algs/grass7/ext/i_cluster.py
Expand Up @@ -41,6 +41,7 @@ def processCommand(alg, parameters, context, feedback):

# Re-add signature files
parameters['signaturefile'] = signatureFile
alg.fileOutputs['signaturefile'] = signatureFile

# Export signature file
exportSigFile(alg, group, subgroup, signatureFile)
1 change: 1 addition & 0 deletions python/plugins/processing/algs/grass7/ext/i_gensig.py
Expand Up @@ -37,6 +37,7 @@ def processCommand(alg, parameters, context, feedback):

# Re-add signature files
parameters['signaturefile'] = signatureFile
alg.fileOutputs['signaturefile'] = signatureFile

# Export signature file
exportSigFile(alg, group, subgroup, signatureFile)
1 change: 1 addition & 0 deletions python/plugins/processing/algs/grass7/ext/i_gensigset.py
Expand Up @@ -37,6 +37,7 @@ def processCommand(alg, parameters, context, feedback):

# Re-add signature files
parameters['signaturefile'] = signatureFile
alg.fileOutputs['signaturefile'] = signatureFile

# Export signature file
exportSigFile(alg, group, subgroup, signatureFile, 'sigset')

0 comments on commit 585db64

Please sign in to comment.