Ejemplo n.º 1
0
 def test_is_error_line(self):
     """
     Test is_error_line
     """
     self.assertFalse(JsUtils.is_error_line('xxx yyy'))
     self.assertTrue(JsUtils.is_error_line('Error something went wrong'))
     self.assertTrue(JsUtils.is_error_line('Execution halted'))
Ejemplo n.º 2
0
 def testDefaultScriptsFolder(self):
     """
     Tests default user scripts folder
     """
     self.assertTrue(JsUtils.default_scripts_folder())
     self.assertIn('rscripts', JsUtils.default_scripts_folder())
     self.assertTrue(os.path.exists(JsUtils.default_scripts_folder()))
Ejemplo n.º 3
0
 def testBuiltInPath(self):
     """
     Tests built in scripts path
     """
     self.assertTrue(JsUtils.builtin_scripts_folder())
     self.assertIn('builtin_scripts', JsUtils.builtin_scripts_folder())
     self.assertTrue(os.path.exists(JsUtils.builtin_scripts_folder()))
Ejemplo n.º 4
0
 def testScriptsFolders(self):
     """
     Test script folders
     """
     self.assertTrue(JsUtils.script_folders())
     self.assertIn(JsUtils.default_scripts_folder(),
                   JsUtils.script_folders())
     self.assertIn(JsUtils.builtin_scripts_folder(),
                   JsUtils.script_folders())
    def saveScript(self, saveAs):
        newPath = None
        if self.filePath is None or saveAs:
            scriptDir = JsUtils.default_scripts_folder()
            newPath, _ = QFileDialog.getSaveFileName(
                self, self.tr("Save script"), scriptDir,
                self.tr("Javascript files (*.js *.JS)"))

            if newPath:
                if not newPath.lower().endswith(".js"):
                    newPath += ".js"

                self.filePath = newPath

        if self.filePath:
            text = self.editor.text()
            try:
                with codecs.open(self.filePath, "w", encoding="utf-8") as f:
                    f.write(text)
            except IOError as e:
                QMessageBox.warning(
                    self, self.tr("I/O error"),
                    self.tr("Unable to save edits:\n{}").format(str(e)))
                return

            self.setHasChanged(False)

        QgsApplication.processingRegistry().providerById(
            "r").refreshAlgorithms()
Ejemplo n.º 6
0
    def loadAlgorithms(self):
        """
        Called when provider must populate its available algorithms
        """
        algs = []
        for f in JsUtils.script_folders():
            algs.extend(self.load_scripts_from_folder(f))

        for a in algs:
            self.addAlgorithm(a)
Ejemplo n.º 7
0
    def process_parameter_line(self, line):
        """
        Processes a single script line representing a parameter
        """
        value, _ = self.split_tokens(line)
        description = JsUtils.create_descriptive_name(value)

        output = create_output_from_string(line)
        if output is not None:
            output.setName(value)
            output.setDescription(description)
            if issubclass(output.__class__, QgsProcessingOutputDefinition):
                self.addOutput(output)
            else:
                # destination type parameter
                self.addParameter(output)
        else:
            line = JsUtils.upgrade_parameter_line(line)
            param = getParameterFromString(line)
            if param is not None:
                self.addParameter(param)
            else:
                self.error = self.tr('This script has a syntax error.\n'
                                     'Problem with line: {0}').format(line)
Ejemplo n.º 8
0
    def load(self):
        """
        Called when first loading provider
        """
        ProcessingConfig.settingIcons[self.name()] = self.icon()
        ProcessingConfig.addSetting(
            Setting(self.name(),
                    JsUtils.SCRIPTS_FOLDER,
                    self.tr('Javascript scripts folder'),
                    JsUtils.default_scripts_folder(),
                    valuetype=Setting.MULTIPLE_FOLDERS))

        ProviderActions.registerProviderActions(self, self.actions)
        ProviderContextMenuActions.registerProviderContextMenuActions(
            self.contextMenuActions)
        ProcessingConfig.readSettings()
        self.refreshAlgorithms()
        return True
    def openScript(self):
        if self.hasChanged:
            ret = QMessageBox.warning(
                self, self.tr("Unsaved changes"),
                self.tr("There are unsaved changes in the script. Continue?"),
                QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if ret == QMessageBox.No:
                return

        scriptDir = JsUtils.default_scripts_folder()
        fileName, _ = QFileDialog.getOpenFileName(
            self, self.tr("Open script"), scriptDir,
            self.tr("Javascript files (*.js *.JS)"))

        if fileName == "":
            return

        with OverrideCursor(Qt.WaitCursor):
            self._loadFile(fileName)
Ejemplo n.º 10
0
    def process_metadata_line(self, line):
        """
        Processes a "metadata" (##) line
        """
        line = line.replace('//#', '')

        # special commands
        #if line.lower().strip().startswith('dontuserasterpackage'):
        #    self.use_raster_package = False
        #    return

        value, type_ = self.split_tokens(line)
        if type_.lower().strip() == 'group':
            self._group = value
            return
        if type_.lower().strip() == 'name':
            self._name = self._display_name = value
            self._name = JsUtils.strip_special_characters(self._name.lower())
            return

        self.process_parameter_line(line)
Ejemplo n.º 11
0
    def __init__(self, description_file, script=None):
        super().__init__()

        self.script = script
        self.js_script = ''
        self.codec = None
        self.engine = None
        self.process_js_function = None
        self.json_exporter = None
        self.fields = None
        self._name = ''
        self._display_name = ''
        self._group = ''
        self.description_file = os.path.realpath(description_file) if description_file else None
        self.error = None
        self.commands = list()
        self.is_user_script = False
        if description_file:
            self.is_user_script = not description_file.startswith(JsUtils.builtin_scripts_folder())

        if self.script is not None:
            self.load_from_string()
        if self.description_file is not None:
            self.load_from_file()
Ejemplo n.º 12
0
 def testStripSpecialCharacters(self):
     """
     Tests stripping special characters from a name
     """
     self.assertEqual(JsUtils.strip_special_characters('aB 43 24a:sd'),
                      'aB4324asd')
Ejemplo n.º 13
0
 def testDescriptiveName(self):
     """
     Tests creating descriptive name
     """
     self.assertEqual(JsUtils.create_descriptive_name('a B_4324_asd'),
                      'a B 4324 asd')