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 __init__(self, parent: QWidget = None) -> None: QDialog.__init__(self, parent) self.setupUi(self) self.message_bar: QgsMessageBar self.btn_load.clicked.connect(self.__load_wfs_layer) self.btn_select.clicked.connect(self.__select_wfs_layer) self.btn_clear_search.clicked.connect( self.__clear_stored_wfs_queries_search) # Typing self.extent_group_box_bbox: QgsExtentGroupBox self.progress_bar: QProgressBar self.search_ln_ed: QgsFilterLineEdit self.search_ln_ed.valueChanged.connect(self.__search_stored_wfs_layers) self.extent_group_box_bbox.setOriginalExtent( iface.mapCanvas().extent(), iface.mapCanvas().mapSettings().destinationCrs(), ) self.extent_group_box_bbox.setCurrentExtent( iface.mapCanvas().extent(), iface.mapCanvas().mapSettings().destinationCrs(), ) self.extent_group_box_bbox.setOutputCrs( QgsCoordinateReferenceSystem("EPSG:4326")) try: self.extent_group_box_bbox.setMapCanvas(iface.mapCanvas(), drawOnCanvasOption=False) except TypeError: self.extent_group_box_bbox.setMapCanvas(iface.mapCanvas()) self.extent_group_box_bbox.setOutputExtentFromCurrent() self.chk_box_add_to_map: QCheckBox self.btn_output_dir_select: QgsFileWidget self.btn_output_dir_select.setFilePath( str( Path(QgsProject.absoluteFilePath( QgsProject.instance())).parent)) self.progress_bar.setValue(0) # Context and feedback for processing algorithms self.context: QgsProcessingContext = QgsProcessingContext() self.feedback: QgsProcessingFeedback = LoggerProcessingFeedBack( use_logger=True) self.responsive_items = { self.btn_load, self.btn_select, self.chk_box_add_to_map, self.btn_clear_search, } self.task: Optional[BaseLoader] = None self.sq_factory = StoredQueryFactory(Settings.FMI_WFS_URL.get(), Settings.FMI_WFS_VERSION.get()) self.stored_queries: List[StoredQuery] = [] self.selected_stored_query: Optional[StoredQuery] = None # populating dynamically the parameters of main dialog self.grid: QGridLayout self.parameter_rows: Dict[str, Set[QWidget]] = {} self.tbl_wdgt_stored_queries: QTableWidget # populating the layer list when opening self.__refresh_stored_wfs_queries()