From 9015bb48b3c2aa3a0ec128479aede138d61b1de3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 25 Sep 2008 12:25:24 +0200 Subject: [PATCH] Convert WizardProgress into RPCProgress Use RPCProgress for database creation --- tryton/common/common.py | 70 ++++++++++++++++++++++++++++++ tryton/gui/window/dbcreate.py | 12 +++-- tryton/wizard/main.py | 82 ++--------------------------------- 3 files changed, 82 insertions(+), 82 deletions(-) diff --git a/tryton/common/common.py b/tryton/common/common.py index fd25e4ff25..fc6b026557 100644 --- a/tryton/common/common.py +++ b/tryton/common/common.py @@ -18,6 +18,7 @@ import tryton.rpc as rpc import locale import socket from tryton.version import VERSION +import thread _ = gettext.gettext @@ -729,6 +730,75 @@ def generateColorscheme(masterColor, keys, light=0.06): return dict([(key, lighten(r, g, b, light * i)) for i, key in enumerate(keys)]) + +class RPCProgress(object): + + def __init__(self, method, args, parent): + self.method = method + self.args = args + self.parent = parent + self.res = None + self.error = False + self.exception = None + + def start(self): + try: + self.res = getattr(rpc, self.method)(*self.args) + except Exception, exception: + self.error = True + self.res = False + self.exception = exception + return True + if not self.res: + self.error = True + return True + + def run(self): + thread.start_new_thread(self.start, ()) + + i = 0 + win = None + progressbar = None + while (not self.res) and (not self.error): + time.sleep(0.1) + i += 1 + if i > 10: + if not win or not progressbar: + win = gtk.Window(type=gtk.WINDOW_TOPLEVEL) + win.set_position(gtk.WIN_POS_CENTER_ON_PARENT) + vbox = gtk.VBox(False, 0) + hbox = gtk.HBox(False, 13) + hbox.set_border_width(10) + img = gtk.Image() + img.set_from_stock('tryton-dialog-information', + gtk.ICON_SIZE_DIALOG) + hbox.pack_start(img, expand=True, fill=False) + vbox2 = gtk.VBox(False, 0) + label = gtk.Label() + label.set_markup(''+_('Operation in progress')+'') + label.set_alignment(0.0, 0.5) + vbox2.pack_start(label, expand=True, fill=False) + vbox2.pack_start(gtk.HSeparator(), expand=True, fill=True) + vbox2.pack_start(gtk.Label(_("Please wait,\n" \ + "this operation may take a while...")), + expand=True, fill=False) + hbox.pack_start(vbox2, expand=True, fill=True) + vbox.pack_start(hbox) + progressbar = gtk.ProgressBar() + progressbar.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT) + vbox.pack_start(progressbar, expand=True, fill=False) + win.add(vbox) + win.set_transient_for(self.parent) + win.show_all() + progressbar.pulse() + gtk.main_iteration() + if win: + win.destroy() + gtk.main_iteration() + if self.exception: + raise self.exception + return self.res + COLOR_SCHEMES = { 'red': '#cf1d1d', 'green': '#3fb41b', diff --git a/tryton/gui/window/dbcreate.py b/tryton/gui/window/dbcreate.py index cf0da83c37..544557bd4b 100644 --- a/tryton/gui/window/dbcreate.py +++ b/tryton/gui/window/dbcreate.py @@ -347,11 +347,11 @@ class DBCreate(object): and langreal \ and passwd \ and admin_passwd.get_text(): - if rpc.db_exec( url_m.group(1), int(url_m.group(2)), \ + if rpc.db_exec(url_m.group(1), int(url_m.group(2)), 'db_exist', dbname): common.warning(_("Database with the same name " \ "already exists.\n" \ - "Try another database name."), parent, \ + "Try another database name."), parent, _("Databasename already exist!")) self.entry_dbname.set_text("") self.entry_dbname.grab_focus() @@ -361,8 +361,12 @@ class DBCreate(object): CONFIG['login.port'] = port = url_m.group(2) CONFIG["login.login"] = "admin" try: - rpc.db_exec(host, int(port), 'create', passwd, \ - dbname, langreal, admin_passwd.get_text()) + rpcprogress = common.RPCProgress('db_exec', + (host, int(port), 'create', passwd, + dbname, langreal, + admin_passwd.get_text()), + parent) + rpcprogress.run() except Exception, exception: if str(exception[0]) == "AccessDenied": common.warning(_("Sorry, the Tryton server " \ diff --git a/tryton/wizard/main.py b/tryton/wizard/main.py index 98d8e05944..512eed9106 100644 --- a/tryton/wizard/main.py +++ b/tryton/wizard/main.py @@ -157,11 +157,12 @@ class Wizard(object): dia = None while state != 'end': ctx = context.copy() + ctx.update(rpc.CONTEXT) ctx['active_id'] = datas.get('id') ctx['active_ids'] = datas.get('ids') - wizardprogress = WizardProgress(wiz_id, state, datas, - parent, ctx) - res = wizardprogress.run() + rpcprogress = common.RPCProgress('execute', ('wizard', + 'execute', wiz_id, datas, state, ctx), parent) + res = rpcprogress.run() if not res: if dia: res = {'type': 'form'} @@ -217,78 +218,3 @@ class Wizard(object): rpc.context_reload() except: pass - - -class WizardProgress(object): - - def __init__(self, wizard_id, state, datas, parent, context): - self.res = None - self.error = False - self.wizard_id = wizard_id - self.state = state - self.datas = datas - self.parent = parent - self.context = context - self.exception = None - - def run(self): - - def start(wiz_id, datas, state, context): - ctx = rpc.CONTEXT.copy() - ctx.update(context) - try: - self.res = rpc.execute('wizard', - 'execute', wiz_id, datas, state, ctx) - except Exception, exception: - self.error = True - self.res = False - self.exception = exception - return True - if not self.res: - self.error = True - return True - - thread.start_new_thread(start, - (self.wizard_id, self.datas, self.state, self.context)) - - i = 0 - win = None - progressbar = None - while (not self.res) and (not self.error): - time.sleep(0.1) - i += 1 - if i > 10: - if not win or not progressbar: - win = gtk.Window(type=gtk.WINDOW_TOPLEVEL) - win.set_position(gtk.WIN_POS_CENTER_ON_PARENT) - vbox = gtk.VBox(False, 0) - hbox = gtk.HBox(False, 13) - hbox.set_border_width(10) - img = gtk.Image() - img.set_from_stock('tryton-dialog-information', gtk.ICON_SIZE_DIALOG) - hbox.pack_start(img, expand=True, fill=False) - vbox2 = gtk.VBox(False, 0) - label = gtk.Label() - label.set_markup(''+_('Operation in progress')+'') - label.set_alignment(0.0, 0.5) - vbox2.pack_start(label, expand=True, fill=False) - vbox2.pack_start(gtk.HSeparator(), expand=True, fill=True) - vbox2.pack_start(gtk.Label(_("Please wait,\n" \ - "this operation may take a while...")), - expand=True, fill=False) - hbox.pack_start(vbox2, expand=True, fill=True) - vbox.pack_start(hbox) - progressbar = gtk.ProgressBar() - progressbar.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT) - vbox.pack_start(progressbar, expand=True, fill=False) - win.add(vbox) - win.set_transient_for(self.parent) - win.show_all() - progressbar.pulse() - gtk.main_iteration() - if win: - win.destroy() - gtk.main_iteration() - if self.exception: - common.process_exception(self.exception, self.parent) - return self.res