Skip to content

Commit 8bda5c0

Browse files
committed
db_manager: migrate to new style signals
1 parent 4151a3b commit 8bda5c0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+334
-287
lines changed

python/plugins/db_manager/db_manager.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424

2525
import functools
2626

27-
from PyQt4.QtCore import QObject, Qt, QSettings, QByteArray, SIGNAL, QSize
28-
from PyQt4.QtGui import QMainWindow, QApplication, QMenu, QIcon, QTabWidget, QGridLayout, QSpacerItem, QSizePolicy, \
29-
QDockWidget, QStatusBar, QMenuBar, QToolBar, QKeySequence, QTabBar
27+
from PyQt.QtCore import QObject, Qt, QSettings, QByteArray, QSize
28+
from PyQt.QtWidgets import QMainWindow, QApplication, QMenu, QTabWidget, QGridLayout, QSpacerItem, QSizePolicy, QDockWidget, QStatusBar, QMenuBar, QToolBar, QTabBar
29+
from PyQt.QtGui import QIcon, QKeySequence
3030

3131
from qgis.gui import QgsMessageBar
3232
from .info_viewer import InfoViewer
@@ -52,8 +52,8 @@ def __init__(self, iface, parent=None):
5252
self.restoreGeometry(settings.value("/DB_Manager/mainWindow/geometry", QByteArray(), type=QByteArray))
5353
self.restoreState(settings.value("/DB_Manager/mainWindow/windowState", QByteArray(), type=QByteArray))
5454

55-
self.connect(self.tabs, SIGNAL("currentChanged(int)"), self.tabChanged)
56-
self.connect(self.tree, SIGNAL("selectedItemChanged"), self.itemChanged)
55+
self.tabs.currentChanged.connect(self.tabChanged)
56+
self.tree.selectedItemChanged.connect(self.itemChanged)
5757
self.itemChanged(None)
5858

5959
def closeEvent(self, e):
@@ -189,7 +189,7 @@ def runSqlWindow(self):
189189
self.tabs.setCurrentIndex(0)
190190
return
191191

192-
from dlg_sql_window import DlgSqlWindow
192+
from .dlg_sql_window import DlgSqlWindow
193193

194194
query = DlgSqlWindow(self.iface, db, self)
195195
dbname = db.connection().connectionName()
@@ -224,7 +224,7 @@ def registerAction(self, action, menuName, callback=None):
224224
self._registeredDbActions[menuName].append(action)
225225

226226
if callback is not None:
227-
QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback)
227+
action.triggered.connect(invoke_callback)
228228
return True
229229

230230
# search for the menu
@@ -270,7 +270,7 @@ def registerAction(self, action, menuName, callback=None):
270270
self._registeredDbActions[menuName].append(action)
271271

272272
if callback is not None:
273-
QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback)
273+
action.triggered.connect(invoke_callback)
274274

275275
return True
276276

python/plugins/db_manager/db_manager_plugin.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@
2020
***************************************************************************/
2121
"""
2222

23-
from PyQt4.QtCore import Qt, QObject, SIGNAL
24-
from PyQt4.QtGui import QAction, QIcon, QApplication
23+
from PyQt.QtCore import Qt, QObject
24+
from PyQt.QtWidgets import QAction, QApplication
25+
from PyQt.QtGui import QIcon
26+
27+
from . import resources_rc
2528

2629

2730
class DBManagerPlugin:
@@ -34,7 +37,7 @@ def initGui(self):
3437
self.action = QAction(QIcon(":/db_manager/icon"), QApplication.translate("DBManagerPlugin", "DB Manager"),
3538
self.iface.mainWindow())
3639
self.action.setObjectName("dbManager")
37-
QObject.connect(self.action, SIGNAL("triggered()"), self.run)
40+
self.action.triggered.connect(self.run)
3841
# Add toolbar button and menu item
3942
if hasattr(self.iface, 'addDatabaseToolBarIcon'):
4043
self.iface.addDatabaseToolBarIcon(self.action)
@@ -62,10 +65,10 @@ def unload(self):
6265
def run(self):
6366
# keep opened only one instance
6467
if self.dlg is None:
65-
from db_manager import DBManager
68+
from .db_manager import DBManager
6669

6770
self.dlg = DBManager(self.iface)
68-
QObject.connect(self.dlg, SIGNAL("destroyed(QObject *)"), self.onDestroyed)
71+
self.dlg.destroyed.connect(self.onDestroyed)
6972
self.dlg.show()
7073
self.dlg.raise_()
7174
self.dlg.setWindowState(self.dlg.windowState() & ~Qt.WindowMinimized)

python/plugins/db_manager/db_model.py

Lines changed: 63 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,28 @@
2020
***************************************************************************/
2121
"""
2222

