summaryrefslogtreecommitdiff
path: root/ishtar_common/wizards.py
diff options
context:
space:
mode:
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
commit2c2480a1410c3445572936a70159efda5cc854f4 (patch)
tree840ab617f2927fec8143f6005cfd2d498d1c738f /ishtar_common/wizards.py
parent032ac535ce0de17e7b92d9ba7207d49d8f3e21c6 (diff)
downloadIshtar-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.py168
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: