1 from django.template.loader import render_to_string
2 from django.shortcuts import render
4 from manifold.core.query import Query
5 from manifold.manifoldapi import execute_query
7 from portal.models import PendingSlice
8 from portal.actions import authority_get_pi_emails
9 from portal.forms import SliceRequestForm
10 from portal.templateviews import LoginRequiredAutoLogoutView
11 from myslice.viewutils import topmenu_items, the_user
13 class SliceRequestView (LoginRequiredAutoLogoutView):
15 def authority_hrn_initial (self, request):
16 authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
17 # authorities_query = Query.get('authority').select('authority_hrn')
18 authorities = execute_query(request, authorities_query)
20 authority_hrn_tuples = [ (authority['authority_hrn'], authority['name'],) for authority in authorities ]
21 return {'authority_hrn': authority_hrn_tuples}
23 # because we inherit LoginRequiredAutoLogoutView that is implemented by redefining 'dispatch'
24 # we cannot redefine dispatch here, or we'd lose LoginRequired and AutoLogout behaviours
25 def post (self, request):
27 # The form has been submitted
28 form = SliceRequestForm(request.POST, initial=self.authority_hrn_initial(request))
31 slice_name = form.cleaned_data['slice_name']
32 authority_hrn = form.cleaned_data['authority_hrn']
33 number_of_nodes = form.cleaned_data['number_of_nodes']
34 type_of_nodes = form.cleaned_data['type_of_nodes']
35 purpose = form.cleaned_data['purpose']
38 slice_name = slice_name,
39 authority_hrn = authority_hrn,
40 number_of_nodes = number_of_nodes,
41 type_of_nodes = type_of_nodes,
46 # All validation rules pass; process data in form.cleaned_data
47 # slice_name, number_of_nodes, type_of_nodes, purpose
48 email = form.cleaned_data['email'] # email of the sender
49 cc_myself = form.cleaned_data['cc_myself']
51 # The recipients are the PI of the authority
52 recipients = authority_get_pi_emails(authority_hrn)
53 #recipients = ['yasin.upmc@gmail.com','jordan.auge@lip6.fr']
55 recipients.append(email)
56 msg = render_to_string('slice_request_email.txt', form.cleaned_data)
57 send_mail("Onelab New Slice request form submitted", msg, email, recipients)
59 return render(request,'slicereq_recvd.html') # Redirect after POST
61 return self._display (request, form)
63 def get (self, request):
64 return self._display (request, SliceRequestForm(initial=self.authority_hrn_initial(request)))
66 def _display (self, request, form):
67 return render(request, 'slice_request.html', {
69 'topmenu_items': topmenu_items('Request a slice', request),
70 'username': the_user (request)