db_manager: cleanups

This commit is contained in:
Juergen E. Fischer 2016-03-21 04:51:10 +01:00
parent d25c253d87
commit c55f8b73f0
34 changed files with 141 additions and 157 deletions

View File

@ -24,7 +24,7 @@ The content of this file is based on
import functools
from PyQt.QtCore import QObject, Qt, QSettings, QByteArray, QSize
from PyQt.QtCore import Qt, QSettings, QByteArray, QSize
from PyQt.QtWidgets import QMainWindow, QApplication, QMenu, QTabWidget, QGridLayout, QSpacerItem, QSizePolicy, QDockWidget, QStatusBar, QMenuBar, QToolBar, QTabBar
from PyQt.QtGui import QIcon, QKeySequence
@ -214,7 +214,8 @@ class DBManager(QMainWindow):
self._registeredDbActions = {}
if callback is not None:
invoke_callback = lambda x: self.invokeCallback(callback)
def invoke_callback(x):
return self.invokeCallback(callback)
if menuName is None or menuName == "":
self.addAction(action)

View File

@ -20,11 +20,11 @@ email : brush.tyler@gmail.com
***************************************************************************/
"""
from PyQt.QtCore import Qt, QObject
from PyQt.QtCore import Qt
from PyQt.QtWidgets import QAction, QApplication
from PyQt.QtGui import QIcon
from . import resources_rc
from . import resources_rc # NOQA
class DBManagerPlugin:

View File

@ -30,10 +30,10 @@ from .dlg_db_error import DlgDbError
from qgis.core import QgsDataSourceURI, QgsVectorLayer, QgsRasterLayer, QgsMimeDataUtils
from . import resources_rc
from . import resources_rc # NOQA
try:
from qgis.core import QgsVectorLayerImport
from qgis.core import QgsVectorLayerImport # NOQA
isImportVectorAvail = True
except:
isImportVectorAvail = False
@ -491,7 +491,7 @@ class DBModel(QAbstractItemModel):
else:
self.notPopulated.emit(index)
except BaseError as e:
except BaseError:
item.populated = False
return

View File

@ -42,12 +42,12 @@ def initDbPluginList():
continue
try:
exec (u"from .%s import plugin as mod" % name, globals())
exec(u"from .%s import plugin as mod" % name, globals())
except ImportError as e:
DBPLUGIN_ERRORS.append(u"%s: %s" % (name, unicode(e)))
continue
pluginclass = mod.classFactory()
pluginclass = mod.classFactory() # NOQA
SUPPORTED_DBTYPES[pluginclass.typeName()] = pluginclass
return len(SUPPORTED_DBTYPES) > 0

View File

@ -112,7 +112,7 @@ class DBConnector:
if c and not c.closed:
c.close()
except self.error_types() as e:
except self.error_types():
pass
return
@ -168,9 +168,9 @@ class DBConnector:
def _get_cursor_columns(self, c):
try:
if c.description:
return map(lambda x: x[0], c.description)
return [x[0] for x in c.description]
except self.connection_error_types() + self.execution_error_types() as e:
except self.connection_error_types() + self.execution_error_types():
return []
@classmethod

View File

@ -78,9 +78,9 @@ class BaseTableModel(QAbstractTableModel):
# too much data to display, elide the string
val = val[:300]
try:
return unicode(val) # convert to unicode
return unicode(val) # convert to unicode
except UnicodeDecodeError:
return unicode(val, 'utf-8', 'replace') # convert from utf8 and replace errors (if any)
return unicode(val, 'utf-8', 'replace') # convert from utf8 and replace errors (if any)
def headerData(self, section, orientation, role):
if role != Qt.DisplayRole:
@ -100,7 +100,7 @@ class TableDataModel(BaseTableModel):
self.db = table.database().connector
self.table = table
fieldNames = map(lambda x: x.name, table.fields())
fieldNames = [x.name for x in table.fields()]
BaseTableModel.__init__(self, fieldNames, None, parent)
# get table fields
@ -267,7 +267,7 @@ class TableConstraintsModel(SimpleTableModel):
QApplication.translate("DBManagerPlugin", 'Column(s)')], editable, parent)
def append(self, constr):
field_names = map(lambda k_v: unicode(k_v[1].name), iter(constr.fields().items()))
field_names = [unicode(k_v[1].name) for k_v in iter(list(constr.fields().items()))]
data = [constr.name, constr.type2String(), u", ".join(field_names)]
self.appendRow(self.rowFromData(data))
row = self.rowCount() - 1
@ -303,7 +303,7 @@ class TableIndexesModel(SimpleTableModel):
QApplication.translate("DBManagerPlugin", 'Column(s)')], editable, parent)
def append(self, idx):
field_names = map(lambda k_v1: unicode(k_v1[1].name), iter(idx.fields().items()))
field_names = [unicode(k_v1[1].name) for k_v1 in iter(list(idx.fields().items()))]
data = [idx.name, u", ".join(field_names)]
self.appendRow(self.rowFromData(data))
row = self.rowCount() - 1

View File

@ -21,7 +21,7 @@ email : jef at norbit dot de
"""
from PyQt.QtCore import QVariant, QDate, QTime, QDateTime, QByteArray
from PyQt4.QtSql import QSqlDatabase, QSqlQuery, QSqlField
from PyQt.QtSql import QSqlDatabase, QSqlQuery, QSqlField
paramstyle = "qmark"
threadsafety = 1

View File

