def testStringToSafeFilename(self):
     self.assertEqual(
         QgsFileUtils.stringToSafeFilename('my FiLe v2.0_new.tif'),
         'my FiLe v2.0_new.tif')
     self.assertEqual(
         QgsFileUtils.stringToSafeFilename(
             'rendered map_final? rev (12-03-1017)_real/\\?%*:|"<>.tif'),
         'rendered map_final_ rev (12-03-1017)_real__________.tif')
Exemplo n.º 2
0
    def test_represent_file_size(self):
        """
        Test QgsFileUtils.representFileSize
        """

        self.assertEqual(QgsFileUtils.representFileSize(1023), '1023 B')
        self.assertEqual(QgsFileUtils.representFileSize(1024), '1 KB')
        self.assertEqual(QgsFileUtils.representFileSize(1048576), '1.00 MB')
        self.assertEqual(QgsFileUtils.representFileSize(9876543210), '9.20 GB')
Exemplo n.º 3
0
 def testStringToSafeFilename(self):
     self.assertEqual(
         QgsFileUtils.stringToSafeFilename('my FiLe v2.0_new.tif'),
         'my FiLe v2.0_new.tif')
     self.assertEqual(
         QgsFileUtils.stringToSafeFilename(
             'rendered map_final? rev (12-03-1017)_real@#$&*#%&*$!!@$%^&(*(.tif'
         ),
         'rendered map_final_ rev _12-03-1017__real____________________.tif'
     )
Exemplo n.º 4
0
 def testAddExtensionFromFilter(self):
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test', 'TIFF Files (*.tif)'),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test', 'TIFF Files (*.tif)'),
         'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', ''),
                      'test.tif')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test.tif',
                                             'BMP Files (*.bmp)'),
         'test.tif.bmp')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test.tif',
                                             'TIFF Files (*.tiff)'),
         'test.tif.tiff')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test.tif',
                                             'TIFF Files (*.tif *.tiff)'),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test.tif',
                                             'TIFF Files (*.TIF *.TIFF)'),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test.tif', 'All Files (*.*)'),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.addExtensionFromFilter('test', 'All Files (*.*)'),
         'test')
