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):
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()]
self.progress = progressbar.ProgressBar(maxval=maximum, widgets=widgets).start()
@ -47,4 +47,4 @@ class Progress(edbob.Object):
return True
def destroy(self):
print >> sys.stderr, ''
sys.stderr.write("\n")

View file

@ -47,50 +47,32 @@ class SessionProgress(object):
def __init__(self, session, key):
self.session = get_progress_session(session, key)
self.cancelled = False
self.canceled = False
self.clear()
def __call__(self, message, maximum):
self.session['complete'] = False
self.clear()
self.session['message'] = message
self.session['maximum'] = maximum
self.session['cancelled'] = False
self.session['value'] = 0
self.session.save()
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):
self.session.load()
if self.session.get('cancelled'):
self.cancelled = True
if self.session.get('canceled'):
self.canceled = True
else:
self.session['value'] = value
self.session.save()
return not self.cancelled
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)
return not self.canceled
def destroy(self):
pass

View file

@ -61,25 +61,29 @@
$.ajax({
url: '${url('progress', key=key)}',
success: function(data) {
$('#message').html(data.message);
$('#total').html('('+data.maximum+' total)');
$('#cancel button').show();
if (data.complete) {
clearInterval(updater);
$('#cancel button').hide();
$('#total').html('done!');
$('#complete').css('width', '100%');
$('#remaining').hide();
$('#percentage').html('100%');
location.href = data.success_url;
} else {
var width = parseInt(data.value) / parseInt(data.maximum);
width = Math.round(100 * width);
if (width > 0) {
$('#complete').css('width', width+'%');
$('#remaining').css('width', 'auto');
if (data.complete || data.maximum) {
$('#message').html(data.message);
$('#total').html('('+data.maximum+' total)');
$('#cancel button').show();
if (data.complete) {
clearInterval(updater);
$('#cancel button').hide();
$('#total').html('done!');
$('#complete').css('width', '100%');
$('#remaining').hide();
$('#percentage').html('100%');
location.href = data.success_url;
} else {
var width = parseInt(data.value) / parseInt(data.maximum);
width = Math.round(100 * width);
if (width > 0) {
$('#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">
<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">
<tr>

View file

@ -32,8 +32,10 @@ from edbob.pyramid.progress import get_progress_session
def progress(request):
key = request.matchdict['key']
session = get_progress_session(request.session, key)
if session.get('complete') and session.get('success_msg'):
request.session.flash(session['success_msg'])
if session.get('complete'):
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
@ -41,9 +43,9 @@ def cancel(request):
key = request.matchdict['key']
session = get_progress_session(request.session, key)
session.clear()
session['cancelled'] = True
session['canceled'] = True
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)
return {}