Exemplo n.º 1
0
 def test_constructor(self):
     """Runs class constructor checks."""
     # name and set of parameters are mandatory, even if they're invalid
     self.assertRaises(Exception, DsgToolsProcessingModel)
     self.assertRaises(Exception, DsgToolsProcessingModel, parameters={})
     self.assertRaises(Exception, DsgToolsProcessingModel, name="")
     model = DsgToolsProcessingModel({}, "Invalid model")
     self.assertFalse(model.isValid())
     self.assertEquals(model.name(), "Invalid model")
Exemplo n.º 2
0
 def hasInvalidModel(self):
     """
     Checks if any of the nested models is invalid.
     :return: (bool) if there are invalid models.
     """
     models = dict()
     for modelName, modelParam in self._param["models"].items():
         model = DsgToolsProcessingModel(modelParam, modelName)
         if not model.isValid():
             return True
     return False
Exemplo n.º 3
0
 def invalidModels(self):
     """
     Returns all valid models from workflow parameters.
     :return: (dict) models maps invalid models to their invalidation reason.
     """
     models = dict()
     self._multiStepFeedback = QgsProcessingMultiStepFeedback(
         len(self._param["models"]), self.feedback)
     self._multiStepFeedback.setCurrentStep(0)
     for modelName, modelParam in self._param["models"].items():
         model = DsgToolsProcessingModel(modelParam,
                                         modelName,
                                         feedback=self._multiStepFeedback)
         if not model.isValid():
             models[modelName] = model.validateParameters(modelParam)
     return models
Exemplo n.º 4
0
 def validModels(self):
     """
     Returns all valid models from workflow parameters.
     :return: (dict) models maps to valid and invalid models.
     """
     models = dict()
     self._multiStepFeedback = QgsProcessingMultiStepFeedback(
         len(self._param["models"]), self.feedback)
     self._multiStepFeedback.setCurrentStep(0)
     for idx, (modelName,
               modelParam) in enumerate(self._param["models"].items()):
         model = DsgToolsProcessingModel(modelParam,
                                         modelName,
                                         feedback=self._multiStepFeedback)
         if model.isValid():
             models[modelName] = model
         self._modelOrderMap[modelName] = idx
     return models
Exemplo n.º 5
0
 def models(self):
     """
     Model parameters defined to run in this workflow.
     :return: (dict) models maps to valid and invalid models.
     """
     models = {"valid": dict(), "invalid": dict()}
     self._multiStepFeedback = QgsProcessingMultiStepFeedback(
         len(self._param["models"]), self.feedback)
     self._multiStepFeedback.setCurrentStep(0)
     for modelName, modelParam in self._param["models"].items():
         model = DsgToolsProcessingModel(modelParam,
                                         modelName,
                                         feedback=self._multiStepFeedback)
         if not model.isValid():
             models["invalid"][modelName] = model.validateParameters(
                 modelParam)
         else:
             models["valid"][modelName] = model
     return models
Exemplo n.º 6
0
 def validateParameters(self, parameters):
     """
     Validates a set of parameters for a valid Workflow.
     :param parameters: (dict) map of workflow attributes to be validated.
     :return: (str) invalidation reason.
     """
     if "displayName" not in parameters or not parameters["displayName"]:
         # this is not a mandatory item, but it defaults to a value
         parameters["displayName"] = self.tr("DSGTools Validation Workflow")
     if "models" not in parameters or not parameters["models"]:
         return self.tr("Workflow seems to have no models associated with it.")
     for modelName, modelParam in parameters["models"].items():
         model=DsgToolsProcessingModel(modelParam, modelName)
         if not model.isValid():
             return self.tr("Model {model} is invalid: '{reason}'.").format(
                 model=modelName, reason=model.validateParameters(modelParam)
             )
     # if "flagLayer" not in parameters or not parameters["flagLayer"]:
     #     self.tr("No flag layer was provided.")
     # if "historyLayer" not in parameters or not parameters["historyLayer"]:
     #     self.tr("No history layer was provided.")
     return ""
Exemplo n.º 7
0
 def importWorkflow(self, filepath):
     """
     Sets workflow contents from an imported DSGTools Workflow dump file.
     :param filepath: (str) workflow file to be imported.
     """
     with open(filepath, "r", encoding="utf-8") as f:
         xml = json.load(f)
     workflow = QualityAssuranceWorkflow(xml)
     self.clear()
     self.setWorkflowAuthor(workflow.author())
     self.setWorkflowVersion(workflow.version())
     self.setWorkflowName(workflow.displayName())
     for row, modelParam in enumerate(xml["models"].values()):
         self.setModelToRow(row, DsgToolsProcessingModel(modelParam, ""))