def createDb(self, dbName, srid, paramDict=dict(), parentWidget=None): destination = os.path.join(self.outputDir, dbName + '.sqlite') if 'version' not in paramDict.keys(): raise Exception('Undefined database version') edgvPath = self.getTemplateLocation(paramDict['version']) f = open(edgvPath, 'rb') g = open(destination, 'wb') x = f.readlines() if parentWidget: progress = ProgressWidget( 1, len(x) + 2, self.tr('Creating Spatialite {0}... ').format(dbName), parent=parentWidget) progress.initBar() for i in x: g.write(i) if parentWidget: progress.step() g.close() f.close() #TODO: put defineSrid into AbstractDb self.defineSrid(destination, srid) if parentWidget: progress.step() newDb = self.instantiateNewDb(destination) if parentWidget: progress.step() return newDb
def createDb(self, dbName, srid, paramDict = dict(), parentWidget = None): destination = os.path.join(self.outputDir,dbName+'.sqlite') if 'version' not in paramDict.keys(): raise Exception('Undefined database version') edgvPath = self.getTemplateLocation(paramDict['version']) f = open(edgvPath,'rb') g = open(destination,'wb') x = f.readlines() if parentWidget: progress = ProgressWidget(1,len(x)+2,self.tr('Creating Spatialite {0}... ').format(dbName), parent = parentWidget) progress.initBar() for i in x: g.write(i) if parentWidget: progress.step() g.close() f.close() #TODO: put defineSrid into AbstractDb self.defineSrid(destination, srid) if parentWidget: progress.step() newDb = self.instantiateNewDb(destination) if parentWidget: progress.step() return newDb
def browseServer(self, dbList, host, port, user, password): """ Browses server for EDGV databases dbList: databases list host: server host ip address port: server port user: user name password: password """ canLoad = True if self.superNeeded: canLoad = False try: if self.serverWidget.abstractDb.checkSuperUser(): canLoad = True else: QMessageBox.warning( self, self.tr('Info!'), self. tr('Connection refused. Connect with a super user to inspect server.' )) return [] except Exception as e: QMessageBox.critical(self, self.tr('Critical!'), ':'.join(e.args)) if canLoad: progress = ProgressWidget( 1, len(dbList), self.tr('Loading databases from server... '), parent=self) progress.initBar() gen = self.factory.createSqlGenerator(False) edvgDbList = [] for database in dbList: db = self.getPostGISDatabaseWithParams(database, host, port, user, password) if not db.open(): qgis.utils.iface.messageBar().pushMessage( 'DB :' + database + '| msg: ' + db.lastError().databaseText(), level=QgsMessageBar.CRITICAL) query = QSqlQuery(db) if query.exec_(gen.getEDGVVersion()): while query.next(): version = query.value(0) if version: edvgDbList.append((database, version)) progress.step() return edvgDbList
def on_buttonBox_accepted(self): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) exceptionList = [] customJsonDict = dict() for i in self.customDict.keys(): customJsonDict[i] = [] correspondenceDict = {self.customDict[i]:i for i in self.customDict.keys()} nCustom = 0 for key in self.contentsDict.keys(): for widgetItem in self.contentsDict[key]['widgetList']: nCustom += 1 progress = ProgressWidget(1,nCustom,self.tr('Preparing to export customizations... '), parent = self) progress.initBar() for key in self.contentsDict.keys(): jsonTagList = [] for widget in self.contentsDict[key]['widgetList']: currJsonItem = {'jsonUi':None, 'dbJsonTagList':[]} currentWidget = widget.layout().itemAt(0).widget() try: jsonTagList = currentWidget.getJSONTag() jsonUi = currentWidget.getUiParameterJsonDict() except Exception as e: exceptionList.append(':'.join(e.args)) if len(exceptionList) == 0: currJsonItem['jsonUi'] = jsonUi for jsonItem in jsonTagList: if jsonItem not in currJsonItem['dbJsonTagList']: currJsonItem['dbJsonTagList'].append(jsonItem) if currJsonItem not in customJsonDict[correspondenceDict[key]]: customJsonDict[correspondenceDict[key]].append(currJsonItem) progress.step() QApplication.restoreOverrideCursor() if self.validateJsonDict(customJsonDict) and len(exceptionList) == 0: versionText = 'database_'+self.edgvVersion finalJsonDict = {versionText:customJsonDict} self.customizationManager.createSetting(self.customizationName, self.edgvVersion, finalJsonDict) QMessageBox.information(self, self.tr('Success!'), self.tr('Database Customization ') + self.customizationName + self.tr(' created successfuly!')) #EMIT to reload? self.close() else: msg = '' if len(exceptionList)> 0: msg += self.tr('\Errors occured while trying to export customs built. Check qgis log for further details.') for error in exceptionList: QgsMessageLog.logMessage(self.tr('Customization error: ') + error, "DSG Tools Plugin", QgsMessageLog.CRITICAL) QMessageBox.warning(self, self.tr('Error!'), msg)
def updateLayersFromDbs(self, type, dbList, showViews = False): """ """ errorDict = dict() if type == 'added': progress = ProgressWidget(1, len(dbList), self.tr('Reading selected databases... '), parent=self) progress.initBar() for dbName in dbList: try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) geomList = self.customServerConnectionWidget.selectedDbsDict[dbName].getGeomColumnTupleList(showViews = showViews) for tableSchema, tableName, geom, geomType, tableType in geomList: if self.customServerConnectionWidget.edgvType == 'Non_EDGV': lyrName = tableName cat = tableSchema else: lyrName = '_'.join(tableName.split('_')[1::]) cat = tableName.split('_')[0] key = ','.join([cat, lyrName, geom, geomType, tableType]) if key not in self.lyrDict.keys(): self.lyrDict[key] = dict() self.lyrDict[key][dbName] = {'tableSchema':tableSchema, 'tableName':tableName, 'geom':geom, 'geomType':geomType, 'tableType':tableType, 'lyrName':lyrName, 'cat':cat} except Exception as e: errorDict[dbName] = ':'.join(e.args) QApplication.restoreOverrideCursor() progress.step() QApplication.restoreOverrideCursor() elif type == 'removed': for key in self.lyrDict.keys(): for db in self.lyrDict[key].keys(): if db in dbList: self.lyrDict[key].pop(db) if self.lyrDict[key] == dict(): self.lyrDict.pop(key) interfaceDictList = [] for key in self.lyrDict.keys(): cat, lyrName, geom, geomType, tableType = key.split(',') interfaceDictList.append({self.tr('Category'):cat, self.tr('Layer Name'):lyrName, self.tr('Geometry\nColumn'):geom, self.tr('Geometry\nType'):geomType, self.tr('Layer\nType'):tableType}) self.layersCustomSelector.setInitialState(interfaceDictList,unique = True)
def createDbFromMIList(self, miList, srid, prefix = None, sufix = None, createFrame = False, paramDict = dict()): outputDbDict = dict() errorDict = dict() templateDb = None if self.parentWidget: progress = ProgressWidget(1,2*len(miList)+1,self.tr('Creating databases... '),parent = self.parentWidget) progress.initBar() progress.step() for mi in miList: dbName = self.buildDatabaseName(mi, prefix, sufix) try: if not templateDb: newDb = self.createDb(dbName, srid, paramDict, parentWidget = self.parentWidget) templateDb = dbName else: paramDict['templateDb'] = templateDb newDb = self.createDb(dbName, srid, paramDict, parentWidget = self.parentWidget) outputDbDict[dbName] = newDb except Exception as e: if dbName not in errorDict.keys(): errorDict[dbName] = ':'.join(e.args) else: errorDict[dbName] += '\n' + ':'.join(e.args) if self.parentWidget: progress.step() if createFrame: for dbName in outputDbDict.keys(): try: scale = self.scaleMIDict[len(mi.split('-'))] mi = [i for i in miList if i in dbName][0] outputDbDict[dbName].createFrame('mi', scale, mi, paramDict = paramDict) except Exception as e: if dbName not in errorDict.keys(): errorDict[dbName] = ':'.join(e.args) else: errorDict[dbName] += '\n' + ':'.join(e.args) if self.parentWidget: progress.step() return outputDbDict, errorDict
def browseServer(self, dbList, host, port, user, password): """ Browses server for EDGV databases dbList: databases list host: server host ip address port: server port user: user name password: password """ canLoad = True if self.superNeeded: canLoad = False try: if self.serverWidget.abstractDb.checkSuperUser(): canLoad = True else: QMessageBox.warning(self, self.tr('Info!'), self.tr('Connection refused. Connect with a super user to inspect server.')) return [] except Exception as e: QMessageBox.critical(self, self.tr('Critical!'), ':'.join(e.args)) if canLoad: progress = ProgressWidget(1,len(dbList),self.tr('Loading databases from server... '), parent = self) progress.initBar() gen = self.factory.createSqlGenerator(False) edvgDbList = [] for database in dbList: db = self.getPostGISDatabaseWithParams(database, host, port, user, password) if not db.open(): qgis.utils.iface.messageBar().pushMessage('DB :'+database+'| msg: '+db.lastError().databaseText(), level=QgsMessageBar.CRITICAL) query = QSqlQuery(db) if query.exec_(gen.getEDGVVersion()): while query.next(): version = query.value(0) if version: edvgDbList.append((database, version)) progress.step() return edvgDbList
def batchCreateDb(self, dbNameList, srid, paramDict = dict()): outputDbDict = dict() errorDict = dict() templateDb = None if self.parentWidget: progress = ProgressWidget(1,len(dbNameList),self.tr('Creating databases... '),parent = self.parentWidget) progress.initBar() for dbName in dbNameList: try: if not templateDb: newDb = self.createDb(dbName, srid, paramDict = paramDict, parentWidget = self.parentWidget) templateDb = dbName else: paramDict['templateDb'] = templateDb newDb = self.createDb(dbName, srid, paramDict, parentWidget = self.parentWidget) outputDbDict[dbName] = newDb except Exception as e: if dbName not in errorDict.keys(): errorDict[dbName] = ':'.join(e.args) else: errorDict[dbName] += '\n' + ':'.join(e.args) if self.parentWidget: progress.step() return outputDbDict, errorDict
def updateLayersFromDbs(self, type, dbList, showViews=False): """ """ errorDict = dict() if type == 'added': progress = ProgressWidget( 1, len(dbList), self.tr('Reading selected databases... '), parent=self) progress.initBar() for dbName in dbList: try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) geomList = self.customServerConnectionWidget.selectedDbsDict[ dbName].getGeomColumnTupleList(showViews=showViews) for tableSchema, tableName, geom, geomType, tableType in geomList: if self.customServerConnectionWidget.edgvType == 'Non_EDGV': lyrName = tableName cat = tableSchema else: lyrName = '_'.join(tableName.split('_')[1::]) cat = tableName.split('_')[0] key = ','.join( [cat, lyrName, geom, geomType, tableType]) if key not in self.lyrDict.keys(): self.lyrDict[key] = dict() self.lyrDict[key][dbName] = { 'tableSchema': tableSchema, 'tableName': tableName, 'geom': geom, 'geomType': geomType, 'tableType': tableType, 'lyrName': lyrName, 'cat': cat } except Exception as e: errorDict[dbName] = ':'.join(e.args) QApplication.restoreOverrideCursor() progress.step() QApplication.restoreOverrideCursor() elif type == 'removed': for key in self.lyrDict.keys(): for db in self.lyrDict[key].keys(): if db in dbList: self.lyrDict[key].pop(db) if self.lyrDict[key] == dict(): self.lyrDict.pop(key) interfaceDictList = [] for key in self.lyrDict.keys(): cat, lyrName, geom, geomType, tableType = key.split(',') interfaceDictList.append({ self.tr('Category'): cat, self.tr('Layer Name'): lyrName, self.tr('Geometry\nColumn'): geom, self.tr('Geometry\nType'): geomType, self.tr('Layer\nType'): tableType }) self.layersCustomSelector.setInitialState(interfaceDictList, unique=True)