def testModel(self): conn = QgsProviderRegistry.instance().providerMetadata( 'postgres').createConnection(self.uri, {}) self.assertTrue(conn) model = QgsDatabaseTableModel(conn) self.assertGreaterEqual(model.rowCount(), 3) old_count = model.rowCount() self.assertEqual(model.columnCount(), 1) tables = [ model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount()) ] self.assertIn('qgis_test.someData', tables) self.assertIn('qgis_test.some_poly_data', tables) self.assertIn('information_schema.attributes', tables) self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleTableName), 'someData') self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleSchema), 'qgis_test') self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleComment), 'QGIS Test Table') self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleCrs), QgsCoordinateReferenceSystem('EPSG:4326')) self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleCustomInfo), {}) self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleTableFlags), 4) self.assertEqual( model.data( model.index(tables.index('qgis_test.someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleWkbType), QgsWkbTypes.Point) self.assertEqual( model.data( model.index(tables.index('qgis_test.some_poly_data'), 0, QModelIndex()), QgsDatabaseTableModel.RoleWkbType), QgsWkbTypes.Polygon) self.assertIsNone( model.data(model.index(model.rowCount(), 0, QModelIndex()), Qt.DisplayRole)) model.refresh() self.assertEqual(model.rowCount(), old_count) fields = QgsFields() fields.append(QgsField('test', QVariant.String)) conn.createVectorTable('qgis_test', 'myNewTable', fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem('EPSG:3857'), False, {}) self.assertEqual(model.rowCount(), old_count) model.refresh() self.assertEqual(model.rowCount(), old_count + 1) tables = [ model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount()) ] self.assertIn('qgis_test.someData', tables) self.assertIn('qgis_test.some_poly_data', tables) self.assertIn('information_schema.attributes', tables) self.assertIn('qgis_test.myNewTable', tables) conn.createVectorTable('qgis_test', 'myNewTable2', fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem('EPSG:3857'), False, {}) conn.createVectorTable('qgis_test', 'myNewTable3', fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem('EPSG:3857'), False, {}) model.refresh() self.assertEqual(model.rowCount(), old_count + 3) tables = [ model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount()) ] self.assertIn('qgis_test.someData', tables) self.assertIn('qgis_test.some_poly_data', tables) self.assertIn('information_schema.attributes', tables) self.assertIn('qgis_test.myNewTable', tables) self.assertIn('qgis_test.myNewTable2', tables) self.assertIn('qgis_test.myNewTable3', tables) conn.createVectorTable('qgis_test', 'myNewTable4', fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem('EPSG:3857'), False, {}) conn.dropVectorTable('qgis_test', 'myNewTable2') conn.dropVectorTable('qgis_test', 'myNewTable') model.refresh() self.assertEqual(model.rowCount(), old_count + 2) tables = [ model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount()) ] self.assertIn('qgis_test.someData', tables) self.assertIn('qgis_test.some_poly_data', tables) self.assertIn('information_schema.attributes', tables) self.assertNotIn('qgis_test.myNewTable', tables) self.assertNotIn('qgis_test.myNewTable2', tables) self.assertIn('qgis_test.myNewTable3', tables) self.assertIn('qgis_test.myNewTable4', tables) conn.dropVectorTable('qgis_test', 'myNewTable3') conn.dropVectorTable('qgis_test', 'myNewTable4') model.refresh() self.assertEqual(model.rowCount(), old_count) tables = [ model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount()) ] self.assertIn('qgis_test.someData', tables) self.assertIn('qgis_test.some_poly_data', tables) self.assertIn('information_schema.attributes', tables) self.assertNotIn('qgis_test.myNewTable', tables) self.assertNotIn('qgis_test.myNewTable2', tables) self.assertNotIn('qgis_test.myNewTable3', tables) self.assertNotIn('qgis_test.myNewTable4', tables)
def testModelSpecificSchema(self): conn = QgsProviderRegistry.instance().providerMetadata( 'postgres').createConnection(self.uri, {}) self.assertTrue(conn) model = QgsDatabaseTableModel(conn, 'qgis_test') self.assertGreaterEqual(model.rowCount(), 3) old_count = model.rowCount() self.assertEqual(model.columnCount(), 1) tables = [ model.data(model.index(r, 0, QModelIndex()), Qt.DisplayRole) for r in range(model.rowCount()) ] self.assertIn('someData', tables) self.assertIn('some_poly_data', tables) self.assertNotIn('attributes', tables) self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleTableName), 'someData') self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleSchema), 'qgis_test') self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleComment), 'QGIS Test Table') self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleCrs), QgsCoordinateReferenceSystem('EPSG:4326')) self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleCustomInfo), {}) self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleTableFlags), 4) self.assertEqual( model.data(model.index(tables.index('someData'), 0, QModelIndex()), QgsDatabaseTableModel.RoleWkbType), QgsWkbTypes.Point) self.assertEqual( model.data( model.index(tables.index('some_poly_data'), 0, QModelIndex()), QgsDatabaseTableModel.RoleWkbType), QgsWkbTypes.Polygon) self.assertIsNone( model.data(model.index(model.rowCount(), 0, QModelIndex()), Qt.DisplayRole))