def __init__(self, resourceType): super(GetScriptsAndModelsDialog, self).__init__(iface.mainWindow()) self.setupUi(self) self.manager = QgsNetworkAccessManager.instance() self.resourceType = resourceType if self.resourceType == self.MODELS: self.folder = ModelerUtils.modelsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/models/' self.icon = QIcon(os.path.join(pluginPath, 'images', 'model.png')) elif self.resourceType == self.SCRIPTS: self.folder = ScriptUtils.scriptsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/scripts/' self.icon = QIcon(os.path.join(pluginPath, 'images', 'script.png')) else: self.folder = RUtils.RScriptsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/rscripts/' self.icon = QIcon(os.path.join(pluginPath, 'images', 'r.png')) self.lastSelectedItem = None self.updateToolbox = False self.populateTree() self.buttonBox.accepted.connect(self.okPressed) self.buttonBox.rejected.connect(self.cancelPressed) self.tree.currentItemChanged.connect(self.currentItemChanged)
def openScript(self): if self.hasChanged: ret = QMessageBox.warning(self, self.tr('Unsaved changes'), self.tr('There are unsaved changes in script. Continue?'), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if ret == QMessageBox.No: return if self.algType == self.SCRIPT_PYTHON: scriptDir = ScriptUtils.scriptsFolder() filterName = self.tr('Python scripts (*.py)') elif self.algType == self.SCRIPT_R: scriptDir = RUtils.RScriptsFolder() filterName = self.tr('Processing R script (*.rsx)') self.filename = QFileDialog.getOpenFileName( self, self.tr('Save script'), scriptDir, filterName) QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) with codecs.open(self.filename, 'r', encoding='utf-8') as f: txt = f.read() self.editor.setText(txt) self.hasChanged = False self.editor.setModified(False) self.editor.recolor() QApplication.restoreOverrideCursor()
def execute(self): filename = str(QFileDialog.getSaveFileName(None, "Save Script", ScriptUtils.scriptsFolder(), "Python scripts (*.py)")) if filename: if not filename.endswith(".py"): filename += ".py" text = self.translateToPythonCode(self.alg) try: fout = open(filename, "w") fout.write(text) fout.close() if filename.replace("\\","/").startswith(ScriptUtils.scriptsFolder().replace("\\","/")): self.toolbox.updateTree() except: QMessageBox.warning(self, self.tr("I/O error"), self.tr("Unable to save edits. Reason:\n %1").arg(unicode(sys.exc_info()[1])) )
def execute(self): filename = str(QFileDialog.getSaveFileName(None, 'Save Script', ScriptUtils.scriptsFolder(), 'Python scripts (*.py)')) if filename: if not filename.endswith('.py'): filename += '.py' text = self.translateToPythonCode(self.alg) try: fout = open(filename, 'w') fout.write(text) fout.close() if filename.replace('\\', '/').startswith( ScriptUtils.scriptsFolder().replace('\\', '/')): self.toolbox.updateProvider('script') except: QMessageBox.warning(self, self.tr('I/O error'), self.tr('Unable to save edits. Reason:\n %s') % unicode(sys.exc_info()[1]))
def execute(self): filename = QtGui.QFileDialog.getOpenFileName(self.toolbox, 'Script files', None, '*.py') if filename: try: script = ScriptAlgorithm(filename) except WrongScriptException: QtGui.QMessageBox.warning(self.toolbox, "Error reading script", "The selected file does not contain a valid script") return destFilename = os.path.join(ScriptUtils.scriptsFolder(), os.path.basename(filename)) with open(destFilename) as f: f.write(script.script) self.toolbox.updateProvider('script')
def saveScript(self, saveAs): if self.filename is None or saveAs: if self.algType == self.SCRIPT_PYTHON: scriptDir = ScriptUtils.scriptsFolder() filterName = self.tr("Python scripts (*.py)") elif self.algType == self.SCRIPT_R: scriptDir = RUtils.RScriptsFolder() filterName = self.tr("Processing R script (*.rsx)") self.filename = unicode(QFileDialog.getSaveFileName(self, self.tr("Save script"), scriptDir, filterName )) if self.filename: if self.algType == self.SCRIPT_PYTHON and not self.filename.lower().endswith(".py"): self.filename += ".py" if self.algType == self.SCRIPT_R and not self.filename.lower().endswith(".rsx"): self.filename += ".rsx" text = unicode(self.editor.text()) if self.alg is not None: self.alg.script = text try: fout = open(self.filename, "w") fout.write(text) fout.close() except IOError: QMessageBox.warning(self, self.tr("I/O error"), self.tr("Unable to save edits. Reason:\n %1").arg(unicode(sys.exc_info()[1])) ) return self.update = True # if help strings were defined before saving the script for the first # time, we do it here if self.help: f = open(self.filename + ".help", "wb") pickle.dump(self.help, f) f.close() self.help = None QMessageBox.information(self, self.tr("Script saving"), self.tr("Script was correctly saved.") ) else: self.filename = None
def saveScript(self, saveAs): if self.filename is None or saveAs: if self.algType == self.SCRIPT_PYTHON: scriptDir = ScriptUtils.scriptsFolder() filterName = self.tr('Python scripts (*.py)') elif self.algType == self.SCRIPT_R: scriptDir = RUtils.RScriptsFolder() filterName = self.tr('Processing R script (*.rsx)') self.filename = unicode(QFileDialog.getSaveFileName(self, self.tr('Save script'), scriptDir, filterName)) if self.filename: if self.algType == self.SCRIPT_PYTHON \ and not self.filename.lower().endswith('.py'): self.filename += '.py' if self.algType == self.SCRIPT_R \ and not self.filename.lower().endswith('.rsx'): self.filename += '.rsx' text = unicode(self.editor.text()) if self.alg is not None: self.alg.script = text try: fout = open(self.filename, 'w') fout.write(text) fout.close() except IOError: QMessageBox.warning(self, self.tr('I/O error'), self.tr('Unable to save edits. Reason:\n %1') % unicode(sys.exc_info()[1])) return self.update = True # If help strings were defined before saving the script for # the first time, we do it here if self.help: f = open(self.filename + '.help', 'wb') pickle.dump(self.help, f) f.close() self.help = None QMessageBox.information(self, self.tr('Script saving'), self.tr('Script was correctly saved.')) else: self.filename = None
def __init__(self, resourceType): QDialog.__init__(self, iface.mainWindow()) self.resourceType = resourceType if self.resourceType == self.MODELS: self.folder = ModelerUtils.modelsFolder() self.urlBase = "https://raw.githubusercontent.com/qgis/QGIS-Processing/master/models/" self.icon = QtGui.QIcon(os.path.dirname(__file__) + '/../images/model.png') else: self.folder = ScriptUtils.scriptsFolder() self.urlBase = "https://raw.githubusercontent.com/qgis/QGIS-Processing/master/scripts/" self.icon = QtGui.QIcon(os.path.dirname(__file__) + '/../images/script.png') self.lastSelectedItem = None self.setupUi(self) self.populateTree() self.updateToolbox = False self.buttonBox.accepted.connect(self.okPressed) self.buttonBox.rejected.connect(self.cancelPressed) self.tree.currentItemChanged .connect(self.currentItemChanged)
def saveScript(self, saveAs): if self.filename is None or saveAs: if self.algType == self.SCRIPT_PYTHON: scriptDir = ScriptUtils.scriptsFolder() filterName = self.tr('Python scripts (*.py)') elif self.algType == self.SCRIPT_R: scriptDir = RUtils.RScriptsFolder() filterName = self.tr('Processing R script (*.rsx)') self.filename = unicode(QFileDialog.getSaveFileName(self, self.tr('Save script'), scriptDir, filterName)) if self.filename: if self.algType == self.SCRIPT_PYTHON and \ not self.filename.lower().endswith('.py'): self.filename += '.py' if self.algType == self.SCRIPT_R and \ not self.filename.lower().endswith('.rsx'): self.filename += '.rsx' text = unicode(self.editor.text()) if self.alg is not None: self.alg.script = text try: with codecs.open(self.filename, 'w', encoding='utf-8') as fout: fout.write(text) except IOError: QMessageBox.warning(self, self.tr('I/O error'), self.tr('Unable to save edits. Reason:\n %s') % unicode(sys.exc_info()[1]) ) return self.update = True # If help strings were defined before saving the script for # the first time, we do it here if self.help: with open(self.filename + '.help', 'w') as f: json.dump(self.help, f) self.help = None self.setHasChanged(False) else: self.filename = None
def saveScript(self, saveAs): if self.filename is None or saveAs: if self.algType == self.SCRIPT_PYTHON: scriptDir = ScriptUtils.scriptsFolder() filterName = self.tr("Python scripts (*.py)") elif self.algType == self.SCRIPT_R: scriptDir = RUtils.RScriptsFolder() filterName = self.tr("Processing R script (*.rsx)") self.filename = unicode(QFileDialog.getSaveFileName(self, self.tr("Save script"), scriptDir, filterName)) if self.filename: if self.algType == self.SCRIPT_PYTHON and not self.filename.lower().endswith(".py"): self.filename += ".py" if self.algType == self.SCRIPT_R and not self.filename.lower().endswith(".rsx"): self.filename += ".rsx" text = unicode(self.editor.text()) if self.alg is not None: self.alg.script = text try: with codecs.open(self.filename, "w", encoding="utf-8") as fout: fout.write(text) except IOError: QMessageBox.warning( self, self.tr("I/O error"), self.tr("Unable to save edits. Reason:\n %s") % unicode(sys.exc_info()[1]), ) return self.update = True # If help strings were defined before saving the script for # the first time, we do it here if self.help: f = open(self.filename + ".help", "wb") pickle.dump(self.help, f) f.close() self.help = None self.setHasChanged(False) else: self.filename = None
def execute(self): settings = QSettings() lastDir = settings.value('Processing/lastScriptsDir', '') filename = QFileDialog.getOpenFileName(self.toolbox, self.tr('Script files', 'AddScriptFromFileAction'), lastDir, self.tr('Script files (*.py *.PY)', 'AddScriptFromFileAction')) if filename: try: settings.setValue('Processing/lastScriptsDir', QFileInfo(filename).absoluteDir().absolutePath()) script = ScriptAlgorithm(filename) except WrongScriptException: QMessageBox.warning(self.toolbox, self.tr('Error reading script', 'AddScriptFromFileAction'), self.tr('The selected file does not contain a valid script', 'AddScriptFromFileAction')) return destFilename = os.path.join(ScriptUtils.scriptsFolder(), os.path.basename(filename)) with open(destFilename, 'w') as f: f.write(script.script) self.toolbox.updateProvider('script')
def __init__(self, resourceType): QDialog.__init__(self, iface.mainWindow()) self.resourceType = resourceType if self.resourceType == self.MODELS: self.folder = ModelerUtils.modelsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/models/' self.icon = QtGui.QIcon( os.path.dirname(__file__) + '/../images/model.png') else: self.folder = ScriptUtils.scriptsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/scripts/' self.icon = QtGui.QIcon( os.path.dirname(__file__) + '/../images/script.png') self.lastSelectedItem = None self.setupUi(self) self.populateTree() self.updateToolbox = False self.buttonBox.accepted.connect(self.okPressed) self.buttonBox.rejected.connect(self.cancelPressed) self.tree.currentItemChanged.connect(self.currentItemChanged)
def __init__(self, resourceType): super(GetScriptsAndModelsDialog, self).__init__(iface.mainWindow()) self.setupUi(self) self.resourceType = resourceType if self.resourceType == self.MODELS: self.folder = ModelerUtils.modelsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/models/' self.icon = QIcon(os.path.join(pluginPath, 'images', 'model.png')) else: self.folder = ScriptUtils.scriptsFolder() self.urlBase = 'https://raw.githubusercontent.com/qgis/QGIS-Processing/master/scripts/' self.icon = QIcon(os.path.join(pluginPath, 'images', 'script.png')) self.lastSelectedItem = None self.populateTree() self.updateToolbox = False self.buttonBox.accepted.connect(self.okPressed) self.buttonBox.rejected.connect(self.cancelPressed) self.tree.currentItemChanged.connect(self.currentItemChanged)
def execute(self): filename = QFileDialog.getOpenFileName( self.toolbox, self.tr("Script files", "AddScriptFromFileAction"), None, self.tr("Script files (*.py *.PY)", "AddScriptFromFileAction"), ) if filename: try: script = ScriptAlgorithm(filename) except WrongScriptException: QMessageBox.warning( self.toolbox, self.tr("Error reading script", "AddScriptFromFileAction"), self.tr("The selected file does not contain a valid script", "AddScriptFromFileAction"), ) return destFilename = os.path.join(ScriptUtils.scriptsFolder(), os.path.basename(filename)) with open(destFilename, "w") as f: f.write(script.script) self.toolbox.updateProvider("script")
def execute(self): filename = QFileDialog.getOpenFileName( self.toolbox, self.tr('Script files', 'AddScriptFromFileAction'), None, self.tr('Script files (*.py *.PY)', 'AddScriptFromFileAction')) if filename: try: script = ScriptAlgorithm(filename) except WrongScriptException: QMessageBox.warning( self.toolbox, self.tr('Error reading script', 'AddScriptFromFileAction'), self.tr( 'The selected file does not contain a valid script', 'AddScriptFromFileAction')) return destFilename = os.path.join(ScriptUtils.scriptsFolder(), os.path.basename(filename)) with open(destFilename, 'w') as f: f.write(script.script) self.toolbox.updateProvider('script')
def _loadAlgorithms(self): folder = ScriptUtils.scriptsFolder() self.loadFromFolder(folder) folder = os.path.join(os.path.dirname(__file__), 'scripts') self.loadFromFolder(folder)
def initializeSettings(self): AlgorithmProvider.initializeSettings(self) ProcessingConfig.addSetting( Setting(self.getDescription(), ScriptUtils.SCRIPTS_FOLDER, 'Scripts folder', ScriptUtils.scriptsFolder()))
def initializeSettings(self): AlgorithmProvider.initializeSettings(self) ProcessingConfig.addSetting(Setting(self.getDescription(), ScriptUtils.SCRIPTS_FOLDER, self.tr('Scripts folder', 'ScriptAlgorithmProvider'), ScriptUtils.scriptsFolder(), valuetype=Setting.FOLDER))
def _loadAlgorithms(self): folder = ScriptUtils.scriptsFolder() self.algs = ScriptUtils.loadFromFolder(folder)
# set global variables __location__ = os.path.realpath( os.path.join(os.getcwd(), os.path.dirname(__file__))) test_dir = os.path.join(__location__, "testdata") file_path = os.path.abspath( os.path.join(__location__, "..", "scripts", "add_area_column.py")) # Set up test layers test_layer = QgsVectorLayer(r"{}/BQ31.shp".format(test_dir), "BQ31", "ogr") if not test_layer.isValid(): raise ImportError("Reference Layer failed to load!") # QGIS 2.14 has ScriptUtils.scriptsFolder() if QGis.QGIS_VERSION_INT < 21800: copy(file_path, ScriptUtils.scriptsFolder()) # QGIS 2.18 has ScriptUtils.scriptsFolders() elif QGis.QGIS_VERSION_INT >= 21800: copy(file_path, ScriptUtils.scriptsFolders()[0]) plugins["processing"].toolbox.updateProvider("script") Processing.initialize() # QGIS 2.14 has Processing.updateAlgsList() if QGis.QGIS_VERSION_INT < 21800: Processing.updateAlgsList() # QGIS 2.18 has algList.reloadProvider(("script") elif QGis.QGIS_VERSION_INT >= 21800: from processing.core.alglist import algList algList.reloadProvider("script")
def saveAlgorithm(self): if self.filename is None: self.filename = str(QtGui.QFileDialog.getSaveFileName(self, "Save Script", ScriptUtils.scriptsFolder(), "Python scripts (*.py)")) if self.filename: if not self.filename.endswith(".py"): self.filename += ".py" text = self.text.text() if self.alg is not None: self.alg.script = text try: fout = open(self.filename, "w") fout.write(text) fout.close() except: QMessageBox.warning(self, self.tr("I/O error"), self.tr("Unable to save edits. Reason:\n %1").arg(unicode(sys.exc_info()[1])) ) return self.update = True #if help strings were defined before saving the model for the first time, we do it here if self.help: f = open(self.filename + ".help", "wb") pickle.dump(self.help, f) f.close() self.help = None QtGui.QMessageBox.information(self, "Script saving", "Script was correctly saved.") else: self.filename = None
def initializeSettings(self): AlgorithmProvider.initializeSettings(self) ProcessingConfig.addSetting(Setting(self.getDescription(), ScriptUtils.SCRIPTS_FOLDER, 'Scripts folder', ScriptUtils.scriptsFolder()))