forked from Pancho/TicketTracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
133 lines (96 loc) · 4.18 KB
/
utils.py
File metadata and controls
133 lines (96 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
from django import forms
from django.core.urlresolvers import reverse
from django.forms.formsets import formset_factory
from django.http import HttpResponseRedirect, HttpResponseNotAllowed
from django.template.defaultfilters import slugify
class TTForm(forms.Form):
def setup(self, request, last_post=None, initial=None):
if initial:
self.initial = initial
def process(self, request):
return
def init_form(request, form_action, form_class, last_post, initial=None):
form_data = {"auto_id": '%s_%%s' % slugify(form_class.__name__.replace('Form', ''))}
this_form_posted = last_post and last_post.get('form_class', '') == form_class.__name__
if last_post and this_form_posted and last_post.get('error', False):
form = form_class(last_post.get('post_data', {}), **form_data)
else:
form = form_class(**form_data)
if this_form_posted:
form.success = True
if isinstance(form, TTForm):
form.setup(request, last_post if this_form_posted else {}, initial)
form.action = form_action
return form
def process_form(request, form_class, home_name, params):
if request.method == 'POST':
form = form_class(request.POST, request.FILES)
if isinstance(form, TTForm): # Setup the form, yet ignore the defaults, because they have no meaning here
form.setup(request, None, None)
error = False
process_result = None
if form.is_valid():
if isinstance(form, TTForm):
process_result = form.process(request)
else:
raise Exception("Tickettracker forms should implement TTForm or they should not be used here")
else:
error = True
# Add form process results to session for redirect to work
request.session['last_post'] = {'form_class': form_class.__name__, 'post_data': request.POST, 'result': process_result, 'error': error}
if params:
return HttpResponseRedirect(reverse(home_name, args=params.split('PARAM_SEPARATOR')))
else:
return HttpResponseRedirect(reverse(home_name))
return HttpResponseNotAllowed(['POST'])
def init_formset(request, form_action, form_class, last_post, initial=None):
form_data = {"auto_id": '%s_%%s' % slugify(form_class.__name__.replace('Form', ''))}
this_form_posted = last_post and last_post.get('form_class', '') == form_class.__name__
formset_factory_instance = formset_factory(form_class, can_delete=True)
if last_post and this_form_posted and last_post.get('error', False):
formset = formset_factory_instance(last_post.get('post_data', {}), **form_data)
for form in formset:
if isinstance(form, TTForm):
form.setup(request, last_post if this_form_posted else {}, form.initial)
else:
formset = formset_factory_instance(initial=initial, **form_data)
if this_form_posted:
formset.success = True
for form in formset:
if isinstance(form, TTForm):
form.setup(request, last_post if this_form_posted else {}, form.initial)
formset.action = form_action
return formset
def process_formset(request, form_class, home_name, params):
if request.method == 'POST':
formset_factory_instance = formset_factory(form_class, can_delete=True)
formset = formset_factory_instance(request.POST, request.FILES)
for form in formset:
if isinstance(form, TTForm): # Setup the form, yet ignore the defaults, because they have no meaning here
form.setup(request, None, None)
error = False
process_results = []
for form in formset:
if form.is_valid():
if isinstance(form, TTForm):
process_results.append(form.process(request))
else:
raise Exception("Tickettracker forms should implement TTForm or they should not be used here")
else:
error = True
# Add form process results to session for redirect to work
request.session['last_post'] = {'form_class': form_class.__name__, 'post_data': request.POST, 'result': process_results, 'error': error}
if params:
return HttpResponseRedirect(reverse(home_name, args=params.split('PARAM_SEPARATOR')))
else:
return HttpResponseRedirect(reverse(home_name))
return HttpResponseNotAllowed(['POST'])
def get_session_data(request):
if 'last_post' in request.session:
data = request.session.get('last_post', None)
del request.session['last_post']
return data
else:
return None
def set_session_data(request, object):
request.session['last_post'] = object