diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/plugins/scripting/scripts/copycenter/CopyCenterPluginKexiDB.py | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/plugins/scripting/scripts/copycenter/CopyCenterPluginKexiDB.py')
-rw-r--r-- | kexi/plugins/scripting/scripts/copycenter/CopyCenterPluginKexiDB.py | 646 |
1 files changed, 646 insertions, 0 deletions
diff --git a/kexi/plugins/scripting/scripts/copycenter/CopyCenterPluginKexiDB.py b/kexi/plugins/scripting/scripts/copycenter/CopyCenterPluginKexiDB.py new file mode 100644 index 00000000..e8241405 --- /dev/null +++ b/kexi/plugins/scripting/scripts/copycenter/CopyCenterPluginKexiDB.py @@ -0,0 +1,646 @@ +""" +CopyCenterPlugin to provide 'KexiDB'. + +Description: +This python-script is a plugin for the CopyCenter.py. + +Author: +Sebastian Sauer <mail@dipe.org> + +Copyright: +GPL v2 or higher. +""" + +class CopyCenterPlugin: + """ The CopyCenterPlugin to provide abstract access to the 'KexiDB' + framework to CopyCenter.py """ + + name = "Kexi Database" + """ The name this plugin has. The name should be unique and + will be used for displaying a caption. """ + + class Plugin: + """ The implementation of a plugin which is published to the + CopyCenter.py script. While there exists only one instance of + the CopyCenterPlugin class, there will be n instances of this + Plugin class (one for 'source' aka read-data-from and one for + 'destination' aka write-data-to) created from within the + CopyCenter.py. The Source and Destination classes are extending + this Plugin class with specialized functionality. """ + def __init__(self,copycenterplugin): + """ Constructor. """ + self.copycenterplugin = copycenterplugin + self.widget = None + self.options = { + 'autoconnect' : False, + 'project' : '', #'~/test.kexi', + 'driver' : '', #'MySQL', #'SQLite3','MySQL',... + 'file' : '', #'/path/to/mysqlite3dbfile.kexi' + 'hostname' : '127.0.0.1', + 'port' : '', + 'usesocketfile' : False, + 'socketfile' : '', + 'username' : '', + 'password' : '', + 'database' : '', + 'table' : '', + 'fields' : '', + 'where' : '', + } + self.connection = copycenterplugin.Connection(self) + def isFinished(self): + return self.connection.isFinished() + def finish(self): + """ Called if reading is finished.""" + self.connection.finish() + def createWidget(self, dialog, parent): + """ Create and return a widget to modify the plugin settings. """ + return self.copycenterplugin.createWidget(dialog, self, parent) + + class Source(Plugin): + """ Specialization of the Plugin class to implement the + 'source' aka read-data-from functionality. """ + plugintype = "Source" + def init(self,copierer): + """ Called if reading should be initialize. """ + self.connection.init(copierer) + self.connection.initRead() + # Called if a record should be readed. + self.read = self.connection.readRecord + + class Destination(Plugin): + """ Specialization of the Plugin class to implement the + 'destination' aka write-data-to functionality. """ + plugintype = "Destination" + def init(self,copierer): + """ Called if writing should be initialize. """ + self.connection.init(copierer) + self.connection.initWrite() + # Called if a record should be written. + self.write = self.connection.writeRecord + + class Connection: + """ Abstract access to work with KexiDB. """ + def __init__(self,plugin): + self.plugin = plugin + self.copierer = None + self.kexidbconnection = None + self.kexidbcursor = None + self.tableschema = None + self.fieldlist = None + def lastError(self): return self.kexidbconnection.lastError() + def connect(self): return self.kexidbconnection.connect() + def disconnect(self): + if self.kexidbconnection == None or self.kexidbconnection.disconnect(): + self.kexidbconnection = None + return True + return False + def isConnected(self): return self.kexidbconnection != None and self.kexidbconnection.isConnected() + def tableNames(self): return self.kexidbconnection.tableNames() + def hasTableName(self,tablename): return tablename in self.kexidbconnection.tableNames() + def tableSchema(self,tablename): return self.kexidbconnection.tableSchema(tablename) + + def init(self,copierer): + self.copierer = copierer + if self.kexidbconnection == None: + if self.plugin.widget == None: + raise "No connection established." + self.copierer.appendProgressMessage("<i>Trying to connect...</i>") + if self.plugin.widget.driverbox.driver == None: + raise "Invalid driver." + if not self.plugin.widget.connectClicked(): + raise "Failed to connect." + connectiondata = self.kexidbconnection.data() + self.copierer.appendProgressMessage("Connected: %s %s" % (connectiondata.driverName(),connectiondata.serverInfoString())) + + tablename = str(self.plugin.widget.tablebox.tableedit.text()) + if tablename == "": + raise "No table defined" + fields = [ f.strip() for f in str(self.plugin.widget.fieldbox.fieldsedit.text()).split(",") if len(f) > 0 ] + if len(fields) < 1: + raise "No fields defined" + + self.tableschema = self.kexidbconnection.tableSchema(tablename) + if not self.tableschema: raise "No such tableschema \"%s\"" % tablename + self.copierer.appendProgressMessage("Table: %s" % self.tableschema.name()) + + if len(fields) == 1 and fields[0] == "*": + self.fieldlist = self.tableschema.fieldlist() + else: + self.fieldlist = self.tableschema.fieldlist().subList(fields) + if not self.fieldlist: raise "No such fields \"%s\"" % fields + fieldlistnames = self.fieldlist.names() + if len(fieldlistnames) < 1: raise "No valid fields defined for \"%s\"" % fields + self.copierer.appendProgressMessage("Fields: %s" % fieldlistnames) + def finish(self): + if self.plugin.widget == None: + self.disconnect() + else: + self.plugin.widget.disconnectClicked() + self.kexidbcursor = None + self.kexidbconnection = None + self.tableschema = None + self.fieldlist = None + self.copierer = None + def isFinished(self): + return self.copierer == None + + def initRead(self): + print "Initialize read" + #queryschema = self.plugin.copycenterplugin.drivermanager.querySchema() + queryschema = self.tableschema.query() + queryschema.fieldlist().setFields(self.fieldlist) + print "QuerySchema: %s" % queryschema.fieldlist().names() + + whereexpression = str(self.plugin.widget.whereedit.text()) + if whereexpression != "": + print "WHERE-expression: %s" % whereexpression + if not queryschema.setWhereExpression(whereexpression): + raise "Invalid WHERE-expression." + + #print "QuerySchema statement=%s" % queryschema.statement() + self.kexidbcursor = self.kexidbconnection.executeQuerySchema(queryschema) + if not self.kexidbcursor: + raise "Failed to create cursor." + if not self.kexidbcursor.moveFirst(): + raise "The cursor has no records to read from." + + def readRecord(self): + if self.kexidbcursor == None or self.kexidbcursor.eof(): + return None + record = [] + for i in range( self.kexidbcursor.fieldCount() ): + record.append( self.kexidbcursor.value(i) ) + self.kexidbcursor.moveNext() + #print "read record: %s" % record + return record + + def initWrite(self): + print "Initialize write" + + def writeRecord(self,record): + print "write record: %s" % record + if self.kexidbconnection.insertRecord(self.fieldlist,record): + print "=> insert successfully" + self.copierer.writeSuccess(record, 1) + else: + print "=> insert failed: %s" % self.kexidbconnection.lastError() + self.copierer.writeFailed(record) + #import time + #time.sleep(1) + return True + + def __init__(self, copycenter): + """ Constructor. """ + import krosskexidb + self.drivermanager = krosskexidb.DriverManager() + self.copycenter = copycenter + + def createWidget(self, dialog, plugin, parent): + """ Each plugin may provide a qt.QWidget back to the + CopyCenter.py. The widget will be used to configure our + plugin settings. """ + + import qt + import os + import re + + self.dialog = dialog + self.mainbox = None + class ProjectBox(qt.QHBox): + def __init__(self,main,copycenterplugin,plugin,parent): + self.main = main + self.copycenterplugin = copycenterplugin + self.plugin = plugin + + qt.QHBox.__init__(self,parent) + prjlabel = qt.QLabel("Project File:",self) + self.prjcombo = qt.QComboBox(self) + self.prjcombo.setEditable(True) + self.prjcombo.insertItem("") + + path = copycenterplugin.copycenter.homepath + for f in os.listdir(path): + file = os.path.join(path,f) + if os.path.isfile(file) and re.search(".+\\.(kexi|kexis|kexic)$",f): + self.prjcombo.insertItem(os.path.join("~",f)) + + prjlabel.setBuddy(self.prjcombo) + prjsavebtn = qt.QPushButton("...",self) + qt.QObject.connect(prjsavebtn, qt.SIGNAL("clicked()"),self.buttonClicked) + qt.QObject.connect(self.prjcombo, qt.SIGNAL("textChanged(const QString&)"), self.main.projectChanged) + self.setStretchFactor(self.prjcombo,1) + def buttonClicked(self): + text = str(self.prjcombo.currentText()) + if text == "": + text = self.copycenterplugin.copycenter.homepath + elif re.search("^\\~(\\/|\\\\)",text): + import os + text = os.path.join(self.copycenterplugin.copycenter.homepath,text[2:]) + if self.plugin.plugintype == "Source": + filename = qt.QFileDialog.getOpenFileName(text,"*.kexi *.kexis *.kexic;;*",self.copycenterplugin.dialog) + else: # "Destination": + filename = qt.QFileDialog.getSaveFileName(text,"*.kexi *.kexis *.kexic;;*",self.copycenterplugin.dialog) + if str(filename) != "": self.prjcombo.setCurrentText(str(filename)) + + class DriverBox(qt.QVBox): + def __init__(self,main,parent): + qt.QVBox.__init__(self,parent) + self.main = main + self.copycenterplugin = main.copycenterplugin + self.plugin = main.plugin + self.driver = None + + driverbox = qt.QHBox(self) + driverlabel = qt.QLabel("Driver:",driverbox) + self.drivercombo = qt.QComboBox(driverbox) + self.drivercombo.insertItem("") + for driver in self.copycenterplugin.drivermanager.driverNames(): + self.drivercombo.insertItem(driver) + + qt.QObject.connect(self.drivercombo, qt.SIGNAL("activated(int)"), self.activated) + driverlabel.setBuddy(self.drivercombo) + driverbox.setStretchFactor(self.drivercombo,1) + + self.box = qt.QVBox(self) + self.mainbox = None + + def activated(self,index): + drivertext = str(self.drivercombo.currentText()) + + self.box.hide() + if self.mainbox: + self.mainbox.hide() + self.mainbox.destroy() + self.mainbox = None + if index == 0 or drivertext == "": + self.driver = None + self.box.show() + self.main.updateConnectButtons() + return False + + self.driver = self.copycenterplugin.drivermanager.driver(drivertext) + + mainbox = qt.QVBox(self.box) + mainbox.setSpacing(2) + + if self.driver.isFileDriver(): + filebox = qt.QHBox(mainbox) + filelabel = qt.QLabel("File:",filebox) + self.fileedit = qt.QLineEdit(self.plugin.options['file'],filebox) + filelabel.setBuddy(self.fileedit) + filebox.setStretchFactor(self.fileedit,1) + filebtn = qt.QPushButton("...",filebox) + qt.QObject.connect(filebtn, qt.SIGNAL("clicked()"), self.fileClicked) + else: + hostbox = qt.QHBox(mainbox) + hostlabel = qt.QLabel("Hostname:",hostbox) + self.hostedit = qt.QLineEdit(self.plugin.options['hostname'],hostbox) + hostlabel.setBuddy(self.hostedit) + hostbox.setStretchFactor(self.hostedit,1) + + portbox = qt.QHBox(mainbox) + portlabel = qt.QLabel("Port:",portbox) + self.portedit = qt.QLineEdit(self.plugin.options['port'],portbox) + portlabel.setBuddy(self.portedit) + portbox.setStretchFactor(self.portedit,1) + + sockbox = qt.QHBox(mainbox) + self.sockfilecheckbox = qt.QCheckBox("Socket File:",sockbox) + qt.QObject.connect(self.sockfilecheckbox, qt.SIGNAL("toggled(bool)"), self.sockfilecheckboxClicked) + self.sockfilebox = qt.QHBox(sockbox) + self.sockfileedit = qt.QLineEdit(self.plugin.options['socketfile'],self.sockfilebox) + self.sockfilebox.setEnabled(False) + sockfilebtn = qt.QPushButton("...",self.sockfilebox) + self.sockfilecheckbox.setChecked( str(self.plugin.options['usesocketfile']) == str(True) ) + qt.QObject.connect(sockfilebtn, qt.SIGNAL("clicked()"), self.sockfileClicked) + self.sockfilebox.setStretchFactor(self.sockfileedit,1) + sockbox.setStretchFactor(self.sockfilebox,1) + + userbox = qt.QHBox(mainbox) + userlabel = qt.QLabel("Username:",userbox) + self.useredit = qt.QLineEdit(self.plugin.options['username'],userbox) + userlabel.setBuddy(self.useredit) + userbox.setStretchFactor(self.useredit,1) + + passbox = qt.QHBox(mainbox) + passlabel = qt.QLabel("Password:",passbox) + self.passedit = qt.QLineEdit(self.plugin.options['password'],passbox) + self.passedit.setEchoMode(qt.QLineEdit.Password) + passlabel.setBuddy(self.passedit) + passbox.setStretchFactor(self.passedit,1) + + dbbox = qt.QHBox(mainbox) + dblabel = qt.QLabel("Database:",dbbox) + self.dbedit = qt.QLineEdit(self.plugin.options['database'],dbbox) + dblabel.setBuddy(self.dbedit) + dbbox.setStretchFactor(self.dbedit,1) + #self.tablecombo.setText("") + + self.mainbox = mainbox + self.mainbox.show() + self.box.show() + self.main.updateConnectButtons() + return True + + def fileClicked(self): + text = str(self.fileedit.text()) + if text == "": text = self.copycenterplugin.copycenter.homepath + if self.plugin.plugintype == "Source": + filename = qt.QFileDialog.getOpenFileName(text,"*",self.copycenterplugin.dialog) + else: # "Destination": + filename = qt.QFileDialog.getSaveFileName(text,"*",self.copycenterplugin.dialog) + if str(filename) != "": self.fileedit.setText(str(filename)) + def sockfilecheckboxClicked(self,checked): + self.sockfilebox.setEnabled(checked) + + def sockfileClicked(self): + text = str(self.sockfileedit.text()) + if text == "": text = self.copycenterplugin.copycenter.homepath + if self.plugin.plugintype == "Source": + filename = qt.QFileDialog.getOpenFileName(text,"*",self.copycenterplugin.dialog) + else: # "Destination": + filename = qt.QFileDialog.getSaveFileName(text,"*",self.copycenterplugin.dialog) + if str(filename) != "": self.sockfileedit.setText(str(filename)) + + class TableBox(qt.QHBox): + def __init__(self,copycenterplugin,plugin,parent): + qt.QHBox.__init__(self,parent) + self.copycenterplugin = copycenterplugin + self.plugin = plugin + tablelabel = qt.QLabel("Table:",self) + self.tableedit = qt.QLineEdit(self.plugin.options['table'],self) + self.tablebtn = qt.QPushButton("...",self) + self.tablebtn.setEnabled(False) + qt.QObject.connect(self.tablebtn, qt.SIGNAL("clicked()"), self.buttonClicked) + tablelabel.setBuddy(self.tableedit) + self.setStretchFactor(self.tableedit,1) + def buttonClicked(self): + ListViewDialog = self.copycenterplugin.dialog.ListViewDialog + class TableDialog(ListViewDialog): + def __init__(self,tablebox): + ListViewDialog.__init__(self,tablebox,"Tables") + self.mainwidget = tablebox + self.listview.addColumn("Name") + text = str(self.mainwidget.tableedit.text()) + item = None + for table in self.mainwidget.plugin.connection.tableNames(): + if item == None: + item = qt.QListViewItem(self.listview,table) + else: + item = qt.QListViewItem(self.listview,item,table) + if table == text: + self.listview.setSelected(item,True) + self.listview.ensureItemVisible(item) + qt.QObject.connect(self.listview, qt.SIGNAL("doubleClicked(QListViewItem*, const QPoint&, int)"), self.okClicked) + qt.QObject.connect(self.okbtn, qt.SIGNAL("clicked()"), self.okClicked) + def okClicked(self): + item = self.listview.selectedItem() + if item == None: + self.mainwidget.tableedit.setText("") + else: + self.mainwidget.tableedit.setText(item.text(0)) + self.close() + dialog = TableDialog(self) + dialog.show() + + class FieldBox(qt.QHBox): + def __init__(self,copycenterplugin,plugin,parent): + qt.QHBox.__init__(self,parent) + self.copycenterplugin = copycenterplugin + self.plugin = plugin + self.tablename = "" + fieldslabel = qt.QLabel("Fields:",self) + self.fieldsedit = qt.QLineEdit(self.plugin.options['fields'],self) + self.setStretchFactor(self.fieldsedit,1) + fieldslabel.setBuddy(self.fieldsedit) + self.fieldsbtn = qt.QPushButton("...",self) + self.fieldsbtn.setEnabled(False) + qt.QObject.connect(self.fieldsbtn, qt.SIGNAL("clicked()"), self.fieldsClicked) + def fieldsClicked(self): + ListViewDialog = self.copycenterplugin.dialog.ListViewDialog + class FieldsDialog(ListViewDialog): + def __init__(self, fieldbox): + ListViewDialog.__init__(self,fieldbox,"Fields") + self.fieldbox = fieldbox + self.listview.setSelectionMode(qt.QListView.Multi) + self.listview.setSorting(-1) + self.listview.header().setClickEnabled(False) + self.listview.addColumn("Name") + self.listview.addColumn("Type") + self.listview.addColumn("Options") + fieldslist = str(self.fieldbox.fieldsedit.text()).split(",") + allfields = ("*" in fieldslist) + tableschema = self.fieldbox.plugin.connection.tableSchema(self.fieldbox.tablename) + item = None + for field in tableschema.fieldlist().fields(): + opts = [] + for opt in ("isAutoInc","isNotNull","isNotEmpty"): + if getattr(field,opt)(): + opts.append(opt[2:]) + item = self.addItem(( field.name(),field.type(),",".join(opts) ),item) + if allfields or field.name() in fieldslist: + self.listview.setSelected(item,True) + qt.QObject.connect(self.okbtn, qt.SIGNAL("clicked()"), self.okClicked) + def okClicked(self): + selitems = [] + item = self.listview.firstChild() + while item: + if item.isSelected(): + selitems.append(str(item.text(0))) + item = item.nextSibling() + self.fieldbox.fieldsedit.setText(",".join(selitems)) + self.close() + dialog = FieldsDialog(self) + dialog.show() + def tableChanged(self, text): + self.tablename = str(text) + if self.plugin.connection.isConnected(): + if self.plugin.connection.hasTableName(self.tablename): + self.fieldsbtn.setEnabled(True) + return + self.fieldsbtn.setEnabled(False) + + class MainBox(qt.QHBox): + def __init__(self,copycenterplugin,plugin,parent): + qt.QHBox.__init__(self,parent) + self.copycenterplugin = copycenterplugin + self.plugin = plugin + + self.prjbox = ProjectBox(self,copycenterplugin,plugin,parent) + self.driverbox = DriverBox(self,parent) + + statusbar = qt.QHBox(parent) + statusbar.setSpacing(2) + #self.statuslabel = qt.QLabel("Disconnected",statusbar) + #statusbar.setStretchFactor(self.statuslabel,1) + statusbar.setStretchFactor(qt.QWidget(statusbar),1) + self.connectbtn = qt.QPushButton("Connect",statusbar) + self.connectbtn.setEnabled(False) + qt.QObject.connect(self.connectbtn, qt.SIGNAL("clicked()"),self.connectClicked) + self.disconnectbtn = qt.QPushButton("Disconnect",statusbar) + self.disconnectbtn.setEnabled(False) + qt.QObject.connect(self.disconnectbtn, qt.SIGNAL("clicked()"),self.disconnectClicked) + + #self.connectionbox = ConnectionBox(copycenterplugin,plugin,parent) + self.tablebox = TableBox(copycenterplugin,plugin,parent) + self.fieldbox = FieldBox(copycenterplugin,plugin,parent) + qt.QObject.connect(self.tablebox.tableedit, qt.SIGNAL("textChanged(const QString&)"), self.fieldbox.tableChanged) + + if self.plugin.options['project'] != '': + self.prjbox.prjcombo.setCurrentText(self.plugin.options['project']) + + if self.plugin.options['driver'] != '': + try: + item = str(self.driverbox.drivercombo.listBox().findItem(self.plugin.options['driver'],qt.Qt.ExactMatch).text()) + self.driverbox.drivercombo.setCurrentText(item) + self.driverbox.activated(item) + except: + pass + + if self.plugin.plugintype == "Destination": + #typebox = qt.QHBox(parent) + #label = qt.QLabel("Operation:",typebox) + #combobox = qt.QComboBox(typebox) + #combobox.insertItem("Append") + #combobox.insertItem("Replace") + #combobox.insertItem("Update") + #combobox.insertItem("Update/Insert") + #combobox.insertItem("Insert new") + #label.setBuddy(combobox) + #typebox.setStretchFactor(combobox,1) + pass + elif self.plugin.plugintype == "Source": + wherebox = qt.QHBox(parent) + wherelabel = qt.QLabel("Where:",wherebox) + self.whereedit = qt.QLineEdit(self.plugin.options['where'],wherebox) + + #orderbox = qt.QHBox(parent) + #orderlabel = qt.QLabel("Order By:",orderbox) + #orderedit = qt.QLineEdit("",orderbox) + + #errbox = qt.QHBox(parent) + #errlabel = qt.QLabel("On Error:",errbox) + #errcombo = qt.QComboBox(errbox) + #errcombo.insertItem("Ask") + #errcombo.insertItem("Skip") + #errcombo.insertItem("Abort") + #errlabel.setBuddy(errcombo) + #errbox.setStretchFactor(errcombo,1) + + if self.plugin.options['autoconnect']: + self.connectClicked() + + def projectChanged(self, text): + #if self.driverbox.drivercombo.currentItem() != 0: + # self.driverbox.drivercombo.setCurrentItem(0) + + file = str(text) + import os + if re.search("^\\~(\\/|\\\\)",file): + file = os.path.join(self.copycenterplugin.copycenter.homepath,file[2:]) + if file == "" or not os.path.isfile(file): + self.driverbox.drivercombo.setCurrentItem(0) + self.driverbox.activated(0) + return + + connectiondata = self.copycenterplugin.drivermanager.createConnectionDataByFile(file) + if connectiondata == None: + raise "Unsupported file." + + drivername = connectiondata.driverName().lower() + print "driver: %s" % drivername + for i in range(1,self.driverbox.drivercombo.count()): + if drivername == self.driverbox.drivercombo.text(i).lower(): + self.driverbox.drivercombo.setCurrentItem(i) + self.driverbox.activated(i) + break + + if self.driverbox.driver != None: + if self.driverbox.driver.isFileDriver(): + self.driverbox.fileedit.setText(connectiondata.fileName()) + else: # server + self.driverbox.hostedit.setText(connectiondata.hostName()) + self.driverbox.portedit.setText(str(connectiondata.port())) + self.driverbox.sockfilecheckbox.setChecked(connectiondata.localSocketFileUsed()) + self.driverbox.sockfileedit.setText(connectiondata.localSocketFileName()) + self.driverbox.useredit.setText(connectiondata.userName()) + self.driverbox.passedit.setText(connectiondata.password()) + self.driverbox.dbedit.setText(connectiondata.databaseName()) + + def connectClicked(self): + if self.driverbox.driver == None: + print "No driver selected." + return False + connectiondata = self.copycenterplugin.drivermanager.createConnectionData() + if self.driverbox.driver.isFileDriver(): + file = str(self.driverbox.fileedit.text()) + if file == "" or not os.path.isfile(file): + qt.QMessageBox.critical(self,"Failed to connect","There exists no such database file \"%s\"" % file) + return False + connectiondata.setFileName(file) + connectiondata.setDatabaseName(file) + else: + connectiondata.setHostName(str(self.driverbox.hostedit.text())) + connectiondata.setPort(str(self.driverbox.portedit.text())) + connectiondata.setLocalSocketFileUsed(self.driverbox.sockfilecheckbox.isChecked()) + connectiondata.setLocalSocketFileName(str(self.driverbox.sockfileedit.text())) + connectiondata.setPassword(str(self.driverbox.passedit.text())) + connectiondata.setUserName(str(self.driverbox.useredit.text())) + connectiondata.setDatabaseName(str(self.driverbox.dbedit.text())) + print "Creating connection" + connection = self.driverbox.driver.createConnection(connectiondata) + print "Trying to connect" + if not connection.connect(): + qt.QMessageBox.critical(self,"Failed to connect",connection.lastError()) + return False + print "Use database \"%s\"" % connectiondata.databaseName() + if not connection.useDatabase( connectiondata.databaseName() ): + qt.QMessageBox.critical(self,"Failed to connect",connection.lastError()) + return False + print "dbnames = %s" % connection.databaseNames() + print "tablenames = %s" % connection.tableNames() + #self.useDatabase(connection, filename) + + self.plugin.connection.kexidbconnection = connection + self.updateConnectButtons() + return True + + def disconnectClicked(self): + if not self.plugin.connection.disconnect(): + qt.QMessageBox.critical(self,"Failed to disconnect",self.plugin.connection.lastError()) + return + self.updateConnectButtons() + + def updateConnectButtons(self): + connected = self.plugin.connection.isConnected() + self.prjbox.setEnabled(not connected) + self.driverbox.setEnabled(not connected) + self.connectbtn.setEnabled( (not connected) and (self.driverbox.driver != None) ) + self.disconnectbtn.setEnabled(connected) + self.tablebox.tablebtn.setEnabled(connected) + self.fieldbox.tableChanged(self.tablebox.tableedit.text()) + + def getOptionValue(self,optionname): + try: + if optionname == 'project': return str(self.prjbox.prjcombo.currentText()) + elif optionname == 'driver': return str(self.driverbox.drivercombo.currentText()) + elif optionname == 'file': return str(self.driverbox.fileedit.text()) + elif optionname == 'hostname': return str(self.driverbox.hostedit.text()) + elif optionname == 'port': return str(self.driverbox.portedit.text()) + elif optionname == 'usesocketfile': return str(self.driverbox.sockfilecheckbox.isChecked()) + elif optionname == 'socketfile': return str(self.driverbox.sockfileedit.text()) + elif optionname == 'username': return str(self.driverbox.useredit.text()) + elif optionname == 'password': return str(self.driverbox.passedit.text()) + elif optionname == 'database': return str(self.driverbox.dbedit.text()) + elif optionname == 'table': return str(self.tablebox.tableedit.text()) + elif optionname == 'fields': return str(self.fieldbox.fieldsedit.text()) + elif optionname == 'where': return str(self.whereedit.text()) + except: + pass + return "" + + mainbox = MainBox(self,plugin,parent) + plugin.widget = mainbox + return mainbox + |