Example #1
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"
Example #3
0
    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()