@ -24,7 +24,7 @@ The content of this file is based on
"""
from PyQt.QtCore import QPyNullVariant
from PyQt4.QtSql import QSqlDatabase
from PyQt.QtSql import QSqlDatabase
from ..connector import DBConnector
from ..plugin import ConnectionError, DbError, Table
@ -101,8 +101,7 @@ class OracleDBConnector(DBConnector):
if (os.path.isfile(sqlite_cache_file)):
try:
self.cache_connection = sqlite3.connect(sqlite_cache_file)
except sqlite3.Error as e:
except sqlite3.Error:
self.cache_connection = False
# Find if there is cache for our connection:
@ -117,7 +116,7 @@ class OracleDBConnector(DBConnector):
if not has_cached:
self.cache_connection = False
except sqlite3.Error as e:
except sqlite3.Error:
self.cache_connection = False
self._checkSpatial()
@ -766,7 +765,7 @@ class OracleDBConnector(DBConnector):
try:
c = self._execute(None, query)
except DbError as e: # handle error views or other problems
except DbError: # handle error views or other problems
return [QGis.WKBUnknown], [-1]
rows = self._fetchall(c)
@ -1071,7 +1070,7 @@ class OracleDBConnector(DBConnector):
try:
c = self._execute(None, sql)
except DbError as e: # no spatial index on table, try aggregation
except DbError: # no spatial index on table, try aggregation
return None
res = self._fetchone(c)
@ -1106,7 +1105,7 @@ class OracleDBConnector(DBConnector):
sql = request.format(where, dimension)
try:
c = self._execute(None, sql)
except DbError as e: # no statistics for the current table
except DbError: # no statistics for the current table
return None
res_d = self._fetchone(c)
@ -1160,7 +1159,7 @@ class OracleDBConnector(DBConnector):
None,
(u"SELECT CS_NAME FROM MDSYS.CS_SRS WHERE"
u" SRID = {}".format(srid)))
except DbError as e:
except DbError:
return
sr = self._fetchone(c)
c.close()
@ -1212,8 +1211,6 @@ class OracleDBConnector(DBConnector):
"""Delete table and its reference in sdo_geom_metadata."""
schema, tablename = self.getSchemaTableName(table)
schema_part = u"AND owner = {} ".format(
self.quoteString(schema)) if schema else ""
if self.isVectorTable(table):
self.deleteMetadata(table)
@ -1283,8 +1280,6 @@ class OracleDBConnector(DBConnector):
def deleteView(self, view):
"""Delete a view."""
schema, tablename = self.getSchemaTableName(view)
schema_part = u"AND owner = {} ".format(
self.quoteString(schema)) if schema else ""
if self.isVectorTable(view):
self.deleteMetadata(view)
@ -1645,7 +1640,7 @@ class OracleDBConnector(DBConnector):
if c:
c.close()
except self.error_types() as e:
except self.error_types():
pass
return
@ -1682,11 +1677,6 @@ class OracleDBConnector(DBConnector):
# def _get_cursor_columns(self, c):
# pass
def getQueryBuilderDictionary(self):
from .sql_dictionary import getQueryBuilderDictionary
return getQueryBuilderDictionary()
def getSqlDictionary(self):
"""Returns the dictionary for SQL dialog."""
from .sql_dictionary import getSqlDictionary

View File

@ -219,7 +219,7 @@ class ORTableInfo(TableInfo):
# primary key defined?
if (not self.table.isView
and self.table.objectType != u"MATERIALIZED VIEW"):
pk = filter(lambda fld: fld.primaryKey, self.table.fields())
pk = [fld for fld in self.table.fields() if fld.primaryKey]
if len(pk) <= 0:
ret.append(
HtmlParagraph(QApplication.translate(

View File

@ -38,7 +38,7 @@ from ..plugin import ConnectionError, InvalidDataException, DBPlugin, \
from qgis.core import QgsCredentials
from . import resources_rc
from . import resources_rc # NOQA
def classFactory():
@ -91,12 +91,7 @@ class OracleDBPlugin(DBPlugin):
uri = QgsDataSourceURI()
settingsList = ["host", "port", "database", "username", "password"]
host, port, database, username, password = map(
lambda x: settings.value(x, "", type=str), settingsList)
# qgis1.5 use 'savePassword' instead of 'save' setting
savedPassword = settings.value("save", False, type=bool) or \
settings.value("savePassword", False, type=bool)
host, port, database, username, password = [settings.value(x, "", type=str) for x in settingsList]
# get all of the connexion options
@ -348,14 +343,14 @@ class ORTable(Table):
QApplication.setOverrideCursor(Qt.WaitCursor)
if index_action == "rebuild":
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.rebuildTableIndex(
(self.schemaName(), self.name), index_name)
self.refreshIndexes()
return True
elif action.startswith(u"mview/"):
if action == "mview/refresh":
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.refreshMView(
(self.schemaName(), self.name))
return True
@ -391,7 +386,7 @@ class ORTable(Table):
ret = []
# add the pk
pkcols = filter(lambda x: x.primaryKey, self.fields())
pkcols = [x for x in self.fields() if x.primaryKey]
if len(pkcols) == 1:
ret.append(pkcols[0])
@ -452,7 +447,7 @@ class ORVectorTable(ORTable, VectorTable):
def runAction(self, action):
if action.startswith("extent/"):
if action == "extent/update":
self.emitAboutToChange()
self.aboutToChange.emit()
self.updateExtent()
return True

View File

@ -289,10 +289,10 @@ def getSqlDictionary(spatial=True):
def getQueryBuilderDictionary():
# concat functions
def ff(l):
return filter(lambda s: s[0] != '*', l)
return [s for s in l if s[0] != '*']
def add_paren(l):
return map(lambda s: s + "(", l)
return [s + "(" for s in l]
foo = sorted(
add_paren(

View File

@ -39,7 +39,7 @@ class BaseError(Exception):
msg = e
if not isinstance(msg, unicode):
msg = unicode(msg, 'utf-8', 'replace') # convert from utf8 and replace errors (if any)
msg = unicode(msg, 'utf-8', 'replace') # convert from utf8 and replace errors (if any)
self.msg = msg
Exception.__init__(self, msg)
@ -198,9 +198,6 @@ class DbItemObject(QObject):
def refresh(self):
self.changed.emit() # refresh the item data reading them from the db
def emitAboutToChange(self):
self.aboutToChange.emit()
def info(self):
pass
@ -240,7 +237,7 @@ class Database(DbItemObject):
return self.connector.publicUri()
def delete(self):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.connection().remove()
if ret is not False:
self.deleted.emit()
@ -300,7 +297,7 @@ class Database(DbItemObject):
except ImportError:
pass
else:
load(self, mainWindow)
load(self, mainWindow) # NOQA
def registerDatabaseActions(self, mainWindow):
action = QAction(QApplication.translate("DBManagerPlugin", "&Re-connect"), self)
@ -337,7 +334,10 @@ class Database(DbItemObject):
if self.schemas() is not None:
action = QAction(QApplication.translate("DBManagerPlugin", "&Move to schema"), self)
action.setMenu(QMenu(mainWindow))
invoke_callback = lambda: mainWindow.invokeCallback(self.prepareMenuMoveTableToSchemaActionSlot)
def invoke_callback():
return mainWindow.invokeCallback(self.prepareMenuMoveTableToSchemaActionSlot)
action.menu().aboutToShow.connect(invoke_callback)
mainWindow.registerAction(action, QApplication.translate("DBManagerPlugin", "&Table"))
@ -399,7 +399,7 @@ class Database(DbItemObject):
def schemas(self):
schemas = self.connector.getSchemas()
if schemas is not None:
schemas = map(lambda x: self.schemasFactory(x, self), schemas)
schemas = [self.schemasFactory(x, self) for x in schemas]
return schemas
def createSchema(self, name):
@ -470,7 +470,8 @@ class Database(DbItemObject):
def prepareMenuMoveTableToSchemaActionSlot(self, item, menu, mainWindow):
""" populate menu with schemas """
slot = lambda x: lambda: mainWindow.invokeCallback(self.moveTableToSchemaActionSlot, x)
def slot(x):
return lambda: mainWindow.invokeCallback(self.moveTableToSchemaActionSlot, x)
menu.clear()
for schema in self.schemas():
@ -508,12 +509,12 @@ class Database(DbItemObject):
def tables(self, schema=None, sys_tables=False):
tables = self.connector.getTables(schema.name if schema else None, sys_tables)
if tables is not None:
tables = map(lambda x: self.tablesFactory(x, self, schema), tables)
tables = [self.tablesFactory(x, self, schema) for x in tables]
return tables
def createTable(self, table, fields, schema=None):
field_defs = map(lambda x: x.definition(), fields)
pkeys = filter(lambda x: x.primaryKey, fields)
field_defs = [x.definition() for x in fields]
pkeys = [x for x in fields if x.primaryKey]
pk_name = pkeys[0].name if len(pkeys) > 0 else None
ret = self.connector.createTable((schema, table), field_defs, pk_name)
@ -571,14 +572,14 @@ class Schema(DbItemObject):
return self.database().tables(self)
def delete(self):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.deleteSchema(self.name)
if ret is not False:
self.deleted.emit()
return ret
def rename(self, new_name):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.renameSchema(self.name, new_name)
if ret is not False:
self.name = new_name
@ -626,7 +627,7 @@ class Table(DbItemObject):
return self.database().connector.quoteId((self.schemaName(), self.name))
def delete(self):
self.emitAboutToChange()
self.aboutToChange.emit()
if self.isView:
ret = self.database().connector.deleteView((self.schemaName(), self.name))
else:
@ -636,7 +637,7 @@ class Table(DbItemObject):
return ret
def rename(self, new_name):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.renameTable((self.schemaName(), self.name), new_name)
if ret is not False:
self.name = new_name
@ -644,14 +645,14 @@ class Table(DbItemObject):
return ret
def empty(self):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.emptyTable((self.schemaName(), self.name))
if ret is not False:
self.refreshRowCount()
return ret
def moveToSchema(self, schema):
self.emitAboutToChange()
self.aboutToChange.emit()
if self.schema() == schema:
return True
ret = self.database().connector.moveTableToSchema((self.schemaName(), self.name), schema.name)
@ -694,7 +695,7 @@ class Table(DbItemObject):
ret = []
# add the pk
pkcols = filter(lambda x: x.primaryKey, self.fields())
pkcols = [x for x in self.fields() if x.primaryKey]
if len(pkcols) == 1:
ret.append(pkcols[0])
@ -726,7 +727,7 @@ class Table(DbItemObject):
if self._fields is None:
fields = self.database().connector.getTableFields((self.schemaName(), self.name))
if fields is not None:
self._fields = map(lambda x: self.tableFieldsFactory(x, self), fields)
self._fields = [self.tableFieldsFactory(x, self) for x in fields]
return self._fields
def refreshFields(self):
@ -734,14 +735,14 @@ class Table(DbItemObject):
self.refresh()
def addField(self, fld):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.addTableColumn((self.schemaName(), self.name), fld.definition())
if ret is not False:
self.refreshFields()
return ret
def deleteField(self, fld):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.deleteTableColumn((self.schemaName(), self.name), fld.name)
if ret is not False:
self.refreshFields()
@ -750,7 +751,7 @@ class Table(DbItemObject):
return ret
def addGeometryColumn(self, geomCol, geomType, srid, dim, createSpatialIndex=False):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.addGeometryColumn((self.schemaName(), self.name), geomCol, geomType, srid, dim)
if not ret:
return False
@ -772,7 +773,7 @@ class Table(DbItemObject):
if self._constraints is None:
constraints = self.database().connector.getTableConstraints((self.schemaName(), self.name))
if constraints is not None:
self._constraints = map(lambda x: self.tableConstraintsFactory(x, self), constraints)
self._constraints = [self.tableConstraintsFactory(x, self) for x in constraints]
return self._constraints
def refreshConstraints(self):
@ -780,7 +781,7 @@ class Table(DbItemObject):
self.refresh()
def addConstraint(self, constr):
self.emitAboutToChange()
self.aboutToChange.emit()
if constr.type == TableConstraint.TypePrimaryKey:
ret = self.database().connector.addTablePrimaryKey((self.schemaName(), self.name),
constr.fields()[constr.columns[0]].name)
@ -794,7 +795,7 @@ class Table(DbItemObject):
return ret
def deleteConstraint(self, constr):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.deleteTableConstraint((self.schemaName(), self.name), constr.name)
if ret is not False:
self.refreshConstraints()
@ -807,7 +808,7 @@ class Table(DbItemObject):
if self._indexes is None:
indexes = self.database().connector.getTableIndexes((self.schemaName(), self.name))
if indexes is not None:
self._indexes = map(lambda x: self.tableIndexesFactory(x, self), indexes)
self._indexes = [self.tableIndexesFactory(x, self) for x in indexes]
return self._indexes
def refreshIndexes(self):
@ -815,7 +816,7 @@ class Table(DbItemObject):
self.refresh()
def addIndex(self, idx):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.createTableIndex((self.schemaName(), self.name), idx.name,
idx.fields()[idx.columns[0]].name)
if ret is not False:
@ -823,7 +824,7 @@ class Table(DbItemObject):
return ret
def deleteIndex(self, idx):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = self.database().connector.deleteTableIndex((self.schemaName(), self.name), idx.name)
if ret is not False:
self.refreshIndexes()
@ -836,7 +837,7 @@ class Table(DbItemObject):
if self._triggers is None:
triggers = self.database().connector.getTableTriggers((self.schemaName(), self.name))
if triggers is not None:
self._triggers = map(lambda x: self.tableTriggersFactory(x, self), triggers)
self._triggers = [self.tableTriggersFactory(x, self) for x in triggers]
return self._triggers
def refreshTriggers(self):
@ -850,7 +851,7 @@ class Table(DbItemObject):
if self._rules is None:
rules = self.database().connector.getTableRules((self.schemaName(), self.name))
if rules is not None:
self._rules = map(lambda x: self.tableRulesFactory(x, self), rules)
self._rules = [self.tableRulesFactory(x, self) for x in rules]
return self._rules
def refreshRules(self):
@ -858,7 +859,7 @@ class Table(DbItemObject):
self.refresh()
def refreshRowCount(self):
self.emitAboutToChange()
self.aboutToChange.emit()
prevRowCount = self.rowCount
try:
self.rowCount = self.database().connector.getTableRowCount((self.schemaName(), self.name))
@ -891,7 +892,7 @@ class Table(DbItemObject):
if trigger_action == "enable" or trigger_action == "disable":
enable = trigger_action == "enable"
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.enableAllTableTriggers(enable, (self.schemaName(), self.name))
self.refreshTriggers()
return True
@ -912,14 +913,14 @@ class Table(DbItemObject):
QApplication.setOverrideCursor(Qt.WaitCursor)
if trigger_action == "delete":
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.deleteTableTrigger(trigger_name, (self.schemaName(), self.name))
self.refreshTriggers()
return True
elif trigger_action == "enable" or trigger_action == "disable":
enable = trigger_action == "enable"
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.enableTableTrigger(trigger_name, enable, (self.schemaName(), self.name))
self.refreshTriggers()
return True
@ -956,7 +957,7 @@ class VectorTable(Table):
return False
def createSpatialIndex(self, geom_column=None):
self.emitAboutToChange()
self.aboutToChange.emit()
geom_column = geom_column if geom_column is not None else self.geomColumn
ret = self.database().connector.createSpatialIndex((self.schemaName(), self.name), geom_column)
if ret is not False:
@ -964,7 +965,7 @@ class VectorTable(Table):
return ret
def deleteSpatialIndex(self, geom_column=None):
self.emitAboutToChange()
self.aboutToChange.emit()
geom_column = geom_column if geom_column is not None else self.geomColumn
ret = self.database().connector.deleteSpatialIndex((self.schemaName(), self.name), geom_column)
if ret is not False:

View File

@ -612,7 +612,7 @@ class PostGisDBConnector(DBConnector):
try:
c = self._execute(None, sql)
except DbError as e: # no statistics for the current table
except DbError: # No statistics for the current table
return
res = self._fetchone(c)
self._close_cursor(c)
@ -640,7 +640,7 @@ class PostGisDBConnector(DBConnector):
try:
c = self._execute(None, "SELECT srtext FROM spatial_ref_sys WHERE srid = '%d'" % srid)
except DbError as e:
except DbError:
return
sr = self._fetchone(c)
self._close_cursor(c)

View File

@ -20,7 +20,6 @@ email : brush.tyler@gmail.com
***************************************************************************/
"""
from PyQt4.QtCore import SIGNAL
from ..data_model import TableDataModel, SqlResultModel

