various progress tweaks

This commit is contained in:
Lance Edgar 2012-09-28 07:40:47 -07:00
parent ddb01da2bd
commit e0042f6fe5
4 changed files with 44 additions and 56 deletions

View file

@ -38,7 +38,7 @@ class Progress(edbob.Object):
""" """
def __init__(self, message, maximum): def __init__(self, message, maximum):
print >> sys.stderr, "\n%s...(%u total)" % (message, maximum) sys.stderr.write("\n%s...(%u total)\n" % (message, maximum))
widgets = [progressbar.Percentage(), ' ', progressbar.Bar(), ' ', progressbar.ETA()] widgets = [progressbar.Percentage(), ' ', progressbar.Bar(), ' ', progressbar.ETA()]
self.progress = progressbar.ProgressBar(maxval=maximum, widgets=widgets).start() self.progress = progressbar.ProgressBar(maxval=maximum, widgets=widgets).start()
@ -47,4 +47,4 @@ class Progress(edbob.Object):
return True return True
def destroy(self): def destroy(self):
print >> sys.stderr, '' sys.stderr.write("\n")

View file

@ -47,50 +47,32 @@ class SessionProgress(object):
def __init__(self, session, key): def __init__(self, session, key):
self.session = get_progress_session(session, key) self.session = get_progress_session(session, key)
self.cancelled = False self.canceled = False
self.clear()
def __call__(self, message, maximum): def __call__(self, message, maximum):
self.session['complete'] = False self.clear()
self.session['message'] = message self.session['message'] = message
self.session['maximum'] = maximum self.session['maximum'] = maximum
self.session['cancelled'] = False
self.session['value'] = 0 self.session['value'] = 0
self.session.save() self.session.save()
return self return self
def clear(self):
self.session.clear()
self.session['complete'] = False
self.session['error'] = False
self.session['canceled'] = False
self.session.save()
def update(self, value): def update(self, value):
self.session.load() self.session.load()
if self.session.get('cancelled'): if self.session.get('canceled'):
self.cancelled = True self.canceled = True
else: else:
self.session['value'] = value self.session['value'] = value
self.session.save() self.session.save()
return not self.cancelled return not self.canceled
def destroy(self):
if not self.cancelled:
self.session['complete'] = True
self.session.save()
def secondary_progress(self):
return SecondarySessionProgress(self)
class SecondarySessionProgress(object):
def __init__(self, parent):
self.parent = parent
self.session = parent.session
def __call__(self, message, maximum):
self.session['message'] = message
self.session['value'] = 0
self.session['maximum'] = maximum
self.session.save()
return self
def update(self, value):
return self.parent.update(value)
def destroy(self): def destroy(self):
pass pass

View file

@ -61,25 +61,29 @@
$.ajax({ $.ajax({
url: '${url('progress', key=key)}', url: '${url('progress', key=key)}',
success: function(data) { success: function(data) {
$('#message').html(data.message); if (data.complete || data.maximum) {
$('#total').html('('+data.maximum+' total)'); $('#message').html(data.message);
$('#cancel button').show(); $('#total').html('('+data.maximum+' total)');
if (data.complete) { $('#cancel button').show();
clearInterval(updater); if (data.complete) {
$('#cancel button').hide(); clearInterval(updater);
$('#total').html('done!'); $('#cancel button').hide();
$('#complete').css('width', '100%'); $('#total').html('done!');
$('#remaining').hide(); $('#complete').css('width', '100%');
$('#percentage').html('100%'); $('#remaining').hide();
location.href = data.success_url; $('#percentage').html('100%');
} else { location.href = data.success_url;
var width = parseInt(data.value) / parseInt(data.maximum); } else {
width = Math.round(100 * width); var width = parseInt(data.value) / parseInt(data.maximum);
if (width > 0) { width = Math.round(100 * width);
$('#complete').css('width', width+'%'); if (width > 0) {
$('#remaining').css('width', 'auto'); $('#complete').css('width', width+'%');
$('#remaining').css('width', 'auto');
}
$('#percentage').html(width+'%');
} }
$('#percentage').html(width+'%'); } else if (data.error) {
location.href = '${cancel_url}';
} }
}, },
}); });
@ -112,7 +116,7 @@
<div id="wrapper"> <div id="wrapper">
<p><span id="message">Working</span> ... <span id="total"></span></p> <p><span id="message">${initial_msg or "Working"} (please wait)</span> ... <span id="total"></span></p>
<table id="progress-wrapper"> <table id="progress-wrapper">
<tr> <tr>

View file

@ -32,8 +32,10 @@ from edbob.pyramid.progress import get_progress_session
def progress(request): def progress(request):
key = request.matchdict['key'] key = request.matchdict['key']
session = get_progress_session(request.session, key) session = get_progress_session(request.session, key)
if session.get('complete') and session.get('success_msg'): if session.get('complete'):
request.session.flash(session['success_msg']) request.session.flash(session.get('success_msg', "The process has completed successfully."))
elif session.get('error'):
request.session.flash(session.get('error_msg', "An unspecified error occurred."), 'error')
return session return session
@ -41,9 +43,9 @@ def cancel(request):
key = request.matchdict['key'] key = request.matchdict['key']
session = get_progress_session(request.session, key) session = get_progress_session(request.session, key)
session.clear() session.clear()
session['cancelled'] = True session['canceled'] = True
session.save() session.save()
msg = request.params.get('cancel_msg', "The operation was cancelled.") msg = request.params.get('cancel_msg', "The operation was canceled.")
request.session.flash(msg) request.session.flash(msg)
return {} return {}