def testProjectTitleWithPeriod(self): tmpDir = QTemporaryDir() tmpFile = "{}/2.18.21.qgs".format(tmpDir.path()) tmpFile2 = "{}/qgis-3.2.0.qgs".format(tmpDir.path()) p0 = QgsProject() p0.setFileName(tmpFile) p1 = QgsProject() p1.setFileName(tmpFile2) self.assertEqual(p0.baseName(), '2.18.21') self.assertEqual(p1.baseName(), 'qgis-3.2.0')
def testSaveLoadProject(self): schema_uri = encode_uri(self.ds_uri, 'qgis_test') project_uri = encode_uri(self.ds_uri, 'qgis_test', 'abc') self.dropProjectsTable() # make sure we have a clean start prj = QgsProject() uri = self.vl.source() vl1 = QgsVectorLayer(uri, 'test', 'postgres') self.assertEqual(vl1.isValid(), True) prj.addMapLayer(vl1) prj_storage = QgsApplication.projectStorageRegistry().projectStorageFromType("postgresql") self.assertTrue(prj_storage) lst0 = prj_storage.listProjects(schema_uri) self.assertEqual(lst0, []) # try to save project in the database prj.setFileName(project_uri) res = prj.write() self.assertTrue(res) lst1 = prj_storage.listProjects(schema_uri) self.assertEqual(lst1, ["abc"]) # now try to load the project back prj2 = QgsProject() prj2.setFileName(project_uri) res = prj2.read() self.assertTrue(res) self.assertEqual(len(prj2.mapLayers()), 1) self.assertEqual(prj2.baseName(), "abc") self.assertEqual(prj2.absoluteFilePath(), "") # path not supported for project storages self.assertTrue(abs(prj2.lastModified().secsTo(QDateTime.currentDateTime())) < 10) # try to see project's metadata res, metadata = prj_storage.readProjectStorageMetadata(project_uri) self.assertTrue(res) self.assertEqual(metadata.name, "abc") time_project = metadata.lastModified time_now = QDateTime.currentDateTime() time_diff = time_now.secsTo(time_project) self.assertTrue(abs(time_diff) < 10) # try to remove the project res = prj_storage.removeProject(project_uri) self.assertTrue(res) lst2 = prj_storage.listProjects(schema_uri) self.assertEqual(lst2, []) self.dropProjectsTable() # make sure we have a clean finish... "leave no trace"
def testSaveLoadProject(self): schema_uri = encode_uri(self.ds_uri, 'qgis_test') project_uri = encode_uri(self.ds_uri, 'qgis_test', 'abc') self.dropProjectsTable() # make sure we have a clean start prj = QgsProject() uri = self.vl.source() vl1 = QgsVectorLayer(uri, 'test', 'postgres') self.assertEqual(vl1.isValid(), True) prj.addMapLayer(vl1) prj_storage = QgsApplication.projectStorageRegistry( ).projectStorageFromType("postgresql") self.assertTrue(prj_storage) lst0 = prj_storage.listProjects(schema_uri) self.assertEqual(lst0, []) # try to save project in the database prj.setFileName(project_uri) res = prj.write() self.assertTrue(res) lst1 = prj_storage.listProjects(schema_uri) self.assertEqual(lst1, ["abc"]) # now try to load the project back prj2 = QgsProject() prj2.setFileName(project_uri) res = prj2.read() self.assertTrue(res) self.assertEqual(len(prj2.mapLayers()), 1) self.assertEqual(prj2.baseName(), "abc") self.assertEqual(prj2.absoluteFilePath(), "") # path not supported for project storages self.assertTrue( abs(prj2.lastModified().secsTo(QDateTime.currentDateTime())) < 10) # try to see project's metadata res, metadata = prj_storage.readProjectStorageMetadata(project_uri) self.assertTrue(res) self.assertEqual(metadata.name, "abc") time_project = metadata.lastModified time_now = QDateTime.currentDateTime() time_diff = time_now.secsTo(time_project) self.assertTrue(abs(time_diff) < 10) # try to remove the project res = prj_storage.removeProject(project_uri) self.assertTrue(res) lst2 = prj_storage.listProjects(schema_uri) self.assertEqual(lst2, []) self.dropProjectsTable( ) # make sure we have a clean finish... "leave no trace"
def run(self): """Run method that performs all the real work""" # Create the dialog with elements (after translation) and keep reference # Only create GUI ONCE in callback, so that it will only load when the plugin is started if self.first_start == True: self.first_start = False self.dlg = LayerSelectorDialog() # If no project is loaded => ERROR if QgsProject.baseName(QgsProject.instance()) == '': self.iface.messageBar().pushMessage("Error", "No project loaded", level=Qgis.Critical, duration=3) return #layers = QgsProject.instance().layerTreeRoot().children() layers = QgsProject.instance().mapLayers() # Check if there are any layers if len(layers) == 0: self.iface.messageBar().pushMessage("Error", "Project contains no layers", level=Qgis.Critical, duration=3) return # Select only the vector layers geoLayers = [] self.geoIDs = [] dataLayers = [] self.dataIDs = [] for id, layer in layers.items(): current = QgsProject.instance().mapLayer(id) if isinstance(current, QgsVectorLayer): if current.dataProvider().storageType( ) == "Delimited text file": dataLayers.append(layer) self.dataIDs.append(id) else: geoLayers.append(layer) self.geoIDs.append(id) if len(geoLayers) == 0: self.iface.messageBar().pushMessage( "Error", "Project contains no geometry layers", level=Qgis.Critical, duration=3) return if len(dataLayers) == 0: self.iface.messageBar().pushMessage( "Error", "Project contains no data layers", level=Qgis.Critical, duration=3) return self.dlg.comboBox.clear() self.dlg.comboBox.addItems([layer.name() for layer in geoLayers]) self.dlg.comboBox_2.clear() self.dlg.comboBox_2.addItems([layer.name() for layer in dataLayers]) # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result: self.dataLayer = self.dataIDs[self.dlg.comboBox_2.currentIndex()] self.geoLayer = self.geoIDs[self.dlg.comboBox.currentIndex()] self.store_layer_info() self.create_uuid_columns()