Пример #1
0
    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)
Пример #2
0
    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()
Пример #3
0
    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]))
                                   )
Пример #4
0
    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]))
Пример #5
0
 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')
Пример #6
0
    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
Пример #7
0
    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
Пример #8
0
 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)
Пример #9
0
    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
Пример #10
0
    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
Пример #11
0
 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')
Пример #12
0
 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)
Пример #13
0
    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)
Пример #14
0
 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')
Пример #15
0
 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")
Пример #16
0
 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')
Пример #17
0
 def _loadAlgorithms(self):
     folder = ScriptUtils.scriptsFolder()
     self.loadFromFolder(folder)
     folder = os.path.join(os.path.dirname(__file__), 'scripts')
     self.loadFromFolder(folder)
Пример #18
0
 def initializeSettings(self):
     AlgorithmProvider.initializeSettings(self)
     ProcessingConfig.addSetting(
         Setting(self.getDescription(), ScriptUtils.SCRIPTS_FOLDER,
                 'Scripts folder', ScriptUtils.scriptsFolder()))
Пример #19
0
 def initializeSettings(self):
     AlgorithmProvider.initializeSettings(self)
     ProcessingConfig.addSetting(Setting(self.getDescription(),
                                 ScriptUtils.SCRIPTS_FOLDER,
                                 self.tr('Scripts folder', 'ScriptAlgorithmProvider'),
                                 ScriptUtils.scriptsFolder(), valuetype=Setting.FOLDER))
Пример #20
0
 def _loadAlgorithms(self):
     folder = ScriptUtils.scriptsFolder()
     self.algs = ScriptUtils.loadFromFolder(folder)
Пример #21
0
 def initializeSettings(self):
     AlgorithmProvider.initializeSettings(self)
     ProcessingConfig.addSetting(Setting(self.getDescription(),
                                         ScriptUtils.SCRIPTS_FOLDER,
                                         self.tr('Scripts folder', 'ScriptAlgorithmProvider'),
                                         ScriptUtils.scriptsFolder(), valuetype=Setting.FOLDER))
Пример #22
0
# 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")
Пример #23
0
    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
Пример #24
0
 def _loadAlgorithms(self):
     folder = ScriptUtils.scriptsFolder()
     self.algs = ScriptUtils.loadFromFolder(folder)
Пример #25
0
 def initializeSettings(self):
     AlgorithmProvider.initializeSettings(self)
     ProcessingConfig.addSetting(Setting(self.getDescription(),
                                 ScriptUtils.SCRIPTS_FOLDER,
                                 'Scripts folder',
                                 ScriptUtils.scriptsFolder()))
Пример #26
0
 def _loadAlgorithms(self):
     folder = ScriptUtils.scriptsFolder()
     self.loadFromFolder(folder)
     folder = os.path.join(os.path.dirname(__file__), 'scripts')
     self.loadFromFolder(folder)