diff --git a/tailbone/views/__init__.py b/tailbone/views/__init__.py index 975028e8..c1b27547 100644 --- a/tailbone/views/__init__.py +++ b/tailbone/views/__init__.py @@ -61,6 +61,7 @@ def includeme(config): config.include('tailbone.views.labels') config.include('tailbone.views.people') config.include('tailbone.views.products') + config.include('tailbone.views.progress') config.include('tailbone.views.roles') config.include('tailbone.views.stores') config.include('tailbone.views.subdepartments') diff --git a/tailbone/views/progress.py b/tailbone/views/progress.py new file mode 100644 index 00000000..83a6297a --- /dev/null +++ b/tailbone/views/progress.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2012 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for +# more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Rattail. If not, see . +# +################################################################################ + +""" +Progress Views +""" + +from ..progress import get_progress_session + + +def progress(request): + key = request.matchdict['key'] + session = get_progress_session(request.session, key) + 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 + + +def cancel(request): + key = request.matchdict['key'] + session = get_progress_session(request.session, key) + session.clear() + session['canceled'] = True + session.save() + msg = request.params.get('cancel_msg', "The operation was canceled.") + request.session.flash(msg) + return {} + + +def includeme(config): + config.add_route('progress', '/progress/{key}') + config.add_view(progress, route_name='progress', renderer='json') + + config.add_route('progress.cancel', '/progress/{key}/cancel') + config.add_view(cancel, route_name='progress.cancel', renderer='json')