Esempio n. 1
0
 def callback():
     self.db = SsqbDb(host,user,passwrd)
     databases = self.db.getDbs()
     self.ui.list.clear()
     for db in databases:
         item = QtGui.QListWidgetItem(db['Database'])
         item.setData(self.type_id, "db")
         self.ui.list.addItem(item)
Esempio n. 2
0
class StartQt(QtGui.QMainWindow):
    conf = "conf.ini"
    assets = "assets/"
    activeDb = ""
    activeTable = ""
    type_id = 35
    to_check = ["delete","drop","truncate"]
    to_add_server = ["Name","Host","Username","Password"]
    
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.initSlots()
        self.initMenu()
    def setStatus(self, text):
        self.statusBar().showMessage(text)
    def initSlots(self):
        self.statusBar()
        self.ui.clear_button.clicked.connect(self.clearAction)
        self.ui.new_button.clicked.connect(self.newAction)
        self.ui.query_button.clicked.connect(self.queryAction)
        self.ui.list.clicked.connect(self.listAction())
        self.ui.new_server.triggered.connect(self.addServer())
    def initMenu(self):
        self.config = ConfigParser.ConfigParser()
        # os.path.expanduser('~') + '/' + self.ssqb_dir + '/' + 
        self.ui.servers_menu.clear()
        self.config.read(self.conf)
        for name in self.config._sections:
            item = QtGui.QAction(QtGui.QIcon(self.assets+"database_connect.png"), name, self)
            item.triggered.connect(self.dbConnect(self.config._sections[name]["host"], self.config._sections[name]["user"], self.config._sections[name]["pass"]))
            self.ui.servers_menu.addAction(item);
    def progressBar(self):
        pass
    def queryAction(self):
        activeTab = self.ui.tab.currentWidget()
        queryField = activeTab.findChild(QtGui.QPlainTextEdit)
        sql = queryField.toPlainText()
        proceed = True
        danger = False
        for word in self.to_check:
            if word in sql.toLower():
                danger = True
                self.danger_word = word
                msg = "Are you sure you want to %s?" % word
                reply = QtGui.QMessageBox.question(self, 'Message', msg, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
                if reply == QtGui.QMessageBox.No:
                    proceed = False
                    break
        if not proceed:    
            pass
        else:
            self.progress = QtGui.QProgressDialog("Please Wait", "Cancel", 0, 100, self.ui.result_table)
            self.progress.setWindowModality(QtCore.Qt.WindowModal)
            self.progress.setAutoReset(True)
            self.progress.setAutoClose(True)
            self.progress.setMinimum(0)
            self.progress.setMaximum(100)
            self.progress.resize(800,220)
            self.progress.setWindowTitle("Running Query")
            self.progress.show()
            self.progress.setValue(0)
            self.progress.setValue(10)

            self.db.query(str(sql))
            self.progress.setValue(25)
            if danger:
                QtGui.QMessageBox.information(self,"Message","Item was %s" % self.danger_word)
            self.showResults()
    def showResults(self):
        
        fields = self.db.getFields()
        rows = self.db.getRows()
        self.progress.setValue(30)
        self.ui.result_table.clear()
        self.ui.result_table.setColumnCount(len(fields))
        self.ui.result_table.setRowCount(len(rows))
        header = self.ui.result_table.horizontalHeader()
        self.ui.result_table.setHorizontalHeaderLabels(fields)
        i = 1
        for row in rows:
            j = 0
            for v in row:
                item = QtGui.QTableWidgetItem(str(v))
                if i % 2:
                    item.setBackgroundColor(QtGui.QColor(221,221,221))
                self.ui.result_table.setItem(i,j,item)
                j += 1
            i += 1
        self.progress.setValue(100)    
        self.progress.hide()        
        header.setStretchLastSection(True)
        #header.setResizeMode(QtGui.QHeaderView.Stretch)
        self.ui.result_table.setVisible(False)
        self.ui.result_table.resizeColumnsToContents()
        self.ui.result_table.resizeRowsToContents()
        self.ui.result_table.setVisible(True)
    def clearAction(self):
        self.ui.query_field.clear()
    def newAction(self):
        next_id = self.ui.tab.count() + 1
        new_tab = QtGui.QWidget()
        new_tab.setObjectName(_fromUtf8("tab_%i" % next_id))
        new_query_field = QtGui.QPlainTextEdit(new_tab)
        new_query_field.setGeometry(QtCore.QRect(0, 0, 711, 161))
        new_query_field.setObjectName(_fromUtf8("query_field"))        
        vl = QtGui.QVBoxLayout(new_tab)
        vl.addWidget(new_query_field)
        self.ui.tab.addTab(new_tab, _fromUtf8("")) 
        self.ui.tab.setTabText(self.ui.tab.indexOf(new_tab), QtGui.QApplication.translate("MainWindow", "Tab %i" % next_id, None, QtGui.QApplication.UnicodeUTF8)) 
        self.ui.tab.setCurrentIndex(self.ui.tab.indexOf(new_tab))  
    def addServer(self):
        def callback():
            self.dialog = QtGui.QWidget()
            save = QtGui.QPushButton("Save")
            test = QtGui.QPushButton("Test")
            cancel = QtGui.QPushButton("Cancel")
            cancel.clicked.connect(self.clearForm())
            test.clicked.connect(self.testConnect())
            save.clicked.connect(self.saveServer())
            hbox = QtGui.QHBoxLayout()
            vbox = QtGui.QVBoxLayout()

            for field in self.to_add_server:
                item = QtGui.QLineEdit()
                if field == "Password":
                    item.setEchoMode(QtGui.QLineEdit.Password)
                item.setObjectName(field.lower())
                label = QtGui.QLabel(item)
                label.setText(field + ":")
                vbox.addWidget(label)
                vbox.addWidget(item)
            hbox.addStretch(1)
            hbox.addWidget(test)
            hbox.addWidget(save)
            hbox.addWidget(cancel)

            vbox.addStretch(1)
            vbox.addLayout(hbox)
            
            self.dialog.setLayout(vbox)
            self.dialog.move(QtGui.QApplication.desktop().screen().rect().center() - self.rect().center())            
            self.dialog.show()
        return callback
    def clearForm(self):
        def callback():
            sender = self.sender()
            widget = sender.parent()
            for a in widget.findChildren(QtGui.QLineEdit):
                a.clear()
            widget.close()
        return callback 
    def testConnect(self):
        def callback():
            sender = self.sender()
            widget = sender.parent()
            tmp = {}
            for a in widget.findChildren(QtGui.QLineEdit):
                tmp[str(a.objectName())] = str(a.text())
            try:
                con = MySQLdb.connect(tmp['host'], tmp['username'], tmp['password'])
                msg = "Connection successful, WOOT!"
            except:
                msg = "Awwww. Sorry, that info didn't work."
                pass
            QtGui.QMessageBox.information(widget, "Connection Test to %s" % tmp['host'], msg)
        return callback
    def saveServer(self):
        def callback():
            sender = self.sender()
            widget = sender.parent()
            tmp = {}
            for a in widget.findChildren(QtGui.QLineEdit):
                tmp[str(a.objectName())] = str(a.text())
            self.config.add_section(tmp["name"])
            self.config.set(tmp["name"], "host", tmp["host"])
            self.config.set(tmp["name"], "user", tmp["username"])
            self.config.set(tmp["name"], "pass", tmp["password"])
            with open(self.conf, 'wb') as configfile:
                self.config.write(configfile)            
            for a in widget.findChildren(QtGui.QLineEdit):
                a.clear()
            widget.close()
            self.initMenu()
            QtGui.QMessageBox.information(self, "Message", "Connection Saved!")
        return callback
    def dbConnect(self, host, user, passwrd):
        def callback():
            self.db = SsqbDb(host,user,passwrd)
            databases = self.db.getDbs()
            self.ui.list.clear()
            for db in databases:
                item = QtGui.QListWidgetItem(db['Database'])
                item.setData(self.type_id, "db")
                self.ui.list.addItem(item)
        return callback
    def listAction(self):
        def callback():
            sender = self.sender()
            item = sender.currentItem()
            item_type = item.data(self.type_id)
            if item_type == "db":
                rtn = self.dbUseDb()
            elif item_type == "table":
                rtn = self.dbUseTable()
        return callback
    def dbUseDb(self):
        sender = self.sender()
        self.activeDb = item = sender.currentItem().text()
        query = "USE %s" % item
        self.db.queryNoVals(query)
        self.setStatus("%s is now the active database" % item)
        tables = self.db.getTables(item)
        self.ui.list.clear()
        for table in tables:
            item = QtGui.QListWidgetItem(table[0])
            item.setData(self.type_id, "table")
            self.ui.list.addItem(item)
    def dbUseTable(self):
        sender = self.sender()
        self.activeTable = item = sender.currentItem().text()
        query = "SELECT * FROM %s LIMIT 1000" % item
        self.setStatus("%s is now the active table" % item)
        self.activeTab = self.ui.tab.currentWidget()
        self.activeQueryField = self.activeTab.findChild(QtGui.QPlainTextEdit)
        self.activeQueryField.setPlainText(query)