From 0b28b9a05826740f82decbd9e29662bf008e3b5c Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 5 Sep 2013 17:07:26 +0200 Subject: [PATCH] isolate slice request view not thoroughly tested yet (I run into db issues on my linux box which is the only one that can send mails) also a fix for importing account_process --- portal/slicerequestview.py | 73 +++++++++++++++++++++++++++++++++++++ portal/urls.py | 8 ++-- portal/views.py | 75 ++------------------------------------ 3 files changed, 80 insertions(+), 76 deletions(-) create mode 100644 portal/slicerequestview.py diff --git a/portal/slicerequestview.py b/portal/slicerequestview.py new file mode 100644 index 00000000..e42619e8 --- /dev/null +++ b/portal/slicerequestview.py @@ -0,0 +1,73 @@ +from django.template.loader import render_to_string +from django.shortcuts import render + +from manifold.core.query import Query +from manifold.manifoldapi import execute_query + +from portal.models import PendingSlice +from portal.actions import authority_get_pi_emails +from portal.forms import SliceRequestForm +from portal.templateviews import LoginRequiredAutoLogoutView +from myslice.viewutils import topmenu_items, the_user + +class SliceRequestView (LoginRequiredAutoLogoutView): + + def authority_hrn_initial (self, request): + authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn') +# authorities_query = Query.get('authority').select('authority_hrn') + authorities = execute_query(request, authorities_query) + + authority_hrn_tuples = [ (authority['authority_hrn'], authority['name'],) for authority in authorities ] + return {'authority_hrn': authority_hrn_tuples} + + # because we inherit LoginRequiredAutoLogoutView that is implemented by redefining 'dispatch' + # we cannot redefine dispatch here, or we'd lose LoginRequired and AutoLogout behaviours + def post (self, request): + + # The form has been submitted + form = SliceRequestForm(request.POST, initial=self.authority_hrn_initial(request)) + + if form.is_valid(): + slice_name = form.cleaned_data['slice_name'] + authority_hrn = form.cleaned_data['authority_hrn'] + number_of_nodes = form.cleaned_data['number_of_nodes'] + type_of_nodes = form.cleaned_data['type_of_nodes'] + purpose = form.cleaned_data['purpose'] + + s = PendingSlice( + slice_name = slice_name, + authority_hrn = authority_hrn, + number_of_nodes = number_of_nodes, + type_of_nodes = type_of_nodes, + purpose = purpose + ) + s.save() + + # All validation rules pass; process data in form.cleaned_data + # slice_name, number_of_nodes, type_of_nodes, purpose + email = form.cleaned_data['email'] # email of the sender + cc_myself = form.cleaned_data['cc_myself'] + + # The recipients are the PI of the authority + recipients = authority_get_pi_emails(authority_hrn) + #recipients = ['yasin.upmc@gmail.com','jordan.auge@lip6.fr'] + if cc_myself: + recipients.append(email) + msg = render_to_string('slice_request_email.txt', form.cleaned_data) + send_mail("Onelab New Slice request form submitted", msg, email, recipients) + + return render(request,'slicereq_recvd.html') # Redirect after POST + else: + return self._display (request, form) + + def get (self, request): + return self._display (request, SliceRequestForm(initial=self.authority_hrn_initial(request))) + + def _display (self, request, form): + return render(request, 'slice_request.html', { + 'form': form, + 'topmenu_items': topmenu_items('Request a slice', request), + 'username': the_user (request) + }) + + diff --git a/portal/urls.py b/portal/urls.py index 35a3cf0e..ebf2a161 100644 --- a/portal/urls.py +++ b/portal/urls.py @@ -24,13 +24,13 @@ from django.views.generic.base import TemplateView from django.conf.urls import patterns, include, url from portal.views import PresViewView, ValidatePendingView -from portal.views import slice_request, register_4m_f4f -from portal.accountview import account_process +from portal.views import register_4m_f4f from portal.platformsview import PlatformsView from portal.platformview import PlatformView from portal.dashboardview import DashboardView -from portal.accountview import AccountView +from portal.accountview import AccountView, account_process from portal.contactview import ContactView +from portal.slicerequestview import SliceRequestView # DEPRECATED #named_register_forms = ( @@ -58,7 +58,7 @@ urlpatterns = patterns('', url(r'^register/?$', register_4m_f4f), url(r'^contact/?$', ContactView.as_view(), name='contact'), # Slice request - url(r'^slice_request/?$', slice_request), + url(r'^slice_request/?$', SliceRequestView.as_view(), name='slice_request'), # Validate pending requests url(r'^validate/?$', ValidatePendingView.as_view()), # http://stackoverflow.com/questions/2360179/django-urls-how-to-pass-a-list-of-items-via-clean-urls diff --git a/portal/views.py b/portal/views.py index c536322e..6e6bb2d9 100644 --- a/portal/views.py +++ b/portal/views.py @@ -24,6 +24,7 @@ import os.path, re import json +from django.http import HttpResponseRedirect, HttpResponse from django.views.generic.base import TemplateView from django.shortcuts import render from django.template.loader import render_to_string @@ -31,6 +32,8 @@ from django.core.mail import send_mail from django.utils.decorators import method_decorator from django.contrib.auth.decorators import login_required +from myslice.viewutils import topmenu_items, the_user + from plugins.lists.simplelist import SimpleList from plugins.hazelnut import Hazelnut from plugins.pres_view import PresView @@ -44,9 +47,6 @@ from portal.actions import authority_get_pi_emails, get_request_by_ from manifold.manifoldapi import execute_query from manifold.core.query import Query from unfold.page import Page -from myslice.viewutils import topmenu_items, the_user -from django.http import HttpResponseRedirect, HttpResponse - def register_4m_f4f(request): errors = [] @@ -159,75 +159,6 @@ def register_4m_f4f(request): }) -@login_required -def slice_request(request): - errors = [] - - authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn') - #authorities_query = Query.get('authority').select('authority_hrn') - authorities = execute_query(request, authorities_query) - - authority_hrn_tuple = [] - for authority in authorities: - authority_hrn_tuple.append((authority['authority_hrn'], authority['name'])) - authority_hrn_initial = {'authority_hrn': authority_hrn_tuple} - - # request.POST or None ? - if request.method == 'POST': - # The form has been submitted - form = SliceRequestForm(request.POST, initial=authority_hrn_initial) - - if form.is_valid(): - slice_name = form.cleaned_data['slice_name'] - authority_hrn = form.cleaned_data['authority_hrn'] - number_of_nodes = form.cleaned_data['number_of_nodes'] - type_of_nodes = form.cleaned_data['type_of_nodes'] - purpose = form.cleaned_data['purpose'] - - s = PendingSlice( - slice_name = slice_name, - authority_hrn = authority_hrn, - number_of_nodes = number_of_nodes, - type_of_nodes = type_of_nodes, - purpose = purpose - ) - s.save() - - # All validation rules pass; process data in form.cleaned_data - # slice_name, number_of_nodes, type_of_nodes, purpose - email = form.cleaned_data['email'] # email of the sender - cc_myself = form.cleaned_data['cc_myself'] - - # The recipients are the PI of the authority - recipients = authority_get_pi_emails(authority_hrn) - #recipients = ['yasin.upmc@gmail.com','jordan.auge@lip6.fr'] - if cc_myself: - recipients.append(email) - msg = render_to_string('slice_request_email.txt', form.cleaned_data) - send_mail("Onelab New Slice request form submitted", msg, email, recipients) - - return render(request,'slicereq_recvd.html') # Redirect after POST - else: - form = SliceRequestForm(initial=authority_hrn_initial) - -# template_env = {} -# template_env['form'] = form -# template_env['topmenu_items'] = topmenu_items('Request a slice', request) -# template_env['unfold1_main'] = render(request, 'slice_request_.html', { -# 'form': form, -# }) -# from django.shortcuts import render_to_response -# from django.template import RequestContext -# return render_to_response ('view-unfold1.html',template_env, -# context_instance=RequestContext(request)) - - return render(request, 'slice_request.html', { - 'form': form, - 'topmenu_items': topmenu_items('Request a slice', request), - 'username': the_user (request) - }) - - class PresViewView(TemplateView): template_name = "view-unfold1.html" -- 2.43.0