def testMultiRasterIn(self):
        """
        Test raster multilayer input parameter
        """
        alg = RAlgorithm(description_file=os.path.join(
            test_data_path, 'test_multirasterin.rsx'))
        alg.initAlgorithm()
        raster_param = alg.parameterDefinition('Layer')
        self.assertEqual(raster_param.type(), 'multilayer')
        self.assertEqual(raster_param.layerType(), QgsProcessing.TypeRaster)

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {
                'Layer': [
                    os.path.join(test_data_path, 'dem.tif'),
                    os.path.join(test_data_path, 'dem2.tif')
                ]
            }, context, feedback)
        self.assertEqual(script, [
            'tempvar0 <- brick("{}")'.format(
                os.path.join(test_data_path,
                             'dem.tif')), 'tempvar1 <- brick("{}")'.format(
                                 os.path.join(test_data_path, 'dem2.tif')),
            'Layer = list(tempvar0,tempvar1)'
        ])
        script = alg.build_import_commands({'Layer': []}, context, feedback)
        self.assertEqual(script, ['Layer = list()'])
    def testMultiVectorIn(self):
        """
        Test vector multilayer input parameter
        """
        alg = RAlgorithm(description_file=os.path.join(
            test_data_path, 'test_multivectorin.rsx'))
        alg.initAlgorithm()
        param = alg.parameterDefinition('Layer')
        self.assertEqual(param.type(), 'multilayer')
        self.assertEqual(param.layerType(),
                         QgsProcessing.TypeVectorAnyGeometry)

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {
                'Layer': [
                    os.path.join(test_data_path, 'lines.shp'),
                    os.path.join(test_data_path, 'points.gml')
                ]
            }, context, feedback)
        self.assertEqual(script, [
            'tempvar0 <- readOGR("{}")'.format(
                os.path.join(test_data_path,
                             'lines.shp')), 'tempvar1 <- readOGR("{}")'.format(
                                 os.path.join(test_data_path, 'points.gml')),
            'Layer = list(tempvar0,tempvar1)'
        ])
        script = alg.build_import_commands({'Layer': []}, context, feedback)
        self.assertEqual(script, ['Layer = list()'])
    def testEnums(self):
        """
        Test for both enum types
        """
        alg = RAlgorithm(
            description_file=os.path.join(test_data_path, 'test_enums.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()

        script = alg.build_import_commands({'enum_normal': 0}, context,
                                           feedback)
        self.assertIn('enum_normal <- 0', script)
        script = alg.build_import_commands({'enum_string': 0}, context,
                                           feedback)
        self.assertIn('enum_string <- "enum_a"', script)
Exemplo n.º 4
0
    def testReadOgr(self):
        """
        Test reading vector inputs
        """
        alg = RAlgorithm(
            description_file=os.path.join(test_data_path, 'test_vectorin.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {'Layer': os.path.join(test_data_path, 'lines.shp')}, context,
            feedback)
        self.assertEqual(
            script,
            ['Layer=readOGR("{}",layer="lines")'.format(test_data_path)])
        script = alg.build_import_commands(
            {
                'Layer':
                os.path.join(test_data_path, 'lines.shp').replace('/', '\\')
            }, context, feedback)
        self.assertEqual(
            script,
            ['Layer=readOGR("{}",layer="lines")'.format(test_data_path)])
        vl = QgsVectorLayer(
            os.path.join(test_data_path, 'test_gpkg.gpkg') +
            '|layername=points')
        self.assertTrue(vl.isValid())
        script = alg.build_import_commands({'Layer': vl}, context, feedback)
        self.assertEqual(script, [
            'Layer=readOGR("{}",layer="points")'.format(
                os.path.join(test_data_path, 'test_gpkg.gpkg'))
        ])
        vl = QgsVectorLayer(
            os.path.join(test_data_path, 'test_gpkg.gpkg') +
            '|layername=lines')
        self.assertTrue(vl.isValid())
        script = alg.build_import_commands({'Layer': vl}, context, feedback)
        self.assertEqual(script, [
            'Layer=readOGR("{}",layer="lines")'.format(
                os.path.join(test_data_path, 'test_gpkg.gpkg'))
        ])
    def testMultiFieldIn(self):
        """
        Test multiple field input parameter
        """
        alg = RAlgorithm(description_file=os.path.join(
            test_data_path, 'test_field_multiple.rsx'))
        alg.initAlgorithm()
        param = alg.parameterDefinition('MultiField')
        self.assertEqual(param.type(), 'field')
        self.assertTrue(param.allowMultiple())

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {'Layer': os.path.join(test_data_path, 'lines.shp')}, context,
            feedback)
        self.assertEqual(script, [
            'Layer <- readOGR("{}")'.format(
                os.path.join(test_data_path, 'lines.shp')),
            'MultiField <- NULL'
        ])
        script = alg.build_import_commands(
            {
                'Layer': os.path.join(test_data_path, 'lines.shp'),
                'MultiField': ['a']
            }, context, feedback)
        self.assertEqual(script, [
            'Layer <- readOGR("{}")'.format(
                os.path.join(test_data_path, 'lines.shp')),
            'MultiField <- c("a")'
        ])
        script = alg.build_import_commands(
            {
                'Layer': os.path.join(test_data_path, 'lines.shp'),
                'MultiField': ['a', 'b"c']
            }, context, feedback)
        self.assertEqual(script, [
            'Layer <- readOGR("{}")'.format(
                os.path.join(test_data_path, 'lines.shp')),
            'MultiField <- c("a","b\\"c")'
        ])
Exemplo n.º 6
0
    def testInputs(self):
        """
        Test creation of script with algorithm inputs
        """
        alg = RAlgorithm(description_file=os.path.join(test_data_path,
                                                       'test_algorithm_2.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()

        # enum evaluation
        script = alg.build_import_commands({'in_enum': 0}, context, feedback)
        self.assertIn('in_enum=0', script)

        # boolean evaluation
        script = alg.build_import_commands({'in_bool': True}, context,
                                           feedback)
        self.assertIn('in_bool=TRUE', script)
        script = alg.build_import_commands({'in_bool': False}, context,
                                           feedback)
        self.assertIn('in_bool=FALSE', script)

        # number evaluation
        script = alg.build_import_commands({'in_number': None}, context,
                                           feedback)
        self.assertIn('in_number=NULL', script)
        script = alg.build_import_commands({'in_number': 5}, context, feedback)
        self.assertIn('in_number=5.0', script)
        script = alg.build_import_commands({'in_number': 5.5}, context,
                                           feedback)
        self.assertIn('in_number=5.5', script)
    def testRasterIn(self):
        """
        Test reading raster inputs
        """
        alg = RAlgorithm(
            description_file=os.path.join(test_data_path, 'test_rasterin.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {'Layer': os.path.join(test_data_path, 'dem.tif')}, context,
            feedback)
        self.assertEqual(script, [
            'Layer <- brick("{}")'.format(
                os.path.join(test_data_path, 'dem.tif'))
        ])
        script = alg.build_import_commands(
            {
                'Layer': os.path.join(test_data_path, 'dem.tif').replace(
                    '/', '\\')
            }, context, feedback)
        self.assertEqual(script, [
            'Layer <- brick("{}")'.format(
                os.path.join(test_data_path, 'dem.tif'))
        ])
        script = alg.build_import_commands({'Layer': None}, context, feedback)
        self.assertEqual(script, ['Layer <- NULL'])

        alg = RAlgorithm(description_file=os.path.join(
            test_data_path, 'test_rasterin_names.rsx'))
        alg.initAlgorithm()
        script = alg.build_import_commands(
            {'Layer': os.path.join(test_data_path, 'dem.tif')}, context,
            feedback)
        self.assertEqual(
            script,
            ['Layer <- "{}"'.format(os.path.join(test_data_path, 'dem.tif'))])
        script = alg.build_import_commands({'Layer': None}, context, feedback)
        self.assertEqual(script, ['Layer <- NULL'])

        alg = RAlgorithm(description_file=os.path.join(
            test_data_path, 'test_rasterin_norasterpackage.rsx'))
        alg.initAlgorithm()
        script = alg.build_import_commands(
            {'Layer': os.path.join(test_data_path, 'dem.tif')}, context,
            feedback)
        self.assertEqual(script, [
            'Layer <- readGDAL("{}")'.format(
                os.path.join(test_data_path, 'dem.tif'))
        ])
        script = alg.build_import_commands({'Layer': None}, context, feedback)
        self.assertEqual(script, ['Layer <- NULL'])
    def testAlgRasterBand(self):
        """
        Test datetime parameter
        """

        alg = RAlgorithm(description_file=os.path.join(test_data_path,
                                                       'test_raster_band.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {
                'Band': 1,
                'Layer': os.path.join(test_data_path, 'dem.tif')
            }, context, feedback)
        self.assertIn('Band <- 1', script)
    def testEnumsMultiple(self):
        """
        Test for both enum multiple types
        """
        alg = RAlgorithm(description_file=os.path.join(
            test_data_path, 'test_enum_multiple.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()

        script = alg.build_import_commands(
            {
                'enum_normal': [0, 1],
                'enum_string': [0, 1]
            }, context, feedback)
        self.assertIn('enum_normal <- c(0, 1)', script)
        self.assertIn('enum_string <- c("enum_a","enum_b")', script)
Exemplo n.º 10
0
    def testReadOgr(self):
        """
        Test reading vector inputs
        """
        alg = RAlgorithm(
            description_file=os.path.join(test_data_path, 'test_vectorin.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()
        script = alg.build_import_commands(
            {'Layer': os.path.join(test_data_path, 'lines.shp')}, context,
            feedback)

        USE_NEW_API = Qgis.QGIS_VERSION_INT >= 30900 and hasattr(
            QgsProcessingAlgorithm,
            'parameterAsCompatibleSourceLayerPathAndLayerName')
        if USE_NEW_API:
            self.assertEqual(
                script[0], 'Layer <- readOGR("{}")'.format(
                    os.path.join(test_data_path, 'lines.shp')))
        else:
            self.assertEqual(
                script[0], 'Layer <- readOGR("{}")'.format(
                    os.path.join(test_data_path, 'lines.shp')))
        script = alg.build_import_commands(
            {
                'Layer':
                os.path.join(test_data_path, 'lines.shp').replace('/', '\\')
            }, context, feedback)
        if USE_NEW_API:
            self.assertEqual(
                script[0], 'Layer <- readOGR("{}")'.format(
                    os.path.join(test_data_path, 'lines.shp')))
        else:
            self.assertEqual(
                script[0], 'Layer <- readOGR("{}")'.format(
                    os.path.join(test_data_path, 'lines.shp')))
        vl = QgsVectorLayer(
            os.path.join(test_data_path, 'test_gpkg.gpkg') +
            '|layername=points')
        self.assertTrue(vl.isValid())
        vl2 = QgsVectorLayer(
            os.path.join(test_data_path, 'test_gpkg.gpkg') +
            '|layername=lines')
        self.assertTrue(vl2.isValid())
        script = alg.build_import_commands({
            'Layer': vl,
            'Layer2': vl2
        }, context, feedback)

        if USE_NEW_API:
            # use the newer api and avoid unnecessary layer translation
            self.assertEqual(script, [
                'Layer <- readOGR("{}", layer="points")'.format(
                    os.path.join(test_data_path, 'test_gpkg.gpkg')),
                'Layer2 <- readOGR("{}", layer="lines")'.format(
                    os.path.join(test_data_path, 'test_gpkg.gpkg'))
            ])
        else:
            # older version, forced to use inefficient api
            self.assertIn('Layer <- readOGR("/tmp', script[0])
            self.assertIn('Layer2 <- readOGR("/tmp', script[1])
Exemplo n.º 11
0
    def testInputs(self):
        """
        Test creation of script with algorithm inputs
        """
        alg = RAlgorithm(description_file=os.path.join(test_data_path,
                                                       'test_algorithm_2.rsx'))
        alg.initAlgorithm()

        context = QgsProcessingContext()
        feedback = QgsProcessingFeedback()

        # enum evaluation
        script = alg.build_import_commands({'in_enum': 0}, context, feedback)
        self.assertIn('in_enum <- 0', script)

        # boolean evaluation
        script = alg.build_import_commands({'in_bool': True}, context,
                                           feedback)
        self.assertIn('in_bool <- TRUE', script)
        script = alg.build_import_commands({'in_bool': False}, context,
                                           feedback)
        self.assertIn('in_bool <- FALSE', script)

        # number evaluation
        script = alg.build_import_commands({'in_number': None}, context,
                                           feedback)
        self.assertIn('in_number <- NULL', script)
        script = alg.build_import_commands({'in_number': 5}, context, feedback)
        self.assertIn('in_number <- 5.0', script)
        script = alg.build_import_commands({'in_number': 5.5}, context,
                                           feedback)
        self.assertIn('in_number <- 5.5', script)

        # folder destination
        script = alg.build_import_commands(
            {'param_folder_dest': '/tmp/processing/test_algorithm_2_r/'},
            context, feedback)

        # file destination
        script = alg.build_import_commands(
            {
                'param_html_dest':
                '/tmp/processing/test_algorithm_2_r/dest.html'
            }, context, feedback)
        self.assertIn(
            'param_html_dest <- "/tmp/processing/test_algorithm_2_r/dest.html"',
            script)
        script = alg.build_import_commands(
            {
                'param_file_dest':
                '/tmp/processing/test_algorithm_2_r/dest.file'
            }, context, feedback)
        self.assertIn(
            'param_file_dest <- "/tmp/processing/test_algorithm_2_r/dest.file"',
            script)
        script = alg.build_import_commands(
            {'param_csv_dest': '/tmp/processing/test_algorithm_2_r/dest.csv'},
            context, feedback)
        self.assertIn(
            'param_csv_dest <- "/tmp/processing/test_algorithm_2_r/dest.csv"',
            script)