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