[processing] Fix executing models

This commit is contained in:
Nyall Dawson 2017-05-01 17:00:10 +10:00
parent dde48b5597
commit ac84326464
8 changed files with 34 additions and 3 deletions

View File

@ -110,6 +110,8 @@ class QgsProcessingAlgorithm
:rtype: QgsProcessingProvider
%End
void setProvider( QgsProcessingProvider *provider );
private:
QgsProcessingAlgorithm( const QgsProcessingAlgorithm &other );
};

View File

@ -131,7 +131,11 @@ class Processing(object):
QgsMessageLog.logMessage(Processing.tr('Error: Algorithm {0} not found\n').format(algOrName),
Processing.tr("Processing"))
return
# hack - remove when getCopy is removed
provider = alg.provider()
alg = alg.getCopy()
#hack pt2
alg.setProvider(provider)
if len(args) == 1 and isinstance(args[0], dict):
# Set params by name and try to run the alg even if not all parameter values are provided,

View File

@ -73,6 +73,8 @@ class BatchAlgorithmDialog(AlgorithmDialogBase):
for row in range(self.mainWidget.tblParameters.rowCount()):
alg = self.alg.getCopy()
# hack - remove when getCopy is removed
alg.setProvider(self.alg.provider())
col = 0
for param in alg.parameters:
if param.hidden:

View File

@ -242,7 +242,11 @@ class ProcessingToolbox(BASE, WIDGET):
item = self.algorithmTree.currentItem()
if isinstance(item, TreeAlgorithmItem):
alg = QgsApplication.processingRegistry().algorithmById(item.alg.id())
#hack - remove when getCopy is removed
provider = alg.provider()
alg = alg.getCopy()
#hack pt 2
alg.setProvider(provider)
dlg = BatchAlgorithmDialog(alg)
dlg.show()
dlg.exec_()
@ -261,7 +265,12 @@ class ProcessingToolbox(BASE, WIDGET):
'be run :-( </h3>\n{0}').format(message))
dlg.exec_()
return
# temporary hack - TODO remove this getCopy when parameters are moved from algorithm
provider = alg.provider()
alg = alg.getCopy()
alg.setProvider(provider)
if (alg.getVisibleParametersCount() + alg.getVisibleOutputsCount()) > 0:
dlg = alg.getCustomParametersDialog()
if not dlg:

View File

@ -202,7 +202,13 @@ def _executeAlgorithm(alg):
'be run :-( </h3>\n{0}').format(message))
dlg.exec_()
return
# hack - remove when getCopy is removed
provider = alg.provider()
alg = alg.getCopy()
#hack pt 2
alg.setProvider(provider)
context = dataobjects.createContext()
if (alg.getVisibleParametersCount() + alg.getVisibleOutputsCount()) > 0:
dlg = alg.getCustomParametersDialog()

View File

@ -40,7 +40,10 @@ class EditModelAction(ContextAction):
return isinstance(self.itemData, ModelerAlgorithm)
def execute(self):
dlg = ModelerDialog(self.itemData.getCopy())
alg = self.itemData.getCopy()
#hack - remove when getCopy is removed
alg.setProvider(self.itemData.provider())
dlg = ModelerDialog(alg)
dlg.update_model.connect(self.updateModel)
dlg.show()

View File

@ -282,7 +282,11 @@ class ModelerDialog(BASE, WIDGET):
self.bar.pushMessage("", "Model doesn't contain any algorithm and/or parameter and can't be executed", level=QgsMessageBar.WARNING, duration=5)
return
# hack - remove when above getCopy is removed
provider = self.alg.provider()
alg = self.alg.getCopy()
# hack pt 2
alg.setProvider(provider)
dlg = AlgorithmDialog(alg)
dlg.exec_()

View File

@ -118,13 +118,14 @@ class CORE_EXPORT QgsProcessingAlgorithm
*/
QgsProcessingProvider *provider() const;
private:
/**
* Associates this algorithm with its provider. No transfer of ownership is involved.
*/
//TEMPORARY - remove when algorithms are no longer copied in python code
void setProvider( QgsProcessingProvider *provider );
private:
QgsProcessingProvider *mProvider = nullptr;
// friend class to access setProvider() - we do not want this public!