View File

@ -106,7 +106,7 @@ class PGTableInfo(TableInfo):
# primary key defined?
if not self.table.isView:
if len(filter(lambda fld: fld.primaryKey, self.table.fields())) <= 0:
if len([fld for fld in self.table.fields() if fld.primaryKey]) <= 0:
ret.append(HtmlParagraph(
QApplication.translate("DBManagerPlugin", "<warning> No primary key defined for this table!")))

View File

@ -33,7 +33,7 @@ from ..plugin import ConnectionError, InvalidDataException, DBPlugin, Database,
import re
from . import resources_rc
from . import resources_rc # NOQA
def classFactory():
@ -78,7 +78,7 @@ class PostGisDBPlugin(DBPlugin):
uri = QgsDataSourceURI()
settingsList = ["service", "host", "port", "database", "username", "password", "authcfg"]
service, host, port, database, username, password, authcfg = map(lambda x: settings.value(x, "", type=str), settingsList)
service, host, port, database, username, password, authcfg = [settings.value(x, "", type=str) for x in settingsList]
useEstimatedMetadata = settings.value("estimatedMetadata", False, type=bool)
sslmode = settings.value("sslmode", QgsDataSourceURI.SSLprefer, type=int)
@ -94,7 +94,7 @@ class PostGisDBPlugin(DBPlugin):
try:
return self.connectToUri(uri)
except ConnectionError as e:
except ConnectionError:
return False
@ -163,7 +163,7 @@ class PGTable(Table):
self.estimatedRowCount = int(self.estimatedRowCount)
def runVacuumAnalyze(self):
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.runVacuumAnalyze((self.schemaName(), self.name))
# TODO: change only this item, not re-create all the tables in the schema/database
self.schema().refresh() if self.schema() else self.database().refresh()
@ -193,7 +193,7 @@ class PGTable(Table):
QApplication.setOverrideCursor(Qt.WaitCursor)
if rule_action == "delete":
self.emitAboutToChange()
self.aboutToChange.emit()
self.database().connector.deleteTableRule(rule_name, (self.schemaName(), self.name))
self.refreshRules()
return True
@ -226,12 +226,12 @@ class PGTable(Table):
return PGTableDataModel(self, parent)
def delete(self):
self.emitAboutToChange()
self.aboutToChange.emit()
if self.isView:
ret = self.database().connector.deleteView((self.schemaName(), self.name), self._relationType == 'm')
else:
ret = self.database().connector.deleteTable((self.schemaName(), self.name))
if ret is not False:
if not ret:
self.deleted.emit()
return ret