Exemplo n.º 5
0
    def test_sidecar_files_for_path(self):
        """
        Test QgsFileUtils.sidecarFilesForPath
        """
        # file which doesn't exist
        self.assertFalse(QgsFileUtils.sidecarFilesForPath('/not a valid path'))
        # a directory
        self.assertFalse(QgsFileUtils.sidecarFilesForPath(unitTestDataPath()))
        # not a spatial data file
        self.assertFalse(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/kbs.qgs'))

        # shapefile
        self.assertEqual(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/lines.shp'),
                         {f'{unitTestDataPath()}/lines.shx', f'{unitTestDataPath()}/lines.dbf',
                          f'{unitTestDataPath()}/lines.prj'})
        # gpkg
        self.assertFalse(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/mixed_layers.gpkg'))

        # MapInfo TAB file
        self.assertEqual(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/ogr_types.tab'),
                         {f'{unitTestDataPath()}/ogr_types.dat', f'{unitTestDataPath()}/ogr_types.id',
                          f'{unitTestDataPath()}/ogr_types.map'})

        # GML
        self.assertEqual(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/invalidgeometries.gml'),
                         {f'{unitTestDataPath()}/invalidgeometries.gfs'})

        # netcdf
        self.assertEqual(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/landsat2.nc'),
                         {f'{unitTestDataPath()}/landsat2.nc.aux.xml'})
        # tif
        self.assertEqual(QgsFileUtils.sidecarFilesForPath(f'{unitTestDataPath()}/ALLINGES_RGF93_CC46_1_1.tif'),
                         {f'{unitTestDataPath()}/ALLINGES_RGF93_CC46_1_1.tfw'})
Exemplo n.º 6
0
 def testExtensionsFromFilter(self):
     self.assertEqual(QgsFileUtils.extensionsFromFilter(''), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('bad'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('*'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('*.'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('Tiff files'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('(*.)'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('PNG Files (*.png)'), ['png'])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('PNG Files (*.PNG)'), ['PNG'])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('Geotiff Files (*.tiff *.tif)'), ['tiff', 'tif'])
Exemplo n.º 7
0
 def testExtensionsFromFilter(self):
     self.assertEqual(QgsFileUtils.extensionsFromFilter(''), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('bad'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('*'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('*.'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('Tiff files'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('(*.)'), [])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('PNG Files (*.png)'), ['png'])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('PNG Files (*.PNG)'), ['PNG'])
     self.assertEqual(QgsFileUtils.extensionsFromFilter('Geotiff Files (*.tiff *.tif)'), ['tiff', 'tif'])
Exemplo n.º 8
0
 def testAddExtensionFromFilter(self):
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test', 'TIFF Files (*.tif)'), 'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test', 'TIFF Files (*.tif)'), 'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', ''), 'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', 'BMP Files (*.bmp)'), 'test.tif.bmp')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', 'TIFF Files (*.tiff)'), 'test.tif.tiff')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', 'TIFF Files (*.tif *.tiff)'), 'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', 'TIFF Files (*.TIF *.TIFF)'), 'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test.tif', 'All Files (*.*)'), 'test.tif')
     self.assertEqual(QgsFileUtils.addExtensionFromFilter('test', 'All Files (*.*)'), 'test')
Exemplo n.º 9
0
    def testAutoFinder(self):
        temp_folder = tempfile.mkdtemp()
        base_folder = os.path.join(temp_folder, 'base_level')
        os.mkdir(base_folder)
        side_fold = os.path.join(temp_folder, 'sidefold')
        os.mkdir(side_fold)
        nest = os.path.join(base_folder, 'direct_nest')
        os.mkdir(nest)
        side_nest = os.path.join(side_fold, 'side_nest')
        os.mkdir(side_nest)
        filename = "findme.txt"

        # unexisting
        files = QgsFileUtils.findFile(filename, nest, 1, 4)
        self.assertEqual(len(files), 0)
        # out of depth
        files = QgsFileUtils.findFile(filename, nest, 0, 4)
        self.assertEqual(len(files), 0)
        # too close
        files = QgsFileUtils.findFile(filename, nest, 1, 13)
        self.assertEqual(len(files), 0)
        # side nest
        with open(os.path.join(side_nest, filename), 'w+'):
            files = QgsFileUtils.findFile(os.path.join(base_folder, filename))
            self.assertEqual(
                files[0],
                os.path.join(side_nest, filename).replace(os.sep, '/'))
        # side + side nest  =  2
        with open(os.path.join(side_fold, filename), 'w+'):
            files = QgsFileUtils.findFile(filename, base_folder, 3, 4)
            self.assertEqual(len(files), 2)
        # up
        with open(os.path.join(temp_folder, filename), 'w+'):
            files = QgsFileUtils.findFile(filename, base_folder, 3, 4)
            self.assertEqual(
                files[0],
                os.path.join(temp_folder, filename).replace(os.sep, '/'))
        # nest
        with open(os.path.join(nest, filename), 'w+'):
            files = QgsFileUtils.findFile(os.path.join(base_folder, filename))
            self.assertEqual(files[0],
                             os.path.join(nest, filename).replace(os.sep, '/'))
        # base level
        with open(os.path.join(base_folder, filename), 'w+'):
            files = QgsFileUtils.findFile(filename, base_folder, 2, 4)
            self.assertEqual(
                files[0],
                os.path.join(base_folder, filename).replace(os.sep, '/'))
        # invalid path, too deep
        files = QgsFileUtils.findFile(filename, os.path.join(nest, 'nest2'), 2,
                                      4)
        self.assertEqual(files[0],
                         os.path.join(nest, filename).replace(os.sep, '/'))
Exemplo n.º 10
0
    def object_to_qlr(
            obj,
            input_file,
            output_path,
            context: Context,
            use_relative_paths: bool = False) -> Tuple[bool, Optional[str]]:
        """
        Converts an ESRI object to QLR
        """

        root_node, _ = LayerConverter.object_to_layers_and_tree(
            obj, input_file, context)

        output_path = QgsFileUtils.ensureFileNameHasExtension(
            output_path, ['qlr'])

        file = QFile(output_path)
        if not file.open(QFile.WriteOnly | QFile.Truncate):
            return False, file.errorString()

        rw_context = QgsReadWriteContext()
        if not use_relative_paths:
            rw_context.setPathResolver(QgsPathResolver())
        else:
            rw_context.setPathResolver(QgsPathResolver(output_path))

        doc = QDomDocument("qgis-layer-definition")
        res, error = QgsLayerDefinition.exportLayerDefinition(
            doc, root_node.children(), rw_context)
        if res:
            stream = QTextStream(file)
            doc.save(stream, 2)
            return True, None

        return res, error
Exemplo n.º 11
0
    def _export_service(self):
        service_type = self.get_current_service_type()
        service_id = self.get_current_service_id(service_type)
        file, _ = QFileDialog.getSaveFileName(self, self.tr('Export Service'),
                                              QDir.homePath() + '/{}.json'.format(service_id), 'JSON Files (*.json)')
        if not file:
            return

        file = QgsFileUtils.ensureFileNameHasExtension(file, ['json'])

        if SERVICE_MANAGER.export_service(service_type, service_id, file):
            self.message_bar.pushMessage(
                self.tr("Service exported"), Qgis.Success, 5)
        else:
            self.message_bar.pushMessage(
                self.tr("An error occurred while exporting service"), Qgis.Critical, 5)
Exemplo n.º 12
0
 def testSplitPathToComponents(self):
     self.assertEqual(
         QgsFileUtils.splitPathToComponents('/home/user/Pictures/test.png'),
         ["/", "home", "user", "Pictures", "test.png"])
     self.assertEqual(
         QgsFileUtils.splitPathToComponents('/home/user/Pictures/'),
         ["/", "home", "user", "Pictures"])
     self.assertEqual(
         QgsFileUtils.splitPathToComponents('/home/user/Pictures'),
         ["/", "home", "user", "Pictures"])
     self.assertEqual(QgsFileUtils.splitPathToComponents('/home/user'),
                      ["/", "home", "user"])
     self.assertEqual(QgsFileUtils.splitPathToComponents('/home'),
                      ["/", "home"])
     self.assertEqual(QgsFileUtils.splitPathToComponents('/'), ["/"])
     self.assertEqual(QgsFileUtils.splitPathToComponents(''), [])
     self.assertEqual(QgsFileUtils.splitPathToComponents('c:/home/user'),
                      ["c:", "home", "user"])
Exemplo n.º 13
0
    def _save_column_mapping(self):
        """
        Exports the current column mapping to a JSON definition file
        """
        config = RegistryConfig()
        prev_folder = config.read(["LastImportConfigFolder"]).get("LastImportConfigFolder")
        if not prev_folder:
            prev_folder = QDir.homePath()

        dest_path, _ = QFileDialog.getSaveFileName(self, self.tr("Save Configuration"),
                                                   prev_folder,
                                                   "{0} (*.json)".format(self.tr('Configuration files')))

        if not dest_path:
            return

        dest_path = QgsFileUtils.ensureFileNameHasExtension(dest_path, ['.json'])

        config.write({"LastImportConfigFolder": QFileInfo(dest_path).path()})

        with open(dest_path, 'wt') as f:
            f.write(json.dumps(self._get_column_config(), indent=4))
Exemplo n.º 14
0
Arquivo: console.py Projeto: t0b3/QGIS
    def saveAsScriptFile(self, index=None):
        tabWidget = self.tabEditorWidget.currentWidget()
        if not index:
            index = self.tabEditorWidget.currentIndex()
        if not tabWidget.path:
            fileName = self.tabEditorWidget.tabText(index).replace('*',
                                                                   '') + '.py'
            folder = self.settings.value("pythonConsole/lastDirPath",
                                         QDir.homePath())
            pathFileName = os.path.join(folder, fileName)
            fileNone = True
        else:
            pathFileName = tabWidget.path
            fileNone = False
        saveAsFileTr = QCoreApplication.translate("PythonConsole",
                                                  "Save File As")
        filename, filter = QFileDialog.getSaveFileName(self, saveAsFileTr,
                                                       pathFileName,
                                                       "Script file (*.py)")
        if filename:
            filename = QgsFileUtils.ensureFileNameHasExtension(
                filename, ['py'])

            try:
                tabWidget.save(filename)
            except (IOError, OSError) as error:
                msgText = QCoreApplication.translate(
                    'PythonConsole',
                    'The file <b>{0}</b> could not be saved. Error: {1}'
                ).format(tabWidget.path, error.strerror)
                self.callWidgetMessageBarEditor(msgText, 2, False)
                if fileNone:
                    tabWidget.path = None
                else:
                    tabWidget.path = pathFileName
                return

            if not fileNone:
                self.updateTabListScript(pathFileName, action='remove')
Exemplo n.º 15
0
 def testFileMatchesFilter(self):
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif', ''))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif', 'bad'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif', '*'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif', '*.'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif', 'Tiff files'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif', '(*.*)'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif',
                                        'PNG Files (*.png)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif',
                                        'Tif  Files (*.tif)'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif',
                                        'PNG Files (*.PNG)'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif',
                                        'Tif  Files (*.TIF)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tif',
                                        'Geotiff Files (*.tiff *.tif)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/test.tiff',
                                        'Geotiff Files (*.tiff *.tif)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/test.TIFF', 'Geotiff Files (*.tiff *.tif *.TIFF)'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/test.tif', 'PNG Files (*.png);;BMP Files (*.bmp)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/test.bmp', 'PNG Files (*.png);;BMP Files (*.bmp)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/test.png', 'PNG Files (*.png);;BMP Files (*.bmp)'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter('/home/me/test.png',
                                        'EPT files (ept.json)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/ept.json',
                                        'EPT files (ept.json)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/ept.json',
                                        'EPT files (ept.json EPT.JSON)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter('/home/me/EPT.JSON',
                                        'EPT files (ept.json EPT.JSON)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/ept.json',
             'EPT files (ept.json);;Entwine files (entwine.json)'))
     self.assertTrue(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/entwine.json',
             'EPT files (ept.json);;Entwine files (entwine.json)'))
     self.assertFalse(
         QgsFileUtils.fileMatchesFilter(
             '/home/me/ep.json',
             'EPT files (ept.json);;Entwine files (entwine.json)'))
Exemplo n.º 16
0
 def testEnsureFileNameHasExtension(self):
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('', ['']), '')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('', []), '')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test', []),
                      'test')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('', ['.tif']),
                      '')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test', ['.tif']),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test', ['tif']),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test.tif', []),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test.tif', ['bmp']),
         'test.tif.bmp')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test.tif', ['tiff']),
         'test.tif.tiff')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test.tif',
                                                 ['tiff', 'tif']),
         'test.tif')
     self.assertEqual(
         QgsFileUtils.ensureFileNameHasExtension('test.tif',
                                                 ['TIFF', 'TIF']),
         'test.tif')
