diff --git a/tryton/common/common.py b/tryton/common/common.py
index 9967b4dab2..1c1201745f 100644
--- a/tryton/common/common.py
+++ b/tryton/common/common.py
@@ -1193,20 +1193,18 @@ def generateColorscheme(masterColor, keys, light=0.06):
class DBProgress(object):
def __init__(self, host, port):
- self.dbs, self.createdb = None, None
+ self.dbs = None, None
self.host, self.port = host, port
self.updated = threading.Event()
- self.db_info = None
def start(self):
- dbs, createdb = None, False
+ dbs = None
try:
dbs = refresh_dblist(self.host, self.port)
- createdb = True
except Exception:
pass
finally:
- self.db_info = (dbs, createdb)
+ self.dbs = dbs
self.updated.set()
def update(self, combo, progressbar, callback, dbname=''):
@@ -1221,13 +1219,9 @@ class DBProgress(object):
progressbar.pulse()
return True
progressbar.hide()
- dbs, createdb = self.db_info
+ dbs = self.dbs
- if dbs is None:
- dbs, createdb = None, False
- elif dbs == -1:
- dbs, createdb = -1, False
- else:
+ if dbs is not None and dbs not in (-1, -2):
liststore = combo.get_model()
liststore.clear()
index = -1
@@ -1240,7 +1234,7 @@ class DBProgress(object):
combo.set_active(index)
dbs = len(dbs)
- callback(dbs, createdb)
+ callback(dbs)
return False
diff --git a/tryton/gui/window/dbdumpdrop.py b/tryton/gui/window/dbdumpdrop.py
index ff19eea2a9..173d46d398 100644
--- a/tryton/gui/window/dbdumpdrop.py
+++ b/tryton/gui/window/dbdumpdrop.py
@@ -14,42 +14,40 @@ class DBBackupDrop(object):
"""
Widget for database backup and drop.
"""
- @staticmethod
- def refreshlist(widget, db_widget, label, db_progress, host, port):
- db_widget.hide()
- label.hide()
+ def refreshlist(self, host, port):
+ self.combo_database.hide()
+ self.combo_database_label.hide()
+ self.combo_database_entry.hide()
dbprogress = common.DBProgress(host, port)
- def callback(dbs, createdb):
- if dbs is None or dbs == -1:
- if dbs is None:
- label.set_label('' +
- _('Could not connect to server!') + '')
- else:
- label.set_label('' +
- _('This client version is not compatible '
- 'with the server!')
- + '')
- db_widget.hide()
- label.show()
+ def callback(dbs):
+ if dbs is None:
+ self.combo_database_label.set_label('' +
+ _('Could not connect to server!') + '')
+ self.combo_database_label.show()
+ elif dbs == -1:
+ self.combo_database_label.set_label('' +
+ _('This client version is not compatible '
+ 'with the server!')
+ + '')
+ self.combo_database_label.show()
+ elif dbs == -2:
+ self.combo_database_entry.show()
+ self.combo_database_entry.grab_focus()
elif dbs == 0:
- label.set_label(''
+ self.combo_database_label.set_label(''
+ _('No database found, you must create one!') + '')
- db_widget.hide()
- label.show()
+ self.combo_database_label.show()
else:
- label.hide()
- db_widget.show()
- dbprogress.update(db_widget, db_progress, callback)
+ self.combo_database.show()
+ dbprogress.update(self.combo_database, self.db_progressbar, callback)
- @staticmethod
- def refreshlist_ask(widget, server_widget, db_widget, label, db_progress):
- res = common.request_server(server_widget)
+ def refreshlist_ask(self, widget=None):
+ res = common.request_server(self.entry_server_connection)
if not res:
return None
host, port = res
- DBBackupDrop.refreshlist(widget, db_widget, label, db_progress, host,
- port)
+ self.refreshlist(host, port)
return (host, port)
def event_show_button_ok(self, widget, event, data=None):
@@ -60,7 +58,8 @@ class DBBackupDrop(object):
event method doesn't check the valid of single entrys.
"""
if (self.entry_server_connection.get_text() != ""
- and self.combo_database.get_active_text() != ""
+ and (self.combo_database.get_active_text() != ""
+ or self.combo_database_entry.get_text() != "")
and self.entry_serverpasswd.get_text() != ""):
widget.unset_flags(gtk.HAS_DEFAULT)
self.button_ok.set_sensitive(True)
@@ -171,9 +170,11 @@ class DBBackupDrop(object):
self.combo_database_label = gtk.Label()
self.combo_database_label.set_use_markup(True)
self.combo_database_label.set_alignment(0, 1)
+ self.combo_database_entry = gtk.Entry()
vbox_combo.pack_start(self.combo_database)
vbox_combo.pack_start(self.combo_database_label)
vbox_combo.pack_start(self.db_progressbar)
+ vbox_combo.pack_start(self.combo_database_entry)
width, height = 0, 0
# Compute size_request of box in order to prevent "form jumping"
for child in vbox_combo.get_children():
@@ -205,18 +206,12 @@ class DBBackupDrop(object):
self.dialog.set_default_response(gtk.RESPONSE_OK)
self.dialog.show_all()
- pass_widget = self.entry_serverpasswd
- server_widget = self.entry_server_connection
- server_widget.set_text('%(login.server)s:%(login.port)s' % CONFIG)
- db_widget = self.combo_database
- db_progress = self.db_progressbar
- label = self.combo_database_label
- self.refreshlist(None, db_widget, label, db_progress,
- CONFIG['login.server'], CONFIG['login.port'])
+ self.entry_server_connection.set_text(
+ '%(login.server)s:%(login.port)s' % CONFIG)
+ self.refreshlist(CONFIG['login.server'], CONFIG['login.port'])
- change_button = self.button_server_change
- change_button.connect_after('clicked', DBBackupDrop.refreshlist_ask,
- server_widget, db_widget, label, db_progress)
+ self.button_server_change.connect_after('clicked',
+ self.refreshlist_ask)
while True:
database = False
@@ -224,9 +219,14 @@ class DBBackupDrop(object):
passwd = False
res = self.dialog.run()
if res == gtk.RESPONSE_OK:
- database = db_widget.get_active_text()
- url = server_widget.get_text()
- passwd = pass_widget.get_text()
+ if self.combo_database.get_visible():
+ database = self.combo_database.get_active_text()
+ elif self.combo_database_entry.get_visible():
+ database = self.combo_database_entry.get_text()
+ else:
+ continue
+ url = self.entry_server_connection.get_text()
+ passwd = self.entry_serverpasswd.get_text()
break
if res != gtk.RESPONSE_OK:
self.dialog.destroy()
diff --git a/tryton/gui/window/dblogin.py b/tryton/gui/window/dblogin.py
index eb391b9153..272d95e5e1 100644
--- a/tryton/gui/window/dblogin.py
+++ b/tryton/gui/window/dblogin.py
@@ -299,13 +299,11 @@ class DBListEditor(object):
self.port_entry.set_sensitive(False)
self.updating_db = True
- def callback(dbs, createdb):
+ def callback(dbs):
self.updating_db = False
self.db_cache = (host, port, self.current_profile['name'])
- if dbs is None and createdb is None:
- pass
- elif dbs is None or dbs == -1:
+ if dbs is None or dbs == -1:
if dbs is None:
label = _(u'Could not connect to the server')
else:
@@ -313,10 +311,9 @@ class DBListEditor(object):
self.database_label.set_label('%s' % label)
self.database_label.show()
elif dbs == 0:
- if createdb:
- self.database_button.show()
- else:
- self.database_entry.show()
+ self.database_button.show()
+ elif dbs == -2:
+ self.database_entry.show()
else:
self.database_entry.set_text(dbname if dbname else '')
self.database_combo.show()
diff --git a/tryton/rpc.py b/tryton/rpc.py
index 271d383e74..4e06a8be0e 100644
--- a/tryton/rpc.py
+++ b/tryton/rpc.py
@@ -44,7 +44,8 @@ def db_list(host, port):
return result
except Fault, exception:
if exception.faultCode == 'AccessDenied':
- raise
+ logging.getLogger(__name__).debug(-2)
+ return -2
else:
logging.getLogger(__name__).debug(repr(None))
return None