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
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)
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')
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))
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')
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')
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