View File

@ -31,7 +31,7 @@ def load(dbplugin, mainwindow):
continue
try:
exec (u"from .%s import load" % name)
except ImportError as e:
except ImportError:
continue
load(dbplugin, mainwindow)

View File

@ -86,7 +86,7 @@ class DlgVersioning(QDialog, Ui_DlgVersioning):
schemas = self.db.schemas()
if schemas is not None:
schema_name = self.cboSchema.currentText()
matching_schemas = filter(lambda x: x.name == schema_name, schemas)
matching_schemas = [x for x in schemas if x.name == schema_name]
tables = matching_schemas[0].tables() if len(matching_schemas) > 0 else []
else:
tables = self.db.tables()
@ -115,13 +115,13 @@ class DlgVersioning(QDialog, Ui_DlgVersioning):
self.colStart = self.db.connector.quoteId(self.editStart.text())
self.colEnd = self.db.connector.quoteId(self.editEnd.text())
self.columns = map(lambda x: self.db.connector.quoteId(x.name), self.table.fields())
self.columns = [self.db.connector.quoteId(x.name) for x in self.table.fields()]
self.colOrigPkey = None
for constr in self.table.constraints():
if constr.type == constr.TypePrimaryKey:
self.origPkeyName = self.db.connector.quoteId(constr.name)
self.colOrigPkey = map(lambda x_y: self.db.connector.quoteId(x_y[1].name), iter(constr.fields().items()))
self.colOrigPkey = [self.db.connector.quoteId(x_y[1].name) for x_y in iter(list(constr.fields().items()))]
break
if self.colOrigPkey is None:
@ -188,7 +188,7 @@ class DlgVersioning(QDialog, Ui_DlgVersioning):
def sql_functions(self):
cols = ",".join(self.columns)
old_cols = ",".join(map(lambda x: u"OLD." + x, self.columns))
old_cols = ",".join([u"OLD." + x for x in self.columns])
sql = u"""
CREATE OR REPLACE FUNCTION %(func_at_time)s(timestamp)
@ -247,8 +247,8 @@ FOR EACH ROW EXECUTE PROCEDURE %(func_insert)s();""" % \
def sql_updatesView(self):
cols = ",".join(self.columns)
new_cols = ",".join(map(lambda x: u"NEW." + x, self.columns))
assign_cols = ",".join(map(lambda x: u"%s = NEW.%s" % (x, x), self.columns))
new_cols = ",".join([u"NEW." + x for x in self.columns])
assign_cols = ",".join([u"%s = NEW.%s" % (x, x) for x in self.columns])
return u"""
CREATE OR REPLACE RULE "_DELETE" AS ON DELETE TO %(view)s DO INSTEAD

View File

@ -202,10 +202,10 @@ def getSqlDictionary(spatial=True):
def getQueryBuilderDictionary():
# concat functions
def ff(l):
return filter(lambda s: s[0] != '*', l)
return [s for s in l if s[0] != '*']
def add_paren(l):
return map(lambda s: s + "(", l)
return [s + "(" for s in l]
foo = sorted(add_paren(ff(list(set.union(set(functions), set(postgis_functions))))))
m = sorted(add_paren(ff(math_functions)))
agg = sorted(add_paren(ff(aggregate_functions)))

View File

@ -61,7 +61,7 @@ class SpatiaLiteDBConnector(DBConnector):
return False
try:
conn = sqlite.connect(path)
except self.connection_error_types() as e:
except self.connection_error_types():
return False
conn.close()
return True
@ -88,7 +88,7 @@ class SpatiaLiteDBConnector(DBConnector):
v = c.fetchone()[0]
self.has_geometry_columns = v == 1 or v == 3
self.has_spatialite4 = v == 3
except Exception as e:
except Exception:
self.has_geometry_columns = False
self.has_spatialite4 = False
@ -108,7 +108,7 @@ class SpatiaLiteDBConnector(DBConnector):
result = self._execute(None, sql).fetchone()[0] == 1
except ConnectionError:
result = False
except Exception as e:
except Exception:
# SpatiaLite < 4.2 does not have HasGeoPackage() function
result = False
@ -325,7 +325,7 @@ class SpatiaLiteDBConnector(DBConnector):
"""
if self.is_gpkg:
return [] # Not implemented
return [] # Not implemented
if not self.has_geometry_columns:
return []
if not self.has_raster:
@ -488,7 +488,7 @@ class SpatiaLiteDBConnector(DBConnector):
if self.isRasterTable(table):
return False
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
c = self._get_cursor()
sql = u"DROP TABLE %s" % self.quoteId(table)
@ -503,7 +503,7 @@ class SpatiaLiteDBConnector(DBConnector):
if self.isRasterTable(table):
return False
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
sql = u"DELETE FROM %s" % self.quoteId(table)
self._execute_and_commit(sql)
@ -517,7 +517,7 @@ class SpatiaLiteDBConnector(DBConnector):
if self.isRasterTable(table):
return False
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
c = self._get_cursor()
@ -558,7 +558,7 @@ class SpatiaLiteDBConnector(DBConnector):
def createSpatialView(self, view, query):
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
self.createView(view, query)
# get type info about the view
@ -639,7 +639,7 @@ class SpatiaLiteDBConnector(DBConnector):
def isGeometryColumn(self, table, column):
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
c = self._get_cursor()
schema, tablename = self.getSchemaTableName(table)
@ -650,7 +650,7 @@ class SpatiaLiteDBConnector(DBConnector):
def addGeometryColumn(self, table, geom_column='geometry', geom_type='POINT', srid=-1, dim=2):
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
schema, tablename = self.getSchemaTableName(table)
sql = u"SELECT AddGeometryColumn(%s, %s, %d, %s, %s)" % (
@ -689,7 +689,7 @@ class SpatiaLiteDBConnector(DBConnector):
if self.isRasterTable(table):
return False
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
schema, tablename = self.getSchemaTableName(table)
sql = u"SELECT CreateSpatialIndex(%s, %s)" % (self.quoteString(tablename), self.quoteString(geom_column))
@ -699,7 +699,7 @@ class SpatiaLiteDBConnector(DBConnector):
if self.isRasterTable(table):
return False
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
schema, tablename = self.getSchemaTableName(table)
try:
@ -714,7 +714,7 @@ class SpatiaLiteDBConnector(DBConnector):
def hasSpatialIndex(self, table, geom_column='geometry'):
if self.is_gpkg:
return False # Not implemented
return False # Not implemented
if not self.has_geometry_columns or self.isRasterTable(table):
return False
c = self._get_cursor()

View File

@ -32,7 +32,7 @@ from qgis.gui import QgsMessageBar
from ..plugin import DBPlugin, Database, Table, VectorTable, RasterTable, TableField, TableIndex, TableTrigger, \
InvalidDataException
from . import resources_rc
from . import resources_rc # NOQA
def classFactory():
@ -236,14 +236,14 @@ class SLVectorTable(SLTable, VectorTable):
return self.database().connector.hasSpatialIndex((self.schemaName(), self.name), geom_column)
def createSpatialIndex(self, geom_column=None):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = VectorTable.createSpatialIndex(self, geom_column)
if ret is not False:
self.database().refresh()
return ret
def deleteSpatialIndex(self, geom_column=None):
self.emitAboutToChange()
self.aboutToChange.emit()
ret = VectorTable.deleteSpatialIndex(self, geom_column)
if ret is not False:
self.database().refresh()

View File

@ -147,10 +147,10 @@ def getSqlDictionary(spatial=True):
def getQueryBuilderDictionary():
# concat functions
def ff(l):
return filter(lambda s: s[0] != '*', l)
return [s for s in l if s[0] != '*']
def add_paren(l):
return map(lambda s: s + "(", l)
return [s + "(" for s in l]
foo = sorted(add_paren(ff(list(set.union(set(functions), set(spatialite_functions))))))
m = sorted(add_paren(ff(math_functions)))
agg = sorted(add_paren(ff(aggregate_functions)))

View File

@ -64,7 +64,7 @@ class VLayerRegistry:
@classmethod
def instance(cls):
if cls._instance == None:
if cls._instance is None:
cls._instance = VLayerRegistry()
return cls._instance

View File

@ -36,7 +36,7 @@ class LDatabaseInfo(DatabaseInfo):
return HtmlTable(tbl)
def generalInfo(self):
info = self.db.connector.getInfo()
self.db.connector.getInfo()
tbl = [
(QApplication.translate("DBManagerPlugin", "SQLite version:"), "3")
]

View File

@ -28,7 +28,7 @@ from qgis.core import QgsVectorLayer, QgsMapLayerRegistry
from ..plugin import DBPlugin, Database, Table, VectorTable, TableField
from . import resources_rc
from . import resources_rc # NOQA
def classFactory():

View File

@ -164,10 +164,10 @@ def getSqlDictionary(spatial=True):
def getQueryBuilderDictionary():
# concat functions
def ff(l):
return filter(lambda s: s[0] != '*', l)
return [s for s in l if s[0] != '*']
def add_paren(l):
return map(lambda s: s + "(", l)
return [s + "(" for s in l]
foo = sorted(add_paren(ff(list(set.union(set(functions), set(spatialite_functions), set(qgis_functions))))))
m = sorted(add_paren(ff(math_functions)))
agg = sorted(add_paren(ff(aggregate_functions)))

View File

@ -20,13 +20,13 @@ email : brush.tyler@gmail.com
***************************************************************************/
"""
from PyQt.QtCore import pyqtSignal, QObject
from PyQt.QtCore import pyqtSignal
from PyQt.QtWidgets import QWidget, QTreeView, QMenu, QLabel
from qgis.core import QgsMapLayerRegistry
from qgis.core import QgsMapLayerRegistry, QgsMessageLog
from qgis.gui import QgsMessageBar, QgsMessageBarItem
from .db_model import DBModel, PluginItem, TreeItem
from .db_model import DBModel, PluginItem
from .db_plugins.plugin import DBPlugin, Schema, Table
@ -169,10 +169,8 @@ class DBTree(QTreeView):
"%1 is an invalid layer and cannot be loaded. Please check the <a href=\"#messageLog\">message log</a> for further info.").replace(
"%1", layer.publicSource()), self.mainWindow.infoBar)
msgLabel.setWordWrap(True)
self.connect(msgLabel, SIGNAL("linkActivated( QString )"),
self.mainWindow.iface.mainWindow().findChild(QWidget, "MessageLog"), SLOT("show()"))
self.connect(msgLabel, SIGNAL("linkActivated( QString )"),
self.mainWindow.iface.mainWindow(), SLOT("raise()"))
msgLabel.linkActivated.connect(self.mainWindow.iface.mainWindow().findChild(QWidget, "MessageLog").show)
msgLabel.linkActivated.connect(self.mainWindow.iface.mainWindow().raise_)
self.mainWindow.infoBar.pushItem(QgsMessageBarItem(msgLabel, QgsMessageBar.WARNING))
def reconnect(self):

View File

@ -22,7 +22,7 @@ The content of this file is based on
***************************************************************************/
"""
from PyQt.QtCore import Qt, QObject, QSettings, QFileInfo
from PyQt.QtCore import Qt, QSettings, QFileInfo
from PyQt.QtWidgets import QDialog, QFileDialog, QMessageBox, QApplication
from PyQt.QtGui import QCursor
@ -39,7 +39,7 @@ class DlgExportVector(QDialog, Ui_Dialog):
self.db = inDb
self.setupUi(self)
vectorFilterName = "lastVectorFileFilter" # "lastRasterFileFilter"
vectorFilterName = "lastVectorFileFilter" # "lastRasterFileFilter"
self.lastUsedVectorFilterSettingsKey = u"/UI/{0}".format(vectorFilterName)
self.lastUsedVectorDirSettingsKey = u"/UI/{0}Dir".format(vectorFilterName)

View File

@ -23,7 +23,6 @@ __copyright__ = '(C) 2012, Giuseppe Sucameli'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
from PyQt4.QtCore import SIGNAL
from PyQt.QtWidgets import QDialog, QMessageBox
from .db_plugins.plugin import TableField

View File

@ -22,7 +22,7 @@ The content of this file is based on
***************************************************************************/
"""
from PyQt.QtCore import Qt, QObject, QSettings, QFileInfo
from PyQt.QtCore import Qt, QSettings, QFileInfo
from PyQt.QtWidgets import QDialog, QFileDialog, QMessageBox, QApplication
from PyQt.QtGui import QCursor
@ -68,9 +68,9 @@ class DlgImportVector(QDialog, Ui_Dialog):
if mode == self.ASK_FOR_INPUT_MODE:
self.btnChooseInputFile.clicked.connect(self.chooseInputFile)
# QObject.connect( self.cboInputLayer.lineEdit(), SIGNAL("editingFinished()"), self.updateInputLayer )
# self.cboInputLayer.lineEdit().editingFinished.connect(self.updateInputLayer)
self.cboInputLayer.editTextChanged.connect(self.inputPathChanged)
# QObject.connect( self.cboInputLayer, SIGNAL("currentIndexChanged(int)"), self.updateInputLayer )
# self.cboInputLayer.currentIndexChanged.connect(self.updateInputLayer)
self.btnUpdateInputLayer.clicked.connect(self.updateInputLayer)
self.editPrimaryKey.setText(self.default_pk)
@ -226,7 +226,7 @@ class DlgImportVector(QDialog, Ui_Dialog):
schemas = self.db.schemas()
if schemas is not None:
schema_name = self.cboSchema.currentText()
matching_schemas = filter(lambda x: x.name == schema_name, schemas)
matching_schemas = [x for x in schemas if x.name == schema_name]
tables = matching_schemas[0].tables() if len(matching_schemas) > 0 else []
else:
tables = self.db.tables()

View File

@ -184,7 +184,7 @@ class QueryBuilderDlg(QDialog):
return
ag = self.ui.operators.currentText()
if self.evt.focus == "where": # in where section
if self.evt.focus == "where": # in where section
self.ui.where.insertPlainText(ag)
else:
self.ui.col.insertPlainText(ag)
@ -215,8 +215,8 @@ class QueryBuilderDlg(QDialog):
if self.ui.columns.currentIndex() <= 0:
return
ag = self.ui.columns.currentText()
if self.evt.focus == "where": # in where section
if ag in self.col_where: # column already called in where section
if self.evt.focus == "where": # in where section
if ag in self.col_where: # column already called in where section
response = QMessageBox.question(self, "Column already used in WHERE clause", "Do you want to add column %s again?" % ag, QMessageBox.Yes | QMessageBox.No)
if response == QMessageBox.No:
self.ui.columns.setCurrentIndex(0)
@ -224,7 +224,7 @@ class QueryBuilderDlg(QDialog):
self.ui.where.insertPlainText(ag)
self.col_where.append(ag)
elif self.evt.focus == "col":
if ag in self.col_col: # column already called in col section
if ag in self.col_col: # column already called in col section
response = QMessageBox.question(self, "Column already used in COLUMNS section", "Do you want to add column %s again?" % ag, QMessageBox.Yes | QMessageBox.No)
if response == QMessageBox.No:
self.ui.columns.setCurrentIndex(0)
@ -301,7 +301,7 @@ class QueryBuilderDlg(QDialog):
tab_idx = idx.split(".")[0][1:-1] # remove "
col_idx = idx.split(".")[1][1:-1] # remove '
except:
pop_up_error("All fields are necessary", self) # FIXME
QMessageBox.warning(self, "Use R-Tree", "All fields are necessary", QMessageBox.Cancel)
tgt = self.ui.table_target.currentText()
if tgt in (None, "", " ", "Table (Target)"):
return

View File

@ -35,7 +35,7 @@ from .dlg_db_error import DlgDbError
from .dlg_query_builder import QueryBuilderDlg
try:
from qgis.gui import QgsCodeEditorSQL
from qgis.gui import QgsCodeEditorSQL # NOQA
except:
from .sqledit import SqlEdit
from qgis import gui
@ -55,8 +55,8 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
self.iface = iface
self.db = db
self.filter = ""
self.allowMultiColumnPk = isinstance(db, PGDatabase) # at the moment only PostgreSQL allows a primary key to span multiple columns, spatialite doesn't
self.aliasSubQuery = isinstance(db, PGDatabase) # only PostgreSQL requires subqueries to be aliases
self.allowMultiColumnPk = isinstance(db, PGDatabase) # at the moment only PostgreSQL allows a primary key to span multiple columns, spatialite doesn't
self.aliasSubQuery = isinstance(db, PGDatabase) # only PostgreSQL requires subqueries to be aliases
self.setupUi(self)
self.setWindowTitle(
u"%s - %s [%s]" % (self.windowTitle(), db.connection().connectionName(), db.connection().typeNameString()))
@ -99,8 +99,8 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
self.uniqueCombo.setModel(self.uniqueModel)
if self.allowMultiColumnPk:
self.uniqueCombo.setItemDelegate(QStyledItemDelegate())
self.uniqueModel.itemChanged.connect(self.uniqueChanged) # react to the (un)checking of an item
self.uniqueCombo.lineEdit().textChanged.connect(self.uniqueTextChanged) # there are other events that change the displayed text and some of them can not be caught directly
self.uniqueModel.itemChanged.connect(self.uniqueChanged) # react to the (un)checking of an item
self.uniqueCombo.lineEdit().textChanged.connect(self.uniqueTextChanged) # there are other events that change the displayed text and some of them can not be caught directly
# hide the load query as layer if feature is not supported
self._loadAsLayerAvailable = self.db.connector.hasCustomQuerySupport()
@ -269,7 +269,7 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
try:
layer = self._getSqlLayer(self.filter)
if layer == None:
if layer is None:
return
from qgis.core import QgsMapLayerRegistry

View File

@ -63,7 +63,8 @@ class LayerPreview(QgsMapCanvas):
if isinstance(item, Table) and item.type in [Table.VectorType, Table.RasterType]:
# update the preview, but first let the manager chance to show the canvas
runPrev = lambda: self._loadTablePreview(item)
def runPrev():
return self._loadTablePreview(item)
QTimer.singleShot(50, runPrev)
else:
return

View File

@ -20,7 +20,7 @@ email : brush.tyler@gmail.com
***************************************************************************/
"""
from PyQt.QtCore import Qt, QObject
from PyQt.QtCore import Qt
from PyQt.QtWidgets import QTableView, QAbstractItemView, QApplication, QAction
from PyQt.QtGui import QKeySequence, QCursor, QClipboard