23-
from PyQt4.QtCore import Qt, QObject, SIGNAL, qDebug, QByteArray, QMimeData, QDataStream, QIODevice, QFileInfo, \
24-
QAbstractItemModel, QModelIndex
25-
from PyQt4.QtGui import QApplication, QIcon, QMessageBox
23+
from PyQt.QtCore import Qt, QObject, qDebug, QByteArray, QMimeData, QDataStream, QIODevice, QFileInfo, QAbstractItemModel, QModelIndex, pyqtSignal
24+
from PyQt.QtWidgets import QApplication, QMessageBox
25+
from PyQt.QtGui import QIcon
2626

2727
from .db_plugins import supportedDbTypes, createDbPlugin
28-
from .db_plugins.plugin import BaseError, Table
28+
from .db_plugins.plugin import BaseError, Table, Database
2929
from .dlg_db_error import DlgDbError
3030

31-
import qgis.core
31+
from qgis.core import QgsDataSourceURI, QgsVectorLayer, QgsRasterLayer, QgsMimeDataUtils
32+
33+
from . import resources_rc
34+
35+
try:
36+
from qgis.core import QgsVectorLayerImport
37+
isImportVectorAvail = True
38+
except:
39+
isImportVectorAvail = False
3240

3341

3442
class TreeItem(QObject):
43+
itemRemoved = pyqtSignal()
44+
itemChanged = pyqtSignal()
3545

3646
def __init__(self, data, parent=None):
3747
QObject.__init__(self, parent)
@@ -41,14 +51,14 @@ def __init__(self, data, parent=None):
4151
if parent:
4252
parent.appendChild(self)
4353

44-
def childRemoved(self, child):
45-
self.itemChanged()
54+
def childRemoved(self):
55+
self.itemWasChanged()
4656

47-
def itemChanged(self):
48-
self.emit(SIGNAL("itemChanged"), self)
57+
def itemWasChanged(self):
58+
self.itemChanged.emit()
4959

50-
def itemRemoved(self):
51-
self.emit(SIGNAL("itemRemoved"), self)
60+
def itemWasRemoved(self):
61+
self.itemRemoved.emit()
5262

5363
def populate(self):
5464
self.populated = True
@@ -59,15 +69,15 @@ def getItemData(self):
5969

6070
def appendChild(self, child):
6171
self.childItems.append(child)
62-
self.connect(child, SIGNAL("itemRemoved"), self.childRemoved)
72+
child.itemRemoved.connect(self.childRemoved)
6373

6474
def child(self, row):
6575
return self.childItems[row]
6676

6777
def removeChild(self, row):
6878
if row >= 0 and row < len(self.childItems):
6979
self.childItems[row].itemData.deleteLater()
70-
self.disconnect(self.childItems[row], SIGNAL("itemRemoved"), self.childRemoved)
80+
self.childItems[row].itemRemoved.disconnect(self.childRemoved)
7181
del self.childItems[row]
7282

7383
def childCount(self):
@@ -129,8 +139,8 @@ class ConnectionItem(TreeItem):
129139

130140
def __init__(self, connection, parent=None):
131141
TreeItem.__init__(self, connection, parent)
132-
self.connect(connection, SIGNAL("changed"), self.itemChanged)
133-
self.connect(connection, SIGNAL("deleted"), self.itemRemoved)
142+
connection.changed.connect(self.itemChanged)
143+
connection.deleted.connect(self.itemRemoved)
134144

135145
# load (shared) icon with first instance of table item
136146
if not hasattr(ConnectionItem, 'connectedIcon'):
@@ -158,8 +168,8 @@ def populate(self):
158168
return False
159169

160170
database = connection.database()
161-
self.connect(database, SIGNAL("changed"), self.itemChanged)
162-
self.connect(database, SIGNAL("deleted"), self.itemRemoved)
171+
database.changed.connect(self.itemChanged)
172+
database.deleted.connect(self.itemRemoved)
163173

164174
schemas = database.schemas()
165175
if schemas is not None:
@@ -184,8 +194,8 @@ class SchemaItem(TreeItem):
184194

185195
def __init__(self, schema, parent):
186196
TreeItem.__init__(self, schema, parent)
187-
self.connect(schema, SIGNAL("changed"), self.itemChanged)
188-
self.connect(schema, SIGNAL("deleted"), self.itemRemoved)
197+
schema.changed.connect(self.itemChanged)
198+
schema.deleted.connect(self.itemRemoved)
189199

190200
# load (shared) icon with first instance of schema item
191201
if not hasattr(SchemaItem, 'schemaIcon'):
@@ -214,8 +224,8 @@ class TableItem(TreeItem):
214224

215225
def __init__(self, table, parent):
216226
TreeItem.__init__(self, table, parent)
217-
self.connect(table, SIGNAL("changed"), self.itemChanged)
218-
self.connect(table, SIGNAL("deleted"), self.itemRemoved)
227+
table.changed.connect(self.itemChanged)
228+
table.deleted.connect(self.itemRemoved)
219229
self.populate()
220230

221231
# load (shared) icon with first instance of table item
@@ -273,23 +283,26 @@ def path(self):
273283

274284

275285
class DBModel(QAbstractItemModel):
286+
importVector = pyqtSignal(QgsVectorLayer, Database, QgsDataSourceURI, QModelIndex)
287+
notPopulated = pyqtSignal(QModelIndex)
276288

277289
def __init__(self, parent=None):
290+
global isImportVectorAvail
291+
278292
QAbstractItemModel.__init__(self, parent)
279293
self.treeView = parent
280294
self.header = [self.tr('Databases')]
281295

282-
self.isImportVectorAvail = hasattr(qgis.core, 'QgsVectorLayerImport')
283-
if self.isImportVectorAvail:
284-
self.connect(self, SIGNAL("importVector"), self.importVector)
296+
if isImportVectorAvail:
297+
self.importVector.connect(self.vectorImport)
285298

286299
self.hasSpatialiteSupport = "spatialite" in supportedDbTypes()
287300

288301
self.rootItem = TreeItem(None, None)
289302
for dbtype in supportedDbTypes():
290303
dbpluginclass = createDbPlugin(dbtype)
291304
item = PluginItem(dbpluginclass, self.rootItem)
292-
self.connect(item, SIGNAL("itemChanged"), self.refreshItem)
305+
item.itemChanged.connect(self.refreshItem)
293306

294307
def refreshItem(self, item):
295308
if isinstance(item, TreeItem):
@@ -360,6 +373,8 @@ def data(self, index, role):
360373
return retval
361374

362375
def flags(self, index):
376+
global isImportVectorAvail
377+
363378
if not index.isValid():
364379
return Qt.NoItemFlags
365380

@@ -375,7 +390,7 @@ def flags(self, index):
375390
flags |= Qt.ItemIsDragEnabled
376391

377392
# vectors/tables can be dropped on connected databases to be imported
378-
if self.isImportVectorAvail:
393+
if isImportVectorAvail:
379394
if isinstance(item, ConnectionItem) and item.populated:
380395
flags |= Qt.ItemIsDropEnabled
381396

@@ -471,10 +486,10 @@ def _refreshIndex(self, index, force=False):
471486
if prevPopulated or force:
472487
if item.populate():
473488
for child in item.childItems:
474-
self.connect(child, SIGNAL("itemChanged"), self.refreshItem)
489+
child.itemChanged.connect(self.refreshItem)
475490
self._onDataChanged(index)
476491
else:
477-
self.emit(SIGNAL("notPopulated"), index)
492+
self.notPopulated.emit(index)
478493

479494
except BaseError as e:
480495
item.populated = False
@@ -486,7 +501,7 @@ def _refreshIndex(self, index, force=False):
486501
def _onDataChanged(self, indexFrom, indexTo=None):
487502
if indexTo is None:
488503
indexTo = indexFrom
489-
self.emit(SIGNAL('dataChanged(const QModelIndex &, const QModelIndex &)'), indexFrom, indexTo)
504+
self.dataChanged.emit(indexFrom, indexTo)
490505

491506
QGIS_URI_MIME = "application/x-vnd.qgis.qgis.uri"
492507

@@ -511,11 +526,13 @@ def mimeData(self, indexes):
511526
return mimeData
512527

513528
def dropMimeData(self, data, action, row, column, parent):
529+
global isImportVectorAvail
530+
514531
if action == Qt.IgnoreAction:
515532
return True
516533

517534
# vectors/tables to be imported must be dropped on connected db, schema or table
518-
canImportLayer = self.isImportVectorAvail and parent.isValid() and \
535+
canImportLayer = isImportVectorAvail and parent.isValid() and \
519536
(isinstance(parent.internalPointer(), (SchemaItem, TableItem)) or
520537
(isinstance(parent.internalPointer(), ConnectionItem) and parent.internalPointer().populated))
521538

@@ -538,15 +555,15 @@ def dropMimeData(self, data, action, row, column, parent):
538555
item = index.internalPointer()
539556

540557
conn_name = QFileInfo(filename).fileName()
541-
uri = qgis.core.QgsDataSourceURI()
558+
uri = QgsDataSourceURI()
542559
uri.setDatabase(filename)
543560
item.getItemData().addConnection(conn_name, uri)
544-
item.emit(SIGNAL('itemChanged'), item)
561+
item.itemChanged.emit(item)
545562
added += 1
546563
continue
547564

548565
if canImportLayer:
549-
if qgis.core.QgsRasterLayer.isValidRasterFileName(filename):
566+
if QgsRasterLayer.isValidRasterFileName(filename):
550567
layerType = 'raster'
551568
providerKey = 'gdal'
552569
else:
@@ -558,22 +575,24 @@ def dropMimeData(self, data, action, row, column, parent):
558575
added += 1
559576

560577
if data.hasFormat(self.QGIS_URI_MIME):
561-
for uri in qgis.core.QgsMimeDataUtils.decodeUriList(data):
578+
for uri in QgsMimeDataUtils.decodeUriList(data):
562579
if canImportLayer:
563580
if self.importLayer(uri.layerType, uri.providerKey, uri.name, uri.uri, parent):
564581
added += 1
565582

566583
return added > 0
567584

568585
def importLayer(self, layerType, providerKey, layerName, uriString, parent):
569-
if not self.isImportVectorAvail:
586+
global isImportVectorAvail
587+
588+
if not isImportVectorAvail:
570589
return False
571590

572591
if layerType == 'raster':
573592
return False # not implemented yet
574-
inLayer = qgis.core.QgsRasterLayer(uriString, layerName, providerKey)
593+
inLayer = QgsRasterLayer(uriString, layerName, providerKey)
575594
else:
576-
inLayer = qgis.core.QgsVectorLayer(uriString, layerName, providerKey)
595+
inLayer = QgsVectorLayer(uriString, layerName, providerKey)
577596

578597
if not inLayer.isValid():
579598
# invalid layer
@@ -602,24 +621,26 @@ def importLayer(self, layerType, providerKey, layerName, uriString, parent):
602621

603622
# default pk and geom field name value
604623
if providerKey in ['postgres', 'spatialite']:
605-
inUri = qgis.core.QgsDataSourceURI(inLayer.source())
624+
inUri = QgsDataSourceURI(inLayer.source())
606625
pkCol = inUri.keyColumn()
607626
geomCol = inUri.geometryColumn()
608627

609628
outUri = outDb.uri()
610629
outUri.setDataSource(schema, layerName, geomCol, "", pkCol)
611630

612-
self.emit(SIGNAL("importVector"), inLayer, outDb, outUri, toIndex)
631+
self.importVector.emit(inLayer, outDb, outUri, toIndex)
613632
return True
614633

615634
return False
616635

617-
def importVector(self, inLayer, outDb, outUri, parent):
618-
if not self.isImportVectorAvail:
636+
def vectorImport(self, inLayer, outDb, outUri, parent):
637+
global isImportVectorAvail
638+
639+
if not isImportVectorAvail:
619640
return False
620641

621642
try:
622-
from dlg_import_vector import DlgImportVector
643+
from .dlg_import_vector import DlgImportVector
623644

624645
dlg = DlgImportVector(inLayer, outDb, outUri)
625646
QApplication.restoreOverrideCursor()

python/plugins/db_manager/db_plugins/data_model.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
***************************************************************************/
2121
"""
2222

23-
from PyQt4.QtCore import Qt, QTime, QRegExp, QAbstractTableModel
24-
from PyQt4.QtGui import QFont, QStandardItemModel, QStandardItem, QApplication
23+
from PyQt.QtCore import Qt, QTime, QRegExp, QAbstractTableModel
24+
from PyQt.QtGui import QFont, QStandardItemModel, QStandardItem
25+
from PyQt.QtWidgets import QApplication
2526

2627
from .plugin import DbError
2728

@@ -266,7 +267,7 @@ def __init__(self, parent, editable=False):
266267
QApplication.translate("DBManagerPlugin", 'Column(s)')], editable, parent)
267268

268269
def append(self, constr):
269-
field_names = map(lambda k_v: unicode(k_v[1].name), constr.fields().iteritems())
270+
field_names = map(lambda k_v: unicode(k_v[1].name), iter(constr.fields().items()))
270271
data = [constr.name, constr.type2String(), u", ".join(field_names)]
271272
self.appendRow(self.rowFromData(data))
272273
row = self.rowCount() - 1
@@ -302,7 +303,7 @@ def __init__(self, parent, editable=False):
302303
QApplication.translate("DBManagerPlugin", 'Column(s)')], editable, parent)
303304

304305
def append(self, idx):
305-
field_names = map(lambda k_v1: unicode(k_v1[1].name), idx.fields().iteritems())
306+
field_names = map(lambda k_v1: unicode(k_v1[1].name), iter(idx.fields().items()))
306307
data = [idx.name, u", ".join(field_names)]
307308
self.appendRow(self.rowFromData(data))
308309
row = self.rowCount() - 1

0 commit comments

Comments
 (0)