Exemplo n.º 17
0
    def testFindClosestExistingPath(self):
        self.assertEqual(QgsFileUtils.findClosestExistingPath(''), '')
        self.assertEqual(QgsFileUtils.findClosestExistingPath('.'), '')
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath('just_a_filename'), '')
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath('just_a_filename.txt'), '')
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(
                'a_very_unlikely_path_to_really_exist/because/no_one_would_have_a_folder_called/MapInfo is the bestest/'
            ), '')
        # sorry anyone not on linux!
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(
                '/usr/youve_been_hacked/by_the_l77t_krew'), '/usr')

        base_path = tempfile.mkdtemp()
        file = os.path.join(base_path, 'test.csv')
        with open(file, 'wt') as f:
            f.write('\n')

        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(
                os.path.join(base_path, 'a file name.bmp')),
            base_path)  # non-existent file
        self.assertEqual(QgsFileUtils.findClosestExistingPath(file),
                         base_path)  # real file!
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(
                os.path.join(base_path, 'non/existent/subfolder')), base_path)

        sub_folder1 = os.path.join(base_path, 'subfolder1')
        os.mkdir(sub_folder1)
        sub_folder2 = os.path.join(sub_folder1, 'subfolder2')
        os.mkdir(sub_folder2)
        bad_sub_folder = os.path.join(sub_folder2, 'nooo')
        self.assertEqual(QgsFileUtils.findClosestExistingPath(bad_sub_folder),
                         sub_folder2)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2),
                         sub_folder2)
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(sub_folder2 + '/.'),
            sub_folder2)
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(sub_folder2 + '/..'),
            sub_folder1)
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(sub_folder2 + '/../ddddddd'),
            sub_folder1)
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(sub_folder2 +
                                                 '/../subfolder2'),
            sub_folder2)
        self.assertEqual(
            QgsFileUtils.findClosestExistingPath(
                sub_folder2 + '/../subfolder2/zxcv/asfdasd'), sub_folder2)
