From f3ef3f0fac9b809449fcb1ca36e13603a9c33bec Mon Sep 17 00:00:00 2001 From: Artur Barseghyan Date: Tue, 18 Oct 2016 03:20:41 +0200 Subject: [PATCH] prepare 0.8.3; minor fixes --- CHANGELOG.rst | 6 ++++++ setup.py | 2 +- src/fobi/__init__.py | 4 ++-- src/fobi/views.py | 47 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 65c48b5e..d4f0a6fc 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,12 @@ are used for versioning (schema follows below): 0.3.4 to 0.4). - All backwards incompatible changes are mentioned in this document. +0.8.3 +----- +2016-10-18 + +- Minor fixes. + 0.8.2 ----- 2016-10-18 diff --git a/setup.py b/setup.py index 446ff700..c3dd5377 100644 --- a/setup.py +++ b/setup.py @@ -138,7 +138,7 @@ for locale_dir in locale_dirs: for f in os.listdir(locale_dir)] -version = '0.8.2' +version = '0.8.3' install_requires = [ 'Pillow>=2.0.0', diff --git a/src/fobi/__init__.py b/src/fobi/__init__.py index 3a799fcd..76369063 100644 --- a/src/fobi/__init__.py +++ b/src/fobi/__init__.py @@ -1,6 +1,6 @@ __title__ = 'django-fobi' -__version__ = '0.8.2' -__build__ = 0x000059 +__version__ = '0.8.3' +__build__ = 0x00005a __author__ = 'Artur Barseghyan ' __copyright__ = '2014-2016 Artur Barseghyan' __license__ = 'GPL 2.0/LGPL 2.1' diff --git a/src/fobi/views.py b/src/fobi/views.py index 110529d2..0adb0013 100644 --- a/src/fobi/views.py +++ b/src/fobi/views.py @@ -6,6 +6,8 @@ import logging import simplejson as json +from collections import OrderedDict + from django.db import models, IntegrityError from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required @@ -1413,6 +1415,7 @@ class FormWizardView(DynamicSessionWizardView): .select_related('form_entry') ] form_list = [] + form_entry_mapping = {} wizard_form_element_entries = [] for creation_counter, form_entry in enumerate(form_entries): # Using frozen queryset to minimize query usage @@ -1427,6 +1430,7 @@ class FormWizardView(DynamicSessionWizardView): form_list.append( (form_entry.slug, form_cls) ) + form_entry_mapping[form_entry.slug] = form_entry if 0 == len(form_list): raise Http404( @@ -1439,8 +1443,51 @@ class FormWizardView(DynamicSessionWizardView): 'template_name': theme.view_form_wizard_entry_template, 'form_wizard_entry': form_wizard_entry, 'wizard_form_element_entries': wizard_form_element_entries, + 'form_entry_mapping': form_entry_mapping, } + def render_done(self, form, **kwargs): + """Render done. + + This method gets called when all forms passed. The method should also + re-validate all steps to prevent manipulation. If any form fails to + validate, `render_revalidation_failure` should get called. + If everything is fine call `done`. + """ + final_forms = OrderedDict() + # walk through the form list and try to validate the data again. + for form_key in self.get_form_list(): + + form_obj = self.get_form( + step=form_key, + data=self.storage.get_step_data(form_key), + files=self.storage.get_step_files(form_key) + ) + + if not form_obj.is_valid(): + return self.render_revalidation_failure(form_key, + form_obj, + **kwargs) + + # Fire plugin processors + form_entry = self.form_entry_mapping[form_key] + form_obj = submit_plugin_form_data( + form_entry=form_entry, + request=self.request, + form=form_obj + ) + + final_forms[form_key] = form_obj + + # render the done view and reset the wizard before returning the + # response. This is needed to prevent from rendering done with the + # same data twice. + done_response = self.done(final_forms.values(), + form_dict=final_forms, + **kwargs) + self.storage.reset() + return done_response + def done(self, form_list, **kwargs): """Done.""" try: