def createDataItem(self, path, parentItem): file_info = QFileInfo(path) if file_info.suffix().lower() == 'model3': alg = QgsProcessingModelAlgorithm() if alg.fromFile(path): return ProcessingModelItem(parentItem, alg.name(), path) return None
def loadModel(self, filename): alg = QgsProcessingModelAlgorithm() if alg.fromFile(filename): self.model = alg self.model.setProvider(QgsApplication.processingRegistry().providerById('model')) self.textGroup.setText(alg.group()) self.textName.setText(alg.name()) self.repaintModel() self.view.centerOn(0, 0) self.hasChanged = False else: QgsMessageLog.logMessage(self.tr('Could not load model {0}').format(filename), self.tr('Processing'), Qgis.Critical) QMessageBox.critical(self, self.tr('Open Model'), self.tr('The selected model could not be loaded.\n' 'See the log for more information.'))
def read_project(self, doc): """ Reads the project model definitions from the project DOM document :param doc: DOM document """ self.model_definitions = {} project_models_nodes = doc.elementsByTagName('projectModels') if project_models_nodes: project_models_node = project_models_nodes.at(0) model_nodes = project_models_node.childNodes() for n in range(model_nodes.count()): model_element = model_nodes.at(n).toElement() definition = QgsXmlUtils.readVariant(model_element) algorithm = QgsProcessingModelAlgorithm() if algorithm.loadVariant(definition): self.model_definitions[algorithm.name()] = definition self.refreshAlgorithms()
def remove_model(self, model): """ Removes a model from the project :type model: QgsProcessingModelAlgorithm :param model: model to remove """ if model is None: return filtered_model_definitions = [] for m in self.model_definitions: algorithm = QgsProcessingModelAlgorithm() if algorithm.loadVariant(m) and algorithm.name() == model.name(): # found matching model definition, skip it continue filtered_model_definitions.append(m) self.model_definitions = filtered_model_definitions self.refreshAlgorithms()
def loadFromFolder(self, folder): if not os.path.exists(folder): return for path, subdirs, files in os.walk(folder): for descriptionFile in files: if descriptionFile.endswith('model3'): try: fullpath = os.path.join(path, descriptionFile) alg = QgsProcessingModelAlgorithm() if alg.fromFile(fullpath): if alg.name(): alg.setSourceFilePath(fullpath) self.algs.append(alg) else: QgsMessageLog.logMessage(self.tr('Could not load model {0}', 'ModelerAlgorithmProvider').format(descriptionFile), self.tr('Processing'), QgsMessageLog.CRITICAL) except WrongModelException as e: QgsMessageLog.logMessage(self.tr('Could not load model {0}\n{1}', 'ModelerAlgorithmProvider').format(descriptionFile, e.msg), self.tr('Processing'), QgsMessageLog.CRITICAL)
def loadFromFolder(self, folder): if not os.path.exists(folder): return for path, subdirs, files in os.walk(folder): for descriptionFile in files: if descriptionFile.endswith('model3'): try: fullpath = os.path.join(path, descriptionFile) alg = QgsProcessingModelAlgorithm() if alg.fromFile(fullpath): if alg.name(): alg.setSourceFilePath(fullpath) self.algs.append(alg) else: QgsMessageLog.logMessage(self.tr('Could not load model {0}', 'ModelerAlgorithmProvider').format(descriptionFile), self.tr('Processing'), Qgis.Critical) except WrongModelException as e: QgsMessageLog.logMessage(self.tr('Could not load model {0}\n{1}', 'ModelerAlgorithmProvider').format(descriptionFile, str(e)), self.tr('Processing'), Qgis.Critical)
def loadModel(self, filename): alg = QgsProcessingModelAlgorithm() if alg.fromFile(filename): self.model = alg self.model.setProvider( QgsApplication.processingRegistry().providerById('model')) self.textGroup.setText(alg.group()) self.textName.setText(alg.name()) self.repaintModel() self.view.centerOn(0, 0) self.hasChanged = False else: QgsMessageLog.logMessage( self.tr('Could not load model {0}').format(filename), self.tr('Processing'), Qgis.Critical) QMessageBox.critical( self, self.tr('Open Model'), self.tr('The selected model could not be loaded.\n' 'See the log for more information.'))
def openModel(self): filename, selected_filter = QFileDialog.getOpenFileName(self, self.tr('Open Model'), ModelerUtils.modelsFolders()[0], self.tr('Processing models (*.model3 *.MODEL3)')) if filename: alg = QgsProcessingModelAlgorithm() if alg.fromFile(filename): self.model = alg self.model.setProvider(QgsApplication.processingRegistry().providerById('model')) self.textGroup.setText(alg.group()) self.textName.setText(alg.name()) self.repaintModel() self.view.centerOn(0, 0) self.hasChanged = False else: QgsMessageLog.logMessage(self.tr('Could not load model {0}').format(filename), self.tr('Processing'), QgsMessageLog.CRITICAL) QMessageBox.critical(self, self.tr('Could not open model'), self.tr('The selected model could not be loaded.\n' 'See the log for more information.'))