コード例 #1
0
 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
コード例 #2
0
 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
コード例 #3
0
    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
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
ファイル: dbCreator.py プロジェクト: yangmaoer/DsgTools
 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
コード例 #7
0
 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
コード例 #8
0
ファイル: dbCreator.py プロジェクト: yangmaoer/DsgTools
 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
コード例 #9
0
    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)