Exemplo n.º 18
0
    def testFindClosestExistingPath(self):
        self.assertEqual(QgsFileUtils.findClosestExistingPath(''), '')
        self.assertEqual(QgsFileUtils.findClosestExistingPath('.'), '')
        self.assertEqual(QgsFileUtils.findClosestExistingPath('just_a_filename'), '')
        self.assertEqual(QgsFileUtils.findClosestExistingPath('just_a_filename.txt'), '')
        self.assertEqual(QgsFileUtils.findClosestExistingPath('a_very_unlikely_path_to_really_exist/because/no_one_would_have_a_folder_called/MapInfo is the bestest/'), '')
        # sorry anyone not on linux!
        self.assertEqual(QgsFileUtils.findClosestExistingPath('/usr/youve_been_hacked/by_the_l77t_krew'), '/usr')

        base_path = tempfile.mkdtemp()
        file = os.path.join(base_path, 'test.csv')
        with open(file, 'wt') as f:
            f.write('\n')

        self.assertEqual(QgsFileUtils.findClosestExistingPath(os.path.join(base_path, 'a file name.bmp')), base_path) # non-existent file
        self.assertEqual(QgsFileUtils.findClosestExistingPath(file), base_path) # real file!
        self.assertEqual(QgsFileUtils.findClosestExistingPath(os.path.join(base_path, 'non/existent/subfolder')), base_path)

        sub_folder1 = os.path.join(base_path, 'subfolder1')
        os.mkdir(sub_folder1)
        sub_folder2 = os.path.join(sub_folder1, 'subfolder2')
        os.mkdir(sub_folder2)
        bad_sub_folder = os.path.join(sub_folder2, 'nooo')
        self.assertEqual(QgsFileUtils.findClosestExistingPath(bad_sub_folder), sub_folder2)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2), sub_folder2)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2 + '/.'), sub_folder2)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2 + '/..'), sub_folder1)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2 + '/../ddddddd'), sub_folder1)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2 + '/../subfolder2'), sub_folder2)
        self.assertEqual(QgsFileUtils.findClosestExistingPath(sub_folder2 + '/../subfolder2/zxcv/asfdasd'), sub_folder2)
Exemplo n.º 19
0
 def testWildcardsFromFilter(self):
     self.assertEqual(QgsFileUtils.wildcardsFromFilter(''), '')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('bad'), '')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('*'), '')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('*.'), '')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('Tiff files'), '')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('(*.*)'), '*.*')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('PNG Files (*.png)'),
                      '*.png')
     self.assertEqual(
         QgsFileUtils.wildcardsFromFilter('Tif  Files (*.tif)'), '*.tif')
     self.assertEqual(QgsFileUtils.wildcardsFromFilter('PNG Files (*.PNG)'),
                      '*.PNG')
     self.assertEqual(
         QgsFileUtils.wildcardsFromFilter('Geotiff Files (*.tiff *.tif)'),
         '*.tiff *.tif')
     self.assertEqual(
         QgsFileUtils.wildcardsFromFilter(
             'Geotiff Files (*.tiff *.tif *.TIFF)'), '*.tiff *.tif *.TIFF')
     self.assertEqual(
         QgsFileUtils.wildcardsFromFilter('EPT files (ept.json)'),
         'ept.json')
     self.assertEqual(
         QgsFileUtils.wildcardsFromFilter('EPT files (ept.json EPT.JSON)'),
         'ept.json EPT.JSON')
Exemplo n.º 20
0
    def test_rename_dataset(self):
        """
        Test QgsFileUtils.renameDataset
        """
        base_path = tempfile.mkdtemp()
        for ext in ['shp', 'dbf', 'prj', 'qml', 'shx']:
            shutil.copy(f'{unitTestDataPath()}/lines.{ext}',
                        f'{base_path}/lines.{ext}')
            shutil.copy(f'{unitTestDataPath()}/lines.{ext}',
                        f'{base_path}/lines.{ext}')
        self.assertTrue(os.path.exists(f'{base_path}/lines.shp'))

        res, error = QgsFileUtils.renameDataset(
            f'{base_path}/lines.shp', f'{base_path}/other_lines.shp')
        self.assertTrue(res)
        for ext in ['shp', 'dbf', 'prj', 'qml', 'shx']:
            self.assertTrue(os.path.exists(f'{base_path}/other_lines.{ext}'))
            self.assertFalse(os.path.exists(f'{base_path}/lines.{ext}'))

        # skip qml file
        res, error = QgsFileUtils.renameDataset(
            f'{base_path}/other_lines.shp', f'{base_path}/other_lines2.shp',
            Qgis.FileOperationFlags())
        self.assertTrue(res)
        for ext in ['shp', 'dbf', 'prj', 'shx']:
            self.assertTrue(os.path.exists(f'{base_path}/other_lines2.{ext}'))
            self.assertFalse(os.path.exists(f'{base_path}/other_lines.{ext}'))
        self.assertFalse(os.path.exists(f'{base_path}/other_lines2.qml'))
        self.assertTrue(os.path.exists(f'{base_path}/other_lines.qml'))

        # try changing extension -- sidecars won't be renamed
        res, error = QgsFileUtils.renameDataset(
            f'{base_path}/other_lines2.shp', f'{base_path}/other_lines2.txt',
            Qgis.FileOperationFlags())
        self.assertFalse(error)
        self.assertTrue(res)
        self.assertFalse(os.path.exists(f'{base_path}/other_lines2.shp'))
        self.assertTrue(os.path.exists(f'{base_path}/other_lines2.txt'))
        for ext in ['dbf', 'prj', 'shx']:
            self.assertTrue(os.path.exists(f'{base_path}/other_lines2.{ext}'))

        for ext in ['shp', 'dbf', 'prj', 'qml', 'shx']:
            shutil.copy(f'{unitTestDataPath()}/lines.{ext}',
                        f'{base_path}/ll.{ext}')
            shutil.copy(f'{unitTestDataPath()}/lines.{ext}',
                        f'{base_path}/ll.{ext}')

        # file name clash
        with open(f'{base_path}/yy.shp', 'wt') as f:
            f.write('')
        res, error = QgsFileUtils.renameDataset(f'{base_path}/ll.shp',
                                                f'{base_path}/yy.shp',
                                                Qgis.FileOperationFlags())
        self.assertFalse(res)
        self.assertTrue(error)
        # nothing should be renamed
        for ext in ['shp', 'dbf', 'prj', 'qml', 'shx']:
            self.assertTrue(os.path.exists(f'{base_path}/ll.{ext}'))

        # sidecar clash
        with open(f'{base_path}/yyy.shx', 'wt') as f:
            f.write('')
        res, error = QgsFileUtils.renameDataset(f'{base_path}/ll.shp',
                                                f'{base_path}/yyy.shp')
        self.assertFalse(res)
        self.assertTrue(error)
        # no files should have been renamed
        for ext in ['shp', 'dbf', 'prj', 'qml']:
            self.assertTrue(os.path.exists(f'{base_path}/ll.{ext}'))
            self.assertFalse(os.path.exists(f'{base_path}/yyy.{ext}'))
        self.assertTrue(os.path.exists(f'{base_path}/ll.shx'))

        # try renaming missing file
        res, error = QgsFileUtils.renameDataset('/not a file.txt',
                                                f'{base_path}/not a file.txt',
                                                Qgis.FileOperationFlags())
        self.assertFalse(res)
        self.assertTrue(error)
Exemplo n.º 21
0
 def testEnsureFileNameHasExtension(self):
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('', ['']), '')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('', []), '')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test', []), 'test')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('', ['.tif']), '')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test', ['.tif']), 'test.tif')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test', ['tif']), 'test.tif')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test.tif', []), 'test.tif')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test.tif', ['bmp']), 'test.tif.bmp')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test.tif', ['tiff']), 'test.tif.tiff')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test.tif', ['tiff', 'tif']), 'test.tif')
     self.assertEqual(QgsFileUtils.ensureFileNameHasExtension('test.tif', ['TIFF', 'TIF']), 'test.tif')
Exemplo n.º 22
0
    def saveModel(self, saveAs) -> bool:
        if not self.validateSave(QgsModelDesignerDialog.SaveAction.SaveAsFile):
            return False

        model_name_matched_file_name = self.model().modelNameMatchesFilePath()
        if self.model().sourceFilePath() and not saveAs:
            filename = self.model().sourceFilePath()
        else:
            if self.model().sourceFilePath():
                initial_path = Path(self.model().sourceFilePath())
            elif self.model().name():
                initial_path = Path(ModelerUtils.modelsFolders()[0]) / (
                    self.model().name() + '.model3')
            else:
                initial_path = Path(ModelerUtils.modelsFolders()[0])

            filename, _ = QFileDialog.getSaveFileName(
                self, self.tr('Save Model'), initial_path.as_posix(),
                self.tr('Processing models (*.model3 *.MODEL3)'))
            if not filename:
                return False

            filename = QgsFileUtils.ensureFileNameHasExtension(
                filename, ['model3'])
            self.model().setSourceFilePath(filename)

            if not self.model().name() or self.model().name() == self.tr(
                    'model'):
                self.setModelName(Path(filename).stem)
            elif saveAs and model_name_matched_file_name:
                # if saving as, and the model name used to match the filename, then automatically update the
                # model name to match the new file name
                self.setModelName(Path(filename).stem)

        if not self.model().toFile(filename):
            if saveAs:
                QMessageBox.warning(
                    self, self.tr('I/O error'),
                    self.tr('Unable to save edits. Reason:\n {0}').format(
                        str(sys.exc_info()[1])))
            else:
                QMessageBox.warning(
                    self, self.tr("Can't save model"),
                    self.
                    tr("This model can't be saved in its original location (probably you do not "
                       "have permission to do it). Please, use the 'Save as…' option."
                       ))
            return False

        self.update_model.emit()
        if saveAs:
            self.messageBar().pushMessage(
                "",
                self.tr("Model was saved to <a href=\"{}\">{}</a>").format(
                    QUrl.fromLocalFile(filename).toString(),
                    QDir.toNativeSeparators(filename)),
                level=Qgis.Success,
                duration=5)

        self.setDirty(False)
        return True
Exemplo n.º 23
0
 def testStringToSafeFilename(self):
     self.assertEqual(QgsFileUtils.stringToSafeFilename('my FiLe v2.0_new.tif'), 'my FiLe v2.0_new.tif')
     self.assertEqual(
         QgsFileUtils.stringToSafeFilename('rendered map_final? rev (12-03-1017)_real/\\?%*:|"<>.tif'),
         'rendered map_final_ rev (12-03-1017)_real__________.tif')
Exemplo n.º 24
0
 def testStringToSafeFilename(self):
     self.assertEqual(QgsFileUtils.stringToSafeFilename('my FiLe v2.0_new.tif'), 'my FiLe v2.0_new.tif')
     self.assertEqual(
         QgsFileUtils.stringToSafeFilename('rendered map_final? rev (12-03-1017)_real@#$&*#%&*$!!@$%^&(*(.tif'),
         'rendered map_final_ rev _12-03-1017__real____________________.tif')