28 from django.contrib.formtools.wizard.views
import CookieWizardView
29 from django.http
import HttpResponse
30 from django.shortcuts
import redirect
31 from django.template
import loader, RequestContext
32 from django.template.defaultfilters
import force_escape
33 from django.template.loader
import render_to_string
34 from django.utils.translation
import ugettext_lazy
as _
35 from django.views.decorators.csrf
import csrf_protect
37 from wi.utils
import CLM, check_response_errors, messages_ajax
38 from wi.utils.decorators
import django_view
39 from wi.utils.messages_ajax
import ajax_request
40 from wi.utils.messages_codes
import get_error
43 not_to_be_logged_urls = [
'admin_cm/farm/get_list/',
44 'admin_cm/vm/get_list/',
45 'admin_cm/monia/vm_stats/',
47 'user/farm/get_list/',
49 'user/monia/vm_stats/']
52 not_to_be_logged_urls = [
'admin_cm/farm/get_list/',
53 'admin_cm/vm/get_list/',
54 'admin_cm/monia/vm_stats/',
56 'user/farm/get_list/',
58 'user/monia/vm_stats/']
67 if not url.startswith(
'guest'):
68 data.update({
'login': user.username,
'password': user.password,
'cm_id': user.cm_id})
70 if url.startswith(
'admin_cm'):
71 data.update({
'cm_password': user.cm_password})
73 return CLM.send_request(url,
False if url
in not_to_be_logged_urls
else True, **data)
82 user = session.get(
'user')
84 if request_urls
is not None:
87 if isinstance(request_urls, dict):
88 for (key, val)
in request_urls.iteritems():
91 if isinstance(val, tuple):
96 elif isinstance(request_urls, str):
99 elif isinstance(request_urls, tuple):
111 context = RequestContext(request)
112 template = loader.get_template(template_name)
113 return HttpResponse(template.render(context), content_type=content_type)
120 def simple_generic(request, template_name=None, success_msg=lambda x:
'', ask_msg=
lambda x:
'', confirmation=_(
'Yes'), request_url=
None, param=
None):
121 return simple_generic_id(request,
None, template_name, success_msg, ask_msg, confirmation, request_url, param)
124 def simple_generic_id(request, id1, template_name=None, success_msg=lambda x:
'', ask_msg=
lambda x:
'',
125 confirmation=_(
'Yes'), request_url=
None, param=
None, id_key=
None):
127 Simple generic ajax view for creating dialogs (1 entity).
129 return simple_generic_twoid(request, id1,
None, template_name, success_msg, ask_msg, confirmation, request_url,
136 def simple_generic_twoid(request, id1, id2, template_name=None, success_msg=lambda desc: _(
'Success') % {
'desc': desc}, ask_msg=
lambda x:
'',
137 confirmation=_(
'Yes'), request_url=
None, param=
None, id_key=
None, id_key2=
None):
139 Simple generic ajax view for creating dialogs (2 entities).
141 if request.method ==
'POST':
142 if request_url
is None:
143 raise Exception(
"No 'request_url' specified.")
148 raise Exception(
'\'id_key\' not set in urls')
149 args[id_key] = int(id1)
153 raise Exception(
'\'id_key2\' not set in urls')
154 args[id_key2] = int(id2)
156 if param
is not None:
159 prep_data((request_url, args), request.session)
160 return messages_ajax.success(success_msg(force_escape(request.REQUEST.get(
'desc'))))
162 if template_name
is not None:
163 return messages_ajax.success(render_to_string(template_name, {
'text': ask_msg(force_escape(request.REQUEST.get(
'desc'))),
164 'confirmation': confirmation,
'id': id1}, context_instance=RequestContext(request)))
183 if request.method ==
'GET':
184 if request_url
is None:
185 raise Exception(
"No 'request_url' specified.")
190 raise Exception(
'\'id_key\' not set in urls')
191 args[id_key] = int(id1)
193 response =
prep_data((request_url, args), request.session)
194 return messages_ajax.success(response)
196 return messages_ajax.error(
'get_list_generic_id doesn\'t support POST')
203 def form_generic(request, template_name=None, form_class=None, request_url_post=None, request_url_get=None,
204 success_msg=
lambda x:
'', ask_msg=
lambda x:
'', confirmation=_(
'Yes')):
205 return form_generic_id(request,
None, template_name=template_name, form_class=form_class,
206 request_url_post=request_url_post, request_url_get=request_url_get,
207 success_msg=success_msg, ask_msg=ask_msg, confirmation=confirmation)
218 request_url_post=
None, request_url_get=
None,
219 success_msg=
lambda desc: _(
'Success'), ask_msg=
lambda x:
'', confirmation=_(
'Yes'),
220 request_url_both=
None, ajax_success_status=0, id_key=
None):
221 rest_data1 =
prep_data(request_url_both, request.session)
223 if request.method ==
'POST':
225 if rest_data1
is not None:
226 kwargs[
'rest_data'] = rest_data1
227 form = form_class(request.POST, **kwargs)
234 raise Exception(
'\'id_key\' not set in urls')
235 args[id_key] = int(id1)
236 args.update(form.cleaned_data)
238 rest_data2 =
prep_data((request_url_post, args), request.session)
239 return messages_ajax.success(success_msg(force_escape(request.REQUEST.get(
'desc')), rest_data2),
240 status=ajax_success_status)
245 if request_url_get
is not None and id1
is not None:
246 response =
prep_data((request_url_get, {id_key: id1}), request.session)
248 args.append(response)
250 if rest_data1
is not None:
251 kwargs[
'rest_data'] = rest_data1
253 form = form_class(*args, **kwargs)
255 return messages_ajax.success(render_to_string(template_name, {
'form': form,
256 'text': ask_msg(force_escape(request.REQUEST.get(
'desc'))),
257 'confirmation': confirmation,
259 context_instance=RequestContext(request)),
267 ask_msg=
lambda x, y: _(
'Do you want to?'), confirmation=_(
'Yes'), request_url=
None, id_key=
None):
269 Generic ajax view for handling dialogs working on multiple items.
271 if request.method ==
'POST':
272 id_list = request.POST.getlist(
'ids[]')
275 raise Exception(
'\'id_key\' not set in urls')
277 if request_url
is None:
278 raise Exception(
"No 'request_url' specified.")
280 response =
prep_data((request_url, {id_key: [int(a)
for a
in id_list]}), request.session)
282 return messages_ajax.success(success_msg(request.POST.get(
'desc'), int(request.POST.get(
'length'))))
283 return _multiple_id_return(response, id_list, request.POST.get(
'desc'), success_msg)
285 if request.GET.get(
'length')
is None:
286 return messages_ajax.error(_(
"Bad argument list"))
287 return messages_ajax.success(render_to_string(template_name,
288 {
'text': ask_msg(force_escape(request.GET.get(
'desc')), int(request.GET.get(
'length'))),
289 'confirmation': confirmation},
290 context_instance=RequestContext(request)))
297 ask_msg=
lambda x, y: _(
'Do you want to?'),
298 confirmation=_(
'Yes'),
299 request_url=
None, form_class=
None, request_url_both=
None, id_key=
None):
301 Generic ajax view for handling dialogs working on multiple items (with a form).
303 response1 =
prep_data(request_url_both, request.session)
305 if request.method ==
'POST':
307 raise Exception(
'\'id_key\' not set in urls')
309 if request_url
is None:
310 raise Exception(
"No 'request_url' specified.")
313 if response1
is not None:
314 kwargs[
'rest_data'] = response1
315 form = form_class(request.POST, **kwargs)
318 id_list = [int(a)
for a
in request.POST.getlist(
'ids[]')]
319 dictionary = {id_key: id_list}
320 dictionary.update(form.cleaned_data)
321 response2 =
prep_data((request_url, dictionary), request.session)
323 return _multiple_id_return(response2, id_list, request.POST.get(
'desc'), success_msg)
328 if response1
is not None:
329 kwargs[
'rest_data'] = response1
331 form = form_class(*args, **kwargs)
333 return messages_ajax.success(render_to_string(template_name,
335 'text': ask_msg(force_escape(request.REQUEST.get(
'desc')), int(request.REQUEST.get(
'length'))),
336 'confirmation': confirmation},
337 context_instance=RequestContext(request)),
345 def _multiple_id_return(response, id_list, desc, success_msg):
347 for machine_response
in response:
348 if machine_response[
'status'] !=
'ok':
352 return messages_ajax.success(success_msg(desc, count))
354 for i
in range(len(response)):
355 response[i][
'type'] =
'vm'
356 response[i][
'vmid'] = id_list[i]
357 response[i][
'status_text'] = unicode(
get_error(response[i][
'status']))
358 return messages_ajax.success(response, 7999)
368 wizard_name =
'custom_wizard'
369 template_dir_name =
'dirname'
370 url_start =
'url_start'
375 def post(self, *args, **kwargs):
379 if self.request.POST[self.
wizard_name +
'-current_step'] !=
'0' and self.request.COOKIES.get(
'wizard_' + self.
wizard_name).find(
"\"step_data\":{}") != -1:
384 if self.request.POST[self.
wizard_name +
'-current_step']
not in [
'0',
'1']:
385 form = self.get_form(data=self.request.POST, files=self.request.FILES)
386 self.storage.set_step_data(self.steps.current, self.process_step(form))
388 return super(CustomWizardView, self).
post(*args, **kwargs)
390 def get(self, request, *args, **kwargs):
394 self.storage.current_step = self.steps.first
397 if self.request.GET.get(
'selected_image'):
398 form = self.get_form(data={
'0-image_id': [self.request.REQUEST[
'selected_image']],
400 self.storage.set_step_data(self.steps.current, self.process_step(form))
402 self.storage.current_step = str(int(self.steps.first) + 1)
404 return self.render(self.get_form())
411 def done(self, form_list, **kwargs):
412 raise NotImplementedError(
"Your %s class has not defined a done() "
413 "method, which is required." % self.__class__.__name__)