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 _to_json(key: str, project: QgsProject): return dict( key=key, filename=project.fileName(), last_modified=project.lastModified().toString(Qt.ISODate), num_layers=project.count(), )
def get_project_summary(key: str, project: QgsProject): """ Return json summary for cached project """ def layer_summary(layer_id: str, layer: QgsMapLayer): return dict( id=layer_id, name=layer.name(), source=layer.publicSource(), crs=layer.crs().userFriendlyIdentifier(), valid=layer.isValid(), spatial=layer.isSpatial(), ) layers = [ layer_summary(idstr, l) for (idstr, l) in project.mapLayers().items() ] return dict(cache_key=key, filename=project.fileName(), bad_layers_count=sum(1 for ls in layers if not ls['valid']), layers=layers, crs=project.crs().userFriendlyIdentifier(), last_modified=project.lastModified().toString(Qt.ISODate))
def test_wmts_document_cache_time(client): """ Test getcapabilites response time """ plugin = client.getplugin('wmtsCacheServer') assert plugin is not None # Create a filter cachefilter = plugin.create_filter() # Copy project shutil.copy( client.getprojectpath("france_parts.qgs"), client.getprojectpath("france_parts_copy.qgs") ) # Delete document project = QgsProject() project.setFileName(client.getprojectpath("france_parts_copy.qgs").strpath) # Get project document root path docroot = cachefilter._cache.get_documents_root(project.fileName()) cachefilter.deleteCachedDocuments(project) assert not os.path.exists(docroot.as_posix()) parameters = { 'MAP': project.fileName(), 'REQUEST': 'GetCapabilities', 'SERVICE': 'WMTS' } # Get the cached path from the request parameters docpath = cachefilter._cache.get_document_cache( project.fileName(), parameters, '.xml' ).as_posix() assert not os.path.exists(docpath) # Make a request qs = "?" + "&".join("%s=%s" % item for item in parameters.items()) rv = client.get(qs, project.fileName()) assert rv.status_code == 200 # Test that document cache has been created assert os.path.exists(docpath) # Get time of document cache creation docmtime = os.stat(docpath).st_mtime projmtime = project.lastModified().toMSecsSinceEpoch() / 1000.0 assert projmtime < docmtime project.write() projmtime = project.lastModified().toMSecsSinceEpoch() / 1000.0 assert projmtime > docmtime # Make a second request rv = client.get(qs, project.fileName()) assert rv.status_code == 200 ndocmtime = os.stat(docpath).st_mtime projmtime = project.lastModified().toMSecsSinceEpoch() / 1000.0 assert projmtime < ndocmtime assert docmtime < ndocmtime # Clean files after testing Path(client.getprojectpath("france_parts_copy.qgs")).unlink()