class LSqlResultModelTask(SqlResultModelTask): def __init__(self, db, sql, parent): super().__init__(db, sql, parent) tf = QTemporaryFile() tf.open() path = tf.fileName() tf.close() df = QgsVirtualLayerDefinition() df.setFilePath(path) df.setQuery(sql) self.subtask = QgsVirtualLayerTask(df) self.addSubTask(self.subtask, [], QgsTask.ParentDependsOnSubTask) def run(self): try: path = self.subtask.definition().filePath() sql = self.subtask.definition().query() self.model = LSqlResultModel(self.db, sql, None, self.subtask.layer(), path) except Exception as e: self.error = BaseError(str(e)) return False return True def cancel(self): SqlResultModelTask.cancel(self)
def test(self): l1 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "françéà", "ogr", QgsVectorLayer.LayerOptions(False)) self.assertEqual(l1.isValid(), True) QgsProject.instance().addMapLayer(l1) df = QgsVirtualLayerDefinition() df.setQuery('select * from "françéà"') self.task = QgsVirtualLayerTask(df) ids = [f.id() for f in self.task.layer().getFeatures()] self.assertEqual(len(ids), 0) self.task.taskCompleted.connect(self.onSuccess) self.task.taskTerminated.connect(self.onFail) QgsApplication.taskManager().addTask(self.task) while not self.success and not self.fail: QCoreApplication.processEvents() self.assertTrue(self.success) self.assertFalse(self.fail) self.assertEqual(len(self.ids), 4)
def __init__(self, db, sql, parent): super().__init__(db, sql, parent) tf = QTemporaryFile() tf.open() path = tf.fileName() tf.close() df = QgsVirtualLayerDefinition() df.setFilePath(path) df.setQuery(sql) self.subtask = QgsVirtualLayerTask(df) self.addSubTask(self.subtask, [], QgsTask.ParentDependsOnSubTask)
class TestQgsVirtualLayerTask(unittest.TestCase): def setUp(self): self.testDataDir = unitTestDataPath() self._success = False self._fail = False self.ids = None self.task = None def onSuccess(self): self._success = True self.ids = [f.id() for f in self.task.layer().getFeatures()] def onFail(self): self._fail = True self._exceptionText = self.task.exceptionText() def test(self): l1 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "françéà", "ogr", QgsVectorLayer.LayerOptions(False)) self.assertEqual(l1.isValid(), True) QgsProject.instance().addMapLayer(l1) df = QgsVirtualLayerDefinition() df.setQuery('select * from "françéà"') self.task = QgsVirtualLayerTask(df) ids = [f.id() for f in self.task.layer().getFeatures()] self.assertEqual(len(ids), 0) self.task.taskCompleted.connect(self.onSuccess) self.task.taskTerminated.connect(self.onFail) QgsApplication.taskManager().addTask(self.task) while not self._success and not self._fail: QCoreApplication.processEvents() self.assertTrue(self._success) self.assertFalse(self._fail) self.assertEqual(len(self.ids), 4) # Test exception self._success = False self._fail = False df.setQuery('select *') self.task = QgsVirtualLayerTask(df) self.task.taskCompleted.connect(self.onSuccess) self.task.taskTerminated.connect(self.onFail) QgsApplication.taskManager().addTask(self.task) while not self._success and not self._fail: QCoreApplication.processEvents() self.assertFalse(self._success) self.assertTrue(self._fail) self.assertEqual( self._exceptionText, 'Query preparation error on PRAGMA table_info(_tview): no tables specified', self._exceptionText)
class TestQgsVirtualLayerTask(unittest.TestCase): def setUp(self): self.testDataDir = unitTestDataPath() self._success = False self._fail = False self.ids = None self.task = None def onSuccess(self): self._success = True self.ids = [f.id() for f in self.task.layer().getFeatures()] def onFail(self): self._fail = True self._exceptionText = self.task.exceptionText() def test(self): l1 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "françéà", "ogr", QgsVectorLayer.LayerOptions(False)) self.assertEqual(l1.isValid(), True) QgsProject.instance().addMapLayer(l1) df = QgsVirtualLayerDefinition() df.setQuery('select * from "françéà"') self.task = QgsVirtualLayerTask(df) ids = [f.id() for f in self.task.layer().getFeatures()] self.assertEqual(len(ids), 0) self.task.taskCompleted.connect(self.onSuccess) self.task.taskTerminated.connect(self.onFail) QgsApplication.taskManager().addTask(self.task) while not self._success and not self._fail: QCoreApplication.processEvents() self.assertTrue(self._success) self.assertFalse(self._fail) self.assertEqual(len(self.ids), 4) # Test exception self._success = False self._fail = False df.setQuery('select *') self.task = QgsVirtualLayerTask(df) self.task.taskCompleted.connect(self.onSuccess) self.task.taskTerminated.connect(self.onFail) QgsApplication.taskManager().addTask(self.task) while not self._success and not self._fail: QCoreApplication.processEvents() self.assertFalse(self._success) self.assertTrue(self._fail) self.assertEqual(self._exceptionText, 'Query preparation error on PRAGMA table_info(_tview): no tables specified', self._exceptionText)
def __init__(self, db, sql, parent): super().__init__(db, sql, parent) tf = QTemporaryFile() tf.open() path = tf.fileName() tf.close() df = QgsVirtualLayerDefinition() df.setFilePath(path) df.setQuery(sql) self.subtask = QgsVirtualLayerTask(df) self.addSubTask(self.subtask, [], QgsTask.ParentDependsOnSubTask)
def test(self): l1 = QgsVectorLayer(os.path.join(self.testDataDir, "france_parts.shp"), "françéà", "ogr", QgsVectorLayer.LayerOptions(False)) self.assertEqual(l1.isValid(), True) QgsProject.instance().addMapLayer(l1) df = QgsVirtualLayerDefinition() df.setQuery('select * from "françéà"') self.task = QgsVirtualLayerTask(df) ids = [f.id() for f in self.task.layer().getFeatures()] self.assertEqual(len(ids), 0) self.task.taskCompleted.connect(self.onSuccess) self.task.taskTerminated.connect(self.onFail) QgsApplication.taskManager().addTask(self.task) while not self.success and not self.fail: QCoreApplication.processEvents() self.assertTrue(self.success) self.assertFalse(self.fail) self.assertEqual(len(self.ids), 4)