diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-08-19 15:12:43 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-08-19 15:12:43 +0200 |
commit | 2c2480a1410c3445572936a70159efda5cc854f4 (patch) | |
tree | 840ab617f2927fec8143f6005cfd2d498d1c738f /ishtar_common/wizards.py | |
parent | 032ac535ce0de17e7b92d9ba7207d49d8f3e21c6 (diff) | |
download | Ishtar-2c2480a1410c3445572936a70159efda5cc854f4.tar.bz2 Ishtar-2c2480a1410c3445572936a70159efda5cc854f4.zip |
Archaeological files: change planning service management
Diffstat (limited to 'ishtar_common/wizards.py')
-rw-r--r-- | ishtar_common/wizards.py | 168 |
1 files changed, 91 insertions, 77 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index af236504c..7da654b80 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -23,13 +23,15 @@ from django.conf import settings from django.contrib.formtools.wizard.storage import get_storage from django.contrib.formtools.wizard.views import NamedUrlWizardView, \ normalize_name +from django.contrib.sites.models import Site from django.core.exceptions import ObjectDoesNotExist from django.core.files.images import ImageFile +from django.core.mail import send_mail from django.db.models.fields.files import FileField from django.db.models.fields.related import ManyToManyField from django.forms import ValidationError from django.shortcuts import render_to_response -from django.template import RequestContext +from django.template import Context, RequestContext, loader from django.utils.datastructures import MultiValueDict as BaseMultiValueDict from django.utils.translation import ugettext_lazy as _ import models @@ -216,12 +218,13 @@ class Wizard(NamedUrlWizardView): if form_datas: form_datas.append(("", "", "spacer")) items = hasattr(base_form, 'fields') and \ - base_form.fields.keyOrder or cleaned_data.keys() + base_form.fields.keyOrder or cleaned_data.keys() for key in items: lbl = None if key.startswith('hidden_'): continue - if hasattr(base_form, 'fields') and key in base_form.fields: + if hasattr(base_form, 'fields') \ + and key in base_form.fields: lbl = base_form.fields[key].label if hasattr(base_form, 'associated_labels') \ and key in base_form.associated_labels: @@ -229,22 +232,22 @@ class Wizard(NamedUrlWizardView): if not lbl: continue value = cleaned_data[key] - if not value and value != False: + if value is None or value == '': continue if key in self.translated_keys: value = _(value) if type(value) == bool: - if value == True: + if value: value = _(u"Yes") - elif value == False: + else: value = _(u"No") elif key in associated_models: values = [] if type(value) in (tuple, list): values = value elif "," in unicode(value): - values = unicode(value - ).strip('[').strip(']').split(",") + values = unicode( + value).strip('[').strip(']').split(",") else: values = [value] rendered_values = [] @@ -274,7 +277,7 @@ class Wizard(NamedUrlWizardView): return self.render(form) base_form = hasattr(form, 'forms') and form.forms[0] or form associated_models = hasattr(base_form, 'associated_models') and \ - base_form.associated_models or {} + base_form.associated_models or {} if hasattr(form, 'forms'): multi = False if form.forms: @@ -289,7 +292,8 @@ class Wizard(NamedUrlWizardView): multi = len(fields) > 1 if multi: assert hasattr(frm, 'base_model'), \ - u"Must define a base_model for " + unicode(frm.__class__) + u"Must define a base_model for " + \ + unicode(frm.__class__) for frm in form.forms: if not frm.is_valid(): continue @@ -300,10 +304,11 @@ class Wizard(NamedUrlWizardView): frm.cleaned_data.pop('DELETE') for key in frm.cleaned_data: value = frm.cleaned_data[key] - if not value and value != False: + if value is None or value == '': continue if key in associated_models: - value = associated_models[key].objects.get(pk=value) + value = associated_models[key].objects.get( + pk=value) if multi: vals[key] = value else: @@ -319,10 +324,10 @@ class Wizard(NamedUrlWizardView): if value: model = associated_models[key] if isinstance(value, unicode) \ - or isinstance(value, str) and "," in value: + or isinstance(value, str) and "," in value: value = value.split(",") if isinstance(value, list) \ - or isinstance(value, tuple): + or isinstance(value, tuple): value = [model.objects.get(pk=val) for val in value if val] if len(value) == 1: @@ -346,11 +351,11 @@ class Wizard(NamedUrlWizardView): return_object) def get_saved_model(self): - """Permit a distinguo when saved model is not the base selected model""" + "Permit a distinguo when saved model is not the base selected model" return self.model def get_current_saved_object(self): - """Permit a distinguo when saved model is not the base selected model""" + "Permit a distinguo when saved model is not the base selected model" return self.get_current_object() def save_model(self, dct, m2m, whole_associated_models, form_list, @@ -363,7 +368,8 @@ class Wizard(NamedUrlWizardView): if '__' not in k: continue vals = k.split('__') - assert len(vals) == 2, "Only one level of dependant item is managed" + assert len(vals) == 2, \ + "Only one level of dependant item is managed" dependant_item, key = vals if dependant_item not in other_objs: other_objs[dependant_item] = {} @@ -388,7 +394,7 @@ class Wizard(NamedUrlWizardView): setattr(obj, k, dct[k]) try: obj.full_clean() - except ValidationError, msg: + except ValidationError: return self.render(form_list[-1]) for dependant_item in other_objs: c_item = getattr(obj, dependant_item) @@ -429,7 +435,7 @@ class Wizard(NamedUrlWizardView): obj = self.get_saved_model()(**dct) try: obj.full_clean() - except ValidationError, msg: + except ValidationError: return self.render(form_list[-1]) obj.save() for k in adds: @@ -463,13 +469,13 @@ class Wizard(NamedUrlWizardView): # necessary to manage interaction between models like # material_index management for baseitems obj.save() - dct = {'item':obj} + dct = {'item': obj} # force evaluation of lazy urls wizard_done_window = unicode(self.wizard_done_window) if wizard_done_window: dct['wizard_done_window'] = wizard_done_window res = render_to_response(self.wizard_done_template, dct, - context_instance=RequestContext(self.request)) + context_instance=RequestContext(self.request)) return return_object and (obj, res) or res def get_deleted(self, keys): @@ -494,8 +500,6 @@ class Wizard(NamedUrlWizardView): def get_form(self, step=None, data=None, files=None): """Manage formset""" - request = self.request - storage = self.storage if data: data = data.copy() if not step: @@ -513,7 +517,7 @@ class Wizard(NamedUrlWizardView): if to_delete: # reorganize for idx, number in enumerate(sorted(not_to_delete, - key=lambda x:int(x))): + key=lambda x: int(x))): idx = unicode(idx) if idx == number: continue @@ -527,8 +531,8 @@ class Wizard(NamedUrlWizardView): frm = form.form if callable(frm): frm = frm() - required_fields = [k for k in frm.fields - if frm.fields[k].required] + required_fields = [ki for ki in frm.fields + if frm.fields[ki].required] base_key = None if required_fields: base_key = required_fields[-1] @@ -538,8 +542,8 @@ class Wizard(NamedUrlWizardView): total_field = 0 if base_key: total_field = len([key for key in data.keys() - if base_key in key.split('-') - and data[key]]) + if base_key in key.split('-') + and data[key]]) if init and not to_delete and ( not hasattr(self, 'form_initialized') or not self.form_initialized): @@ -548,7 +552,8 @@ class Wizard(NamedUrlWizardView): data[step + u'-TOTAL_FORMS'] = unicode(total_field + 1) # TODO:remove form_initialized? # update initialization - #if request.POST and init and hasattr(self, 'form_initialized') \ + # if request.POST and init and hasattr(self, + # 'form_initialized') \ # and self.form_initialized: # for k in init[0]: # data[step + '-' + unicode(total_field) + '-' + k] = \ @@ -560,15 +565,15 @@ class Wizard(NamedUrlWizardView): if hasattr(form, 'fields') and form.fields.keys(): frm = form elif hasattr(form, 'extra_form') and hasattr(form.extra_form, 'fields')\ - and form.extra_form.fields.keys(): + and form.extra_form.fields.keys(): frm = form.extra_form elif hasattr(form, 'forms') and form.forms \ - and form.forms[0].fields.keys(): + and form.forms[0].fields.keys(): frm = form.forms[0] if frm: first_field = frm.fields[frm.fields.keyOrder[0]] attrs = first_field.widget.attrs - attrs.update({'autofocus':"autofocus"}) + attrs.update({'autofocus': "autofocus"}) first_field.widget.attrs = attrs return form @@ -584,10 +589,11 @@ class Wizard(NamedUrlWizardView): or [key for key in request.POST.keys() if key.endswith('DELETE') and request.POST[key]]: return self.render(form) - elif request.POST.has_key('validate_and_end') \ - and request.POST['validate_and_end']: + elif 'validate_and_end' in request.POST \ + and request.POST['validate_and_end']: last_step = self.steps.last - new_form = self.get_form(last_step, + new_form = self.get_form( + last_step, data=self.storage.get_step_data(last_step), files=self.storage.get_step_files(last_step)) self.storage.current_step = last_step @@ -668,9 +674,8 @@ class Wizard(NamedUrlWizardView): vals = [] for k in request.session[storage.prefix]['step_data'][form_key]: if k.startswith(form_key) and k.endswith(key) and \ - request.session[storage.prefix]['step_data'][form_key][k]: - val = request.session[storage.prefix]['step_data']\ - [form_key][k] + request.session[storage.prefix]['step_data'][form_key][k]: + val = request.session[storage.prefix]['step_data'][form_key][k] if type(val) in (list, tuple): val = val[0] vals.append(val) @@ -694,13 +699,13 @@ class Wizard(NamedUrlWizardView): request = self.request if step.startswith('selec-') and step in self.form_list \ and 'pk' in self.form_list[step].associated_models: - model_name = self.form_list[step].associated_models['pk' - ].__name__.lower() + model_name = self.form_list[step]\ + .associated_models['pk'].__name__.lower() if step == current_step: self.storage.reset() val = model_name in request.session and request.session[model_name] if val: - return MultiValueDict({'pk':val}) + return MultiValueDict({'pk': val}) elif current_obj: return self.get_instanced_init(current_obj, step) current_form = self.form_list[current_step] @@ -709,7 +714,7 @@ class Wizard(NamedUrlWizardView): for key in current_form.currents: model_name = current_form.currents[key].__name__.lower() val = model_name in request.session and \ - request.session[model_name] + request.session[model_name] if val: initial[key] = val if initial: @@ -729,8 +734,8 @@ class Wizard(NamedUrlWizardView): self.request.session[obj_name] = unicode(obj.pk) initial = MultiValueDict() if self.request.POST or \ - (step in self.request.session[self.storage.prefix] and\ - self.request.session[self.storage.prefix]['step_data'][step]): + (step in self.request.session[self.storage.prefix] and + self.request.session[self.storage.prefix]['step_data'][step]): return initial if hasattr(c_form, 'base_fields'): for base_field in c_form.base_fields.keys(): @@ -738,13 +743,13 @@ class Wizard(NamedUrlWizardView): if hasattr(c_form, 'base_model') and \ base_field == c_form.base_model: key = c_form.base_model + 's' - initial.setlist(base_field, [unicode(val.pk) - for val in getattr(obj, key).all()]) + initial.setlist(base_field, [ + unicode(val.pk) for val in getattr(obj, key).all()]) else: fields = base_field.split('__') for field in fields: if not hasattr(value, field) or \ - getattr(value, field) == None: + getattr(value, field) is None: value = obj break value = getattr(value, field) @@ -762,7 +767,7 @@ class Wizard(NamedUrlWizardView): isinstance(value, FileField) or \ isinstance(value, ImageFile): initial[base_field] = value - elif value != None: + elif value is not None: initial[base_field] = unicode(value) elif hasattr(c_form, 'management_form'): initial = [] @@ -789,7 +794,7 @@ class Wizard(NamedUrlWizardView): value = getattr(child_obj, field) if hasattr(value, 'pk'): value = value.pk - if value != None: + if value is not None: vals[field] = unicode(value) if vals: initial.append(vals) @@ -799,8 +804,9 @@ class Wizard(NamedUrlWizardView): class SearchWizard(NamedUrlWizardView): model = None label = '' - modification = None # True when the wizard modify an item - storage_name = 'django.contrib.formtools.wizard.storage.session.SessionStorage' + modification = None # True when the wizard modify an item + storage_name = \ + 'django.contrib.formtools.wizard.storage.session.SessionStorage' def get_wizard_name(self): """ @@ -812,7 +818,7 @@ class SearchWizard(NamedUrlWizardView): """As the class name can interfere when reused prefix with the url_name """ return self.url_name + super(SearchWizard, self).get_prefix(*args, - **kwargs) + **kwargs) def get_template_names(self): templates = ['ishtar/wizard/search.html'] @@ -822,8 +828,8 @@ class SearchWizard(NamedUrlWizardView): context = super(SearchWizard, self).get_context_data(form) self.request.session['CURRENT_ACTION'] = self.get_wizard_name() current_step = self.steps.current - context.update({'current_step':self.form_list[current_step], - 'wizard_label':self.label}) + context.update({'current_step': self.form_list[current_step], + 'wizard_label': self.label}) return context @@ -843,7 +849,8 @@ class DeletionWizard(Wizard): for key in form.cleaned_data: if key == 'pk': model = form.associated_models['pk'] - self.current_obj = model.objects.get(pk=form.cleaned_data['pk']) + self.current_obj = model.objects.get( + pk=form.cleaned_data['pk']) if not self.current_obj: return datas res = {} @@ -873,8 +880,9 @@ class DeletionWizard(Wizard): obj.delete() except ObjectDoesNotExist: pass - return render_to_response('ishtar/wizard/wizard_delete_done.html', {}, - context_instance=RequestContext(self.request)) + return render_to_response( + 'ishtar/wizard/wizard_delete_done.html', {}, + context_instance=RequestContext(self.request)) class ClosingWizard(Wizard): @@ -893,7 +901,7 @@ class ClosingWizard(Wizard): if key == 'pk': model = form.associated_models['pk'] self.current_obj = model.objects.get( - pk=form.cleaned_data['pk']) + pk=form.cleaned_data['pk']) if not self.current_obj: return datas res = {} @@ -921,11 +929,13 @@ class ClosingWizard(Wizard): obj = self.get_current_object() for form in form_list: if form.is_valid(): - if 'end_date' in form.cleaned_data and hasattr(obj, 'end_date'): + if 'end_date' in form.cleaned_data \ + and hasattr(obj, 'end_date'): obj.end_date = form.cleaned_data['end_date'] obj.save() - return render_to_response('ishtar/wizard/wizard_closing_done.html', {}, - context_instance=RequestContext(self.request)) + return render_to_response( + 'ishtar/wizard/wizard_closing_done.html', {}, + context_instance=RequestContext(self.request)) class PersonWizard(Wizard): @@ -940,7 +950,7 @@ class PersonDeletionWizard(DeletionWizard): model = models.Person fields = model.TABLE_COLS wizard_templates = { - 'final-person_deletion':'ishtar/wizard/wizard_person_deletion.html'} + 'final-person_deletion': 'ishtar/wizard/wizard_person_deletion.html'} class OrganizationWizard(Wizard): @@ -955,12 +965,13 @@ class OrganizationDeletionWizard(DeletionWizard): model = models.Organization fields = model.TABLE_COLS wizard_templates = { - 'final-organization_deletion':\ - 'ishtar/wizard/wizard_organization_deletion.html'} + 'final-organization_deletion': + 'ishtar/wizard/wizard_organization_deletion.html'} class AccountWizard(Wizard): model = models.Person + def get_formated_datas(self, forms): datas = super(AccountWizard, self).get_formated_datas(forms) for form in forms: @@ -980,7 +991,7 @@ class AccountWizard(Wizard): if not form.is_valid(): return self.render(form) associated_models = hasattr(form, 'associated_models') and \ - form.associated_models or {} + form.associated_models or {} if type(form.cleaned_data) == dict: for key in form.cleaned_data: if key == 'pk': @@ -1001,10 +1012,11 @@ class AccountWizard(Wizard): account.email = dct['email'] except ObjectDoesNotExist: now = datetime.datetime.now() - account = models.IshtarUser(person=person, username=dct['username'], - email=dct['email'], first_name=person.surname, - last_name=person.name, is_staff=False, is_active=True, - is_superuser=False, last_login=now, date_joined=now) + account = models.IshtarUser( + person=person, username=dct['username'], email=dct['email'], + first_name=person.surname, last_name=person.name, + is_staff=False, is_active=True, is_superuser=False, + last_login=now, date_joined=now) if dct['password']: account.set_password(dct['password']) account.save() @@ -1014,20 +1026,21 @@ class AccountWizard(Wizard): site = Site.objects.get_current() app_name = site and ("Ishtar - " + site.name) \ - or "Ishtar" - context = Context({'login':dct['username'], - 'password':dct['password'], - 'app_name':app_name, - 'site': site and site.domain or "" - }) + or "Ishtar" + context = Context({ + 'login': dct['username'], + 'password': dct['password'], + 'app_name': app_name, + 'site': site and site.domain or "" + }) t = loader.get_template('account_activation_email.txt') msg = t.render(context) subject = _(u"[%(app_name)s] Account creation/modification") % { - "app_name":app_name} + "app_name": app_name} send_mail(subject, msg, settings.ADMINS[0][1], [dct['email']], fail_silently=True) res = render_to_response('ishtar/wizard/wizard_done.html', {}, - context_instance=RequestContext(self.request)) + context_instance=RequestContext(self.request)) return res def get_form(self, step=None, data=None, files=None): @@ -1045,6 +1058,7 @@ class AccountWizard(Wizard): class SourceWizard(Wizard): model = None + def get_extra_model(self, dct, form_list): dct = super(SourceWizard, self).get_extra_model(dct, form_list) if 'history_modifier' in dct: |