From: Yasin Date: Wed, 4 Sep 2013 13:49:21 +0000 (+0200) Subject: Fix: merge conflict def def account_process(): in views.py X-Git-Tag: myslice-0.2-1~22 X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=commitdiff_plain;h=02a6c1aea215c598d92bdcd37d19652800a6d156;hp=509a6f439d2d79c95d7dc6a0db34fcd2e1cf235f Fix: merge conflict def def account_process(): in views.py --- diff --git a/README b/README index 5ababdb6..a38c08b7 100644 --- a/README +++ b/README @@ -1,5 +1,7 @@ This file documents the contents of this module +Last update 4 sept. 2013 + See the devel/ subdir for more devel-oriented doc. ==================== 1 minute howto @@ -8,12 +10,9 @@ See the devel/ subdir for more devel-oriented doc. ** should be straightforward ** see devel/django-install.txt in case of trouble -* git clone git://git.onelab.eu/myslice-django.git +* git clone git://git.onelab.eu/myslice.git -- or -- -* git clone ssh://yourlogin@git.onelab.eu/git/myslice-django.git - -* edit myslice/settings.py and -** change the location of your backend API (not yet supported) +* git clone ssh://yourlogin@git.onelab.eu/git/myslice.git * edit myslice/config.py and enter the details of your manifold backend @@ -22,6 +21,8 @@ $ manage.py syncdb * gather static files $ ./manage.py collectstatic (formerly, we used make static, which is deprecated) +-- or -- +$ ./manage.py collectstatic --noinput * run a local server: $ manage.py runserver 0.0.0.0:8000 @@ -32,20 +33,22 @@ when you just need to hit ^C yourself when your static files need to be refreshe * use it from your browser (See more notes on using the development server below) -* install dependencies +* install dependencies $ pip install -r path/to/requirements/file.txt +Note. not quite sure what this is about, I could not spot this file.. ==================== Status *** Authentication *** -Although there still are a few hard-coded accounts in the system, you -will only be able to see some static views and won't be able to send -real queries if you use these, so you'd better use a real account (one -that your manifold backend knows about). +Should be mostly fine +Not quite sure if/how the user gets proper notifications when +. his session has expired (i.e. his frontend is not logged into the backend any longer) +. his credentials have expired (i.e. the uploaded credentials, e.g. SFA delegated cred) + expired and she needs to run e.g. sfi myslice again + +Hard-coded accounts (from a very early stage) are gone -For logging out: click on 'logged as *jean*', this shows a -confirmation page for logging out. this is intended to be temporary. *** Packaging *** @@ -56,35 +59,9 @@ It seems like our app won't work on f14 as is because Django is only 1.3.1 on f1 Plan is to target f18 but I lack a test machine. Also of course I'll try to tackle debian/ubunti at some point. -*** Features *** - -We have a basic model for asynchroneous queries (referring to manifold -queries) and for plugins (in the most general sense a plugin is just a -piece of the output that may be connected to a query) - -Right now the UI has a handful of demo views only; as of this writing -only the list of slices actually comes from the manifold backend in an -asynchroneous way. - -Also all the views are gathered in the trash/ locations for now, being -that they're only for assessment purposes. - -* dahsboard : has one async. query and 2 plugins that share that - query; the intent was to demo a different layout in both cases, - although the datatables one won't work yet at this point. +There also is a working packaging for debian(s) and ubuntu(s) that we use +on an almost daily basis to upgrade manifold.pl.sophia.inria.fr -* the 'Plugin' view demonstrates most of the available plugins. - -* slice view : only demonstrates how to use URLs to pass arguments along - -* scroll view : mostly it only illustrates that some pages can be made - public (no need to login) - -* tab view : a hand-made tab widget - -Not much effort has yet been put into coming up with a nice layout, -feel free to tweak that but it's probably still way too early for -this. ==================== @@ -94,35 +71,46 @@ Third party tools shipped: * datatables * spin * bootstrap -* and others are added as we build the system when they become needed -I've tried to keep track of the version I picked and to have an easy upgrade path. +Others are added as we build the system when they become needed +Look in third-party/ for a more detailed list + +As a rule of thumb, please try to keep in mind that these will need to +be upgraded over time I've tried to keep track of the version I picked +and to have an easy upgrade path (depending on the way the original +package is published) ==================== Contents: 1st level subdirs ========== code from git -* myslice: + +* myslice/ this is the django 'project', where to look for . settings.py . urls.py -* manifold: +* manifold/ the code for dealing with queries, sending them to the backend, and offering the /manifold/proxy/ URL -* unfold: +* unfold/ the code for building / rendering plugins -* plugins: +* plugins/ the actual code for plugins -* auth: +* auth/ a django 'app' that deals with authentication; see especially auth.backend.MyCustomBackend for how to use a separate authentication system, as well as settings.py for how to enable it +* portal/ + this is where the first implementation of myslice, with complete + user-management including registration, is taking place + * trash/ - rough/preliminary views in here - as the name suggests this is temporary + rough/preliminary scaffolding views are in here + as the name suggests this is temporary * views/ will receive actual views over time @@ -147,6 +135,8 @@ I've tried to keep track of the version I picked and to have an easy upgrade pat $ make static $ make clean-static +* django-static + * myslice.sqlite3 this is where django stores its own stuff, as per settings.py @@ -164,8 +154,8 @@ I've tried to keep track of the version I picked and to have an easy upgrade pat plugins/templates/plugins.html, plugins/static/js/simplelist.js plugins/static/css/simplelist.css - which I have tried doing for a while but I found mmyself just hopping around in the file tree all - day long, wasting cycles all along + which I have tried doing for a while but I found myself just hopping around in the file tree all + day long, wasting cycles big time .. as that does not make sense IMHO, I've rewritten the tool for gathering these pieces (this is in the Makefile). Bottom line is we can essentially store this wherever we want. diff --git a/debug_platform/urls.py b/debug_platform/urls.py index 3e4398cd..15063d18 100644 --- a/debug_platform/urls.py +++ b/debug_platform/urls.py @@ -20,9 +20,9 @@ # this program; see the file COPYING. If not, write to the Free Software # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -from django.conf.urls import patterns, include, url -from debug_platform.views import PlatformView -from portal.views import DashboardView +from django.conf.urls import patterns, include, url +from debug_platform.views import PlatformView +from portal.dashboardview import DashboardView urlpatterns = patterns('', #(r'platform/(?P[\w\.]+)/?$', 'debug.platform'), diff --git a/portal/dashboardview.py b/portal/dashboardview.py new file mode 100644 index 00000000..961b7dcc --- /dev/null +++ b/portal/dashboardview.py @@ -0,0 +1,65 @@ +from manifold.core.query import Query +from unfold.page import Page + +from plugins.lists.simplelist import SimpleList + +from portal.templateviews import LoginRequiredAutoLogoutView + +from myslice.viewutils import topmenu_items, the_user + +#This view requires login +class DashboardView (LoginRequiredAutoLogoutView): + + template_name = "dashboard.html" + + def get_context_data(self, **kwargs): + # We might have slices on different registries with different user accounts + # We note that this portal could be specific to a given registry, to which we register users, but i'm not sure that simplifies things + # Different registries mean different identities, unless we identify via SFA HRN or have associated the user email to a single hrn + + #messages.info(self.request, 'You have logged in') + page = Page(self.request) + + # Slow... + #slice_query = Query().get('slice').filter_by('user.user_hrn', 'contains', user_hrn).select('slice_hrn') + slice_query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn').select('user_hrn', 'slice.slice_hrn') + auth_query = Query().get('network').select('network_hrn') + print "AUTH QUERY =====================", auth_query + print "filter", auth_query.filters + page.enqueue_query(slice_query) + page.enqueue_query(auth_query) + + page.expose_js_metadata() + page.expose_queries() + + slicelist = SimpleList( + title = None, + page = page, + key = 'slice.slice_hrn', + query = slice_query, + ) + + authlist = SimpleList( + title = None, + page = page, + key = 'network_hrn', + query = auth_query, + ) + + context = super(DashboardView, self).get_context_data(**kwargs) + context['person'] = self.request.user + context['networks'] = authlist.render(self.request) + context['slices'] = slicelist.render(self.request) + + # XXX This is repeated in all pages + # more general variables expected in the template + context['title'] = 'Test view that combines various plugins' + # the menu items on the top + context['topmenu_items'] = topmenu_items('Dashboard', self.request) + # so we can sho who is logged + context['username'] = the_user(self.request) + + context.update(page.prelude_env()) + + return context + diff --git a/portal/platformsview.py b/portal/platformsview.py new file mode 100644 index 00000000..7c83d942 --- /dev/null +++ b/portal/platformsview.py @@ -0,0 +1,61 @@ +from django.views.generic.base import TemplateView + +from manifold.core.query import Query +from unfold.page import Page + +from myslice.viewutils import topmenu_items, the_user + +from plugins.hazelnut import Hazelnut + +# View for platforms +class PlatformsView(TemplateView): + template_name = "platforms.html" + + def get_context_data(self, **kwargs): + page = Page(self.request) + + #network_query = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform','platform_longname','gateway_type') + network_query = Query().get('local:platform').select('platform','platform_longname','gateway_type') + page.enqueue_query(network_query) + + page.expose_js_metadata() + page.expose_queries() + networklist = Hazelnut( + page = page, + title = 'List', + domid = 'checkboxes', + # this is the query at the core of the slice list + query = network_query, + query_all = network_query, + checkboxes = False, + datatables_options = { + # for now we turn off sorting on the checkboxes columns this way + # this of course should be automatic in hazelnut + 'aoColumns' : [None, None, None, None, {'bSortable': False}], + 'iDisplayLength' : 25, + 'bLengthChange' : True, + }, + ) +# +# networklist = SimpleList( +# title = None, +# page = page, +# key = 'platform', +# query = network_query, +# ) + + context = super(PlatformsView, self).get_context_data(**kwargs) + context['person'] = self.request.user + context['networks'] = networklist.render(self.request) + + # XXX This is repeated in all pages + # more general variables expected in the template + context['title'] = 'Platforms connected to MySlice' + # the menu items on the top + context['topmenu_items'] = topmenu_items('Platforms', self.request) + # so we can sho who is logged + context['username'] = the_user(self.request) + + context.update(page.prelude_env()) + + return context diff --git a/portal/sliceview.py b/portal/sliceview.py index d233c434..bc76acaf 100644 --- a/portal/sliceview.py +++ b/portal/sliceview.py @@ -2,9 +2,8 @@ from django.template import RequestContext from django.shortcuts import render_to_response -from django.contrib.auth.decorators import login_required -from portal.templateviews import LoginRequiredView,LogoutOnManifoldExceptionView +from portal.templateviews import LoginRequiredAutoLogoutView from unfold.page import Page from manifold.core.query import Query, AnalyzedQuery @@ -31,12 +30,12 @@ from plugins.messages.messages import Messages tmp_default_slice='ple.upmc.myslicedemo' debug = True -class SliceView (LoginRequiredView, LogoutOnManifoldExceptionView): +class SliceView (LoginRequiredAutoLogoutView): # def __init__ (self, slicename=None): # self.slicename = slicename or tmp_default_slice - def get_or_logout (self,request, slicename=tmp_default_slice): + def get (self,request, slicename=tmp_default_slice): page = Page(request) page.expose_js_metadata() diff --git a/portal/templates/my_account.html b/portal/templates/my_account.html index 1d5f2e2b..75cb11f5 100644 --- a/portal/templates/my_account.html +++ b/portal/templates/my_account.html @@ -40,7 +40,7 @@
-
+ {% csrf_token %} diff --git a/portal/templateviews.py b/portal/templateviews.py index 0d76fcd5..0f46ff79 100644 --- a/portal/templateviews.py +++ b/portal/templateviews.py @@ -10,8 +10,8 @@ from manifold.manifoldresult import ManifoldException class LoginRequiredView (TemplateView): @method_decorator(login_required) - def dispatch(self, *args, **kwargs): - return super(LoginRequiredView, self).dispatch(*args, **kwargs) + def dispatch(self, request, *args, **kwargs): + return super(LoginRequiredView, self).dispatch(request, *args, **kwargs) ########## the base class for views that need to protect against ManifoldException @@ -24,10 +24,11 @@ class LoginRequiredView (TemplateView): # it is often a good idea for a view to monitor these exceptions # and to take this opportunity to logout people -def logout_on_manifold_exception (view_as_a_function): +def logout_on_manifold_exception (fun_that_returns_httpresponse): def wrapped (request, *args, **kwds): + print 'wrapped by logout_on_manifold_exception' try: - return view_as_a_function(request,*args, **kwds) + return fun_that_returns_httpresponse(request,*args, **kwds) except ManifoldException, manifold_result: # xxx we need a means to display this message to user... from django.contrib.auth import logout @@ -42,11 +43,11 @@ def logout_on_manifold_exception (view_as_a_function): return wrapped # at first sight this matters only for views that require login -# however we prefer this to be explicit -# i.e. a user class has to inherit both LoginRequiredView and LogoutOnManifoldExceptionView - -class LogoutOnManifoldExceptionView (TemplateView): +# so for now we expose a single class that behaves like +# login_required + logout_on_manifold_exception +class LoginRequiredAutoLogoutView (TemplateView): @logout_on_manifold_exception - def get (self, request, *args, **kwds): - return self.get_or_logout (request, *args, **kwds) + @method_decorator(login_required) + def dispatch (self, request, *args, **kwds): + return super(LoginRequiredAutoLogoutView,self).dispatch(request,*args,**kwds) diff --git a/portal/urls.py b/portal/urls.py index c5c270f9..47a75f5a 100644 --- a/portal/urls.py +++ b/portal/urls.py @@ -20,10 +20,12 @@ # this program; see the file COPYING. If not, write to the Free Software # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -from django.conf.urls import patterns, include, url -from portal import views -from portal.views import DashboardView, PresViewView, PlatformsView, PlatformView, ValidatePendingView, AccountView # UserRegisterView, UserValidateView -from portal.util import TemplateView +from django.conf.urls import patterns, include, url +from portal import views +from portal.views import PresViewView, PlatformView, ValidatePendingView, AccountView # UserRegisterView, UserValidateView +from portal.platformsview import PlatformsView +from portal.dashboardview import DashboardView +from portal.util import TemplateView # DEPRECATED #named_register_forms = ( # DEPRECATED # ("step1", RegisterUserForm), @@ -47,7 +49,7 @@ urlpatterns = patterns('', url(r'^platforms/?$', PlatformsView.as_view(), name='platforms'), #url(r'^portal/platform/?$', PlatformView.platform_view(), name='platform'), url(r'^platform/(?P[\w\.]+)/?$', PlatformView.as_view(), name='platform'), - url(r'^account/acc_process/?$', views.acc_process), + url(r'^account/account_process/?$', views.account_process), url(r'^register/?$', views.register_4m_f4f), #url(r'^reg_process/?$', views.reg_4m_f4f_process), url(r'^contact/?$', views.contact), diff --git a/portal/views.py b/portal/views.py index 1fe771ca..99807290 100644 --- a/portal/views.py +++ b/portal/views.py @@ -43,8 +43,8 @@ from portal.forms import SliceRequestForm, ContactForm from portal.util import RegistrationView, ActivationView from portal.models import PendingUser, PendingSlice from portal.actions import authority_get_pi_emails, get_request_by_authority, manifold_add_user, manifold_update_user -from manifold.core.query import Query 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 @@ -52,491 +52,6 @@ from django.http import HttpResponseRedirect, HttpResponse from M2Crypto import Rand, RSA, BIO import os, re -class DashboardView(TemplateView): - template_name = "dashboard.html" - - #This view requires login - @method_decorator(login_required) - def dispatch(self, *args, **kwargs): - return super(DashboardView, self).dispatch(*args, **kwargs) - - def get_context_data(self, **kwargs): - # We might have slices on different registries with different user accounts - # We note that this portal could be specific to a given registry, to which we register users, but i'm not sure that simplifies things - # Different registries mean different identities, unless we identify via SFA HRN or have associated the user email to a single hrn - - #messages.info(self.request, 'You have logged in') - page = Page(self.request) - - # Slow... - #slice_query = Query().get('slice').filter_by('user.user_hrn', 'contains', user_hrn).select('slice_hrn') - slice_query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn').select('user_hrn', 'slice.slice_hrn') - auth_query = Query().get('network').select('network_hrn') - print "AUTH QUERY =====================", auth_query - print "filter", auth_query.filters - page.enqueue_query(slice_query) - page.enqueue_query(auth_query) - - page.expose_js_metadata() - page.expose_queries() - - slicelist = SimpleList( - title = None, - page = page, - key = 'slice.slice_hrn', - query = slice_query, - ) - - authlist = SimpleList( - title = None, - page = page, - key = 'network_hrn', - query = auth_query, - ) - - context = super(DashboardView, self).get_context_data(**kwargs) - context['person'] = self.request.user - context['networks'] = authlist.render(self.request) - context['slices'] = slicelist.render(self.request) - - # XXX This is repeated in all pages - # more general variables expected in the template - context['title'] = 'Test view that combines various plugins' - # the menu items on the top - context['topmenu_items'] = topmenu_items('Dashboard', self.request) - # so we can sho who is logged - context['username'] = the_user(self.request) - - context.update(page.prelude_env()) - - return context - -# DEPRECATED #class UserRegisterView(RegistrationView): -# DEPRECATED # """ -# DEPRECATED # A registration backend which follows a simple workflow: -# DEPRECATED # -# DEPRECATED # 1. User signs up, inactive account is created. -# DEPRECATED # -# DEPRECATED # 2. Email is sent to user with activation link. -# DEPRECATED # -# DEPRECATED # 3. User clicks activation link, account is now active. -# DEPRECATED # -# DEPRECATED # Using this backend requires that -# DEPRECATED # -# DEPRECATED # * ``registration`` be listed in the ``INSTALLED_APPS`` setting -# DEPRECATED # (since this backend makes use of models defined in this -# DEPRECATED # application). -# DEPRECATED # -# DEPRECATED # * The setting ``ACCOUNT_ACTIVATION_DAYS`` be supplied, specifying -# DEPRECATED # (as an integer) the number of days from registration during -# DEPRECATED # which a user may activate their account (after that period -# DEPRECATED # expires, activation will be disallowed). -# DEPRECATED # -# DEPRECATED # * The creation of the templates -# DEPRECATED # ``registration/activation_email_subject.txt`` and -# DEPRECATED # ``registration/activation_email.txt``, which will be used for -# DEPRECATED # the activation email. See the notes for this backends -# DEPRECATED # ``register`` method for details regarding these templates. -# DEPRECATED # -# DEPRECATED # Additionally, registration can be temporarily closed by adding the -# DEPRECATED # setting ``REGISTRATION_OPEN`` and setting it to -# DEPRECATED # ``False``. Omitting this setting, or setting it to ``True``, will -# DEPRECATED # be interpreted as meaning that registration is currently open and -# DEPRECATED # permitt ed. -# DEPRECATED # -# DEPRECATED # Internally, this is accomplished via storing an activation key in -# DEPRECATED # an instance of ``registration.models.RegistrationProfile``. See -# DEPRECATED # that model and its custom manager for full documentation of its -# DEPRECATED # fields and supported operations. -# DEPRECATED # -# DEPRECATED # """ -# DEPRECATED ## DEPRECATED # form_class = UserRegisterForm -# DEPRECATED # -# DEPRECATED # def register(self, request, **cleaned_data): -# DEPRECATED # """ -# DEPRECATED # Given a username, email address and password, register a new -# DEPRECATED # user account, which will initially be inactive. -# DEPRECATED # -# DEPRECATED # Along with the new ``User`` object, a new -# DEPRECATED # ``registration.models.RegistrationProfile`` will be created, -# DEPRECATED # tied to that ``User``, containing the activation key which -# DEPRECATED # will be used for this account. -# DEPRECATED # -# DEPRECATED # An email will be sent to the supplied email address; this -# DEPRECATED # email should contain an activation link. The email will be -# DEPRECATED # rendered using two templates. See the documentation for -# DEPRECATED # ``RegistrationProfile.send_activation_email()`` for -# DEPRECATED # information about these templates and the contexts provided to -# DEPRECATED # them. -# DEPRECATED # -# DEPRECATED # After the ``User`` and ``RegistrationProfile`` are created and -# DEPRECATED # the activation email is sent, the signal -# DEPRECATED # ``registration.signals.user_registered`` will be sent, with -# DEPRECATED # the new ``User`` as the keyword argument ``user`` and the -# DEPRECATED # class of this backend as the sender. -# DEPRECATED # -# DEPRECATED # """ -# DEPRECATED # first_name = cleaned_data['first_name'] -# DEPRECATED # last_name = cleaned_data['last_name'] -# DEPRECATED # affiliation= cleaned_data['affiliation'] -# DEPRECATED # email = cleaned_data['email'] -# DEPRECATED # password = cleaned_data['password1'] -# DEPRECATED # -# DEPRECATED # #password2 = cleaned_data['password2'] -# DEPRECATED # keypair = cleaned_data['keypair'] -# DEPRECATED # -# DEPRECATED # #if Site._meta.installed: -# DEPRECATED # # site = Site.objects.get_current() -# DEPRECATED # #else: -# DEPRECATED # # site = RequestSite(request) -# DEPRECATED # site = None -# DEPRECATED # -# DEPRECATED # new_user = PendingUser.objects.create_inactive_user(first_name, last_name, email, password, site) -# DEPRECATED # signals.user_registered.send(sender=self.__class__, -# DEPRECATED # user=new_user, -# DEPRECATED # request=request) -# DEPRECATED # return new_user -# DEPRECATED # -# DEPRECATED # def get_context_data(self, **kwargs): -# DEPRECATED # context = super(UserRegisterView, self).get_context_data(**kwargs) -# DEPRECATED # context['topmenu_items'] = topmenu_items('Register', self.request) -# DEPRECATED # context['username'] = the_user (self.request) -# DEPRECATED # return context -# DEPRECATED # -# DEPRECATED # def registration_allowed(self, request): -# DEPRECATED # """ -# DEPRECATED # Indicate whether account registration is currently permitted, -# DEPRECATED # based on the value of the setting ``REGISTRATION_OPEN``. This -# DEPRECATED # is determined as follows: -# DEPRECATED # -# DEPRECATED # * If ``REGISTRATION_OPEN`` is not specified in settings, or is -# DEPRECATED # set to ``True``, registration is permitted. -# DEPRECATED # -# DEPRECATED # * If ``REGISTRATION_OPEN`` is both specified and set to -# DEPRECATED # ``False``, registration is not permitted. -# DEPRECATED # -# DEPRECATED # """ -# DEPRECATED # return getattr(settings, 'REGISTRATION_OPEN', True) -# DEPRECATED # -# DEPRECATED # def get_success_url(self, request, user): -# DEPRECATED # """ -# DEPRECATED # Return the name of the URL to redirect to after successful -# DEPRECATED # user registration. -# DEPRECATED # -# DEPRECATED # """ -# DEPRECATED # return ('user_register_complete', (), {}) -# DEPRECATED # -# DEPRECATED # -# DEPRECATED #class UserValidateView(ActivationView): -# DEPRECATED # def activate(self, request, activation_key): -# DEPRECATED # """ -# DEPRECATED # Given an an activation key, look up and activate the user -# DEPRECATED # account corresponding to that key (if possible). -# DEPRECATED # -# DEPRECATED # After successful activation, the signal -# DEPRECATED # ``registration.signals.user_activated`` will be sent, with the -# DEPRECATED # newly activated ``User`` as the keyword argument ``user`` and -# DEPRECATED # the class of this backend as the sender. -# DEPRECATED # -# DEPRECATED # """ -# DEPRECATED # activated_user = RegistrationProfile.objects.activate_user(activation_key) -# DEPRECATED # if activated_user: -# DEPRECATED # signals.user_activated.send(sender=self.__class__, -# DEPRECATED # user=activated_user, -# DEPRECATED # request=request) -# DEPRECATED # return activated_user -# DEPRECATED # -# DEPRECATED # def get_success_url(self, request, user): -# DEPRECATED # return ('registration_activation_complete', (), {}) -# DEPRECATED # -# DEPRECATED # -# DEPRECATED #from portal.portalpage import PortalPage -# DEPRECATED #from plugins.wizard import Wizard -# DEPRECATED #from plugins.form import CreateForm -# DEPRECATED #from plugins.raw.raw import Raw # XXX -# DEPRECATED # -# DEPRECATED #from myslice.viewutils import the_user -# DEPRECATED # -# DEPRECATED #from django.template.loader import render_to_string -# DEPRECATED #from django.template import RequestContext -# DEPRECATED #from django.views import generic -# DEPRECATED # -# DEPRECATED #from django.contrib.formtools.wizard.views import NamedUrlSessionWizardView -# DEPRECATED ##from django.core.files.storage import FileSystemStorage -# DEPRECATED #from django.core.files.storage import default_storage -# DEPRECATED # -# DEPRECATED ##class MerlinWizard(NamedUrlSessionWizardView): -# DEPRECATED ## -# DEPRECATED ## ... -# DEPRECATED ## ... -# DEPRECATED ## -# DEPRECATED ## @classonlymethod -# DEPRECATED ## def as_view(cls, *args, **kwargs): -# DEPRECATED ## kwargs.update({ -# DEPRECATED ## 'form_list': [ -# DEPRECATED ## NameForm, -# DEPRECATED ## QuestForm, -# DEPRECATED ## ColorForm, -# DEPRECATED ## ], -# DEPRECATED ## 'url_name': 'merlin_wizard' -# DEPRECATED ## }) -# DEPRECATED ## return super(MerlinWizard, cls).as_view(*args, **kwargs) -# DEPRECATED # -# DEPRECATED #class UserRegisterWizardView(NamedUrlSessionWizardView): -# DEPRECATED ##class UserRegisterWizardView(LoginRequiredMixin, NamedUrlSessionWizardView): -# DEPRECATED # # Notice that I specify a file storage instance. If you don't specify this, -# DEPRECATED # # and you need to support FileField or ImageField in your forms, you'll get -# DEPRECATED # # errors from Django. This is something else I think could be handled by -# DEPRECATED # # the views better. Seems to me that it should just use whatever the -# DEPRECATED # # default/specified storage is for the rest of your project/application. -# DEPRECATED # file_storage = default_storage # FileSystemStorage() -# DEPRECATED # template_name = "register_user_wizard.html" -# DEPRECATED # -# DEPRECATED # def done(self, form_list, **kwargs): -# DEPRECATED # step1_form = form_list[0] -# DEPRECATED # step2_form = form_list[1] -# DEPRECATED # -# DEPRECATED # productext = self.create_product(product_form) -# DEPRECATED # shippings = self.create_shippings(productext, shipping_forms) -# DEPRECATED # images = self.create_images(productext, image_forms) -# DEPRECATED # -# DEPRECATED # if all([productext, shippings, images]): -# DEPRECATED # del self.request.session["wizard_product_wizard_view"] -# DEPRECATED # -# DEPRECATED # messages.success(self.request, -# DEPRECATED # _("Your product has been created.")) -# DEPRECATED # return HttpResponseRedirect(self.get_success_url(productext)) -# DEPRECATED # -# DEPRECATED # messages.error(self.request, _("Something went wrong creating your " -# DEPRECATED # "product. Please try again or contact support.")) -# DEPRECATED # return HttpResponseRedirect(reverse("register_wizard")) -# DEPRECATED # -# DEPRECATED # #def get_form_kwargs(self, step): -# DEPRECATED # # if step == "product": -# DEPRECATED # # return {"user": self.request.user} -# DEPRECATED # # return {} -# DEPRECATED # -# DEPRECATED ## The portal should hook the slice and user creation pages -# DEPRECATED # -# DEPRECATED #def register_user(request): -# DEPRECATED # -# DEPRECATED # if request.method == 'POST': -# DEPRECATED # form = UserRegisterForm(request.POST) # Nous reprenons les données -# DEPRECATED # if form.is_valid(): -# DEPRECATED # first_name = form.cleaned_data['first_name'] -# DEPRECATED # last_name = form.cleaned_data['last_name'] -# DEPRECATED # email = form.cleaned_data['email'] -# DEPRECATED # password = form.cleaned_data['password'] -# DEPRECATED # password2 = form.cleaned_data['password2'] -# DEPRECATED # keypair = form.cleaned_data['keypair'] -# DEPRECATED # ## Ici nous pouvons traiter les données du formulaire -# DEPRECATED # #sujet = form.cleaned_data['sujet'] -# DEPRECATED # #message = form.cleaned_data['message'] -# DEPRECATED # #envoyeur = form.cleaned_data['envoyeur'] -# DEPRECATED # #renvoi = form.cleaned_data['renvoi'] -# DEPRECATED # ## Nous pourrions ici envoyer l'e-mail grâce aux données que nous venons de récupérer -# DEPRECATED # #envoi = True -# DEPRECATED # else: -# DEPRECATED # form = UserRegisterForm() -# DEPRECATED # return render(request, 'register_user.html', locals()) -# DEPRECATED # -# DEPRECATED #def index(request): -# DEPRECATED # -# DEPRECATED # WIZARD_TITLE = 'User registration' -# DEPRECATED # STEP1_TITLE = 'Enter your details' -# DEPRECATED # STEP2_TITLE = 'Select your institution' -# DEPRECATED # STEP3_TITLE = 'Authentication' -# DEPRECATED # STEP4_TITLE = 'Request a slice (optional)' -# DEPRECATED # STEP5_TITLE = 'Waiting for validation' -# DEPRECATED # STEP6_TITLE = 'Account validated' -# DEPRECATED # -# DEPRECATED # STEP0 = render_to_string('account_validated.html', context_instance=RequestContext(request)) -# DEPRECATED # STEP2_HTML = """ -# DEPRECATED # coucou -# DEPRECATED # """ -# DEPRECATED # STEP4 = """ -# DEPRECATED # mede -# DEPRECATED # """ -# DEPRECATED # STEP5 = render_to_string('account_validated.html', context_instance=RequestContext(request)) -# DEPRECATED # -# DEPRECATED # p = PortalPage(request) -# DEPRECATED # -# DEPRECATED # # This is redundant with the Wizard title -# DEPRECATED # p << "

User registration

" -# DEPRECATED # -# DEPRECATED # sons = [] -# DEPRECATED # start_step = 1 -# DEPRECATED # -# DEPRECATED # # STEP 1 -# DEPRECATED # # If the user already exists (is logged), let's display a summary of his account details -# DEPRECATED # # Otherwise propose a form to fill in -# DEPRECATED # if the_user(request): -# DEPRECATED # # Fill a disabled form with user info -# DEPRECATED # # Please logout to register another user -# DEPRECATED # sons.append(Raw(page=p, title=STEP1_TITLE, togglable=False, html=STEP0)) -# DEPRECATED # start_step += 1 -# DEPRECATED # else: -# DEPRECATED # # We could pass a list of fields also, instead of retrieving them from metadata -# DEPRECATED # # Otherwise we need some heuristics to display nice forms -# DEPRECATED # # XXX Could we log the user in after the form is validated ? -# DEPRECATED # # XXX Explain the password is for XXX -# DEPRECATED # field_list = [{ -# DEPRECATED # 'name' : 'First name', -# DEPRECATED # 'field' : 'firstname', -# DEPRECATED # 'type' : 'text', -# DEPRECATED # 'validate_rx' : '^[a-zA-Z -]+$', -# DEPRECATED # 'validate_err': 'Your first name must be comprised of letters only', -# DEPRECATED # 'description' : 'Enter your first name', -# DEPRECATED # }, { -# DEPRECATED # 'name' : 'Last name', -# DEPRECATED # 'field' : 'lastname', -# DEPRECATED # 'type' : 'text', -# DEPRECATED # 'validate_rx' : '^[a-zA-Z -]+$', -# DEPRECATED # 'validate_err': 'Your last name must be comprised of letters only', -# DEPRECATED # 'description' : 'Enter your last name', -# DEPRECATED # }, { -# DEPRECATED # 'name' : 'Email', -# DEPRECATED # 'field' : 'email', -# DEPRECATED # 'type' : 'text', -# DEPRECATED # 'description' : 'Enter your email address', -# DEPRECATED # }, { -# DEPRECATED # 'name' : 'Password', -# DEPRECATED # 'field' : 'password', -# DEPRECATED # 'type' : 'password', -# DEPRECATED # 'description' : 'Enter your password', -# DEPRECATED # }, { -# DEPRECATED # 'name' : 'Confirm password', -# DEPRECATED # 'field' : 'password2', -# DEPRECATED # 'type' : 'password', -# DEPRECATED # 'description' : 'Enter your password again', -# DEPRECATED # }] -# DEPRECATED # sons.append(CreateForm(page = p, title = STEP1_TITLE, togglable = False, object = 'local:user', fields = field_list)) -# DEPRECATED # -# DEPRECATED # # STEP 2 -# DEPRECATED # # If the user already exists (is logged), let's display a summary of its institution -# DEPRECATED # # Otherwise propose a form to fill in (we should base our selection on the email) -# DEPRECATED # if the_user(request): -# DEPRECATED # # Fill a disabled form with institution -# DEPRECATED # # Please logout to register another user -# DEPRECATED # sons.append(Raw(page=p, title=STEP2_TITLE, togglable=False, html="User created")) -# DEPRECATED # start_step += 1 -# DEPRECATED # else: -# DEPRECATED # sons.append(CreateForm(page = p, title = STEP2_TITLE, togglable = False, object = 'slice')) #institution')) -# DEPRECATED # -# DEPRECATED # # STEP3 -# DEPRECATED # # Please should your prefered authentication method -# DEPRECATED # # This step should allow the user to either choose the user or managed mode in MySlice -# DEPRECATED # sons.append(Raw(page = p, title = STEP3_TITLE, togglable = False, html = STEP2_HTML)) -# DEPRECATED # -# DEPRECATED # # Step 4: Request a slice (optional) -# DEPRECATED # sons.append(CreateForm(page = p, title = STEP4_TITLE, togglable = False, object = 'slice')) -# DEPRECATED # -# DEPRECATED # # Step 5: Your request is waiting for validation -# DEPRECATED # # Periodic refresh -# DEPRECATED # sons.append(Raw(page = p, title = STEP5_TITLE, togglable = False, html = STEP4)) -# DEPRECATED # -# DEPRECATED # # Step 6: Account validation = welcome for newly validated users -# DEPRECATED # # . delegation -# DEPRECATED # # . platforms -# DEPRECATED # # . slice -# DEPRECATED # # . pointers -# DEPRECATED # sons.append(Raw(page = p, title = STEP6_TITLE, togglable = False, html = STEP5)) -# DEPRECATED # -# DEPRECATED # wizard = Wizard( -# DEPRECATED # page = p, -# DEPRECATED # title = WIZARD_TITLE, -# DEPRECATED # togglable = False, -# DEPRECATED # sons = sons, -# DEPRECATED # start_step = start_step, -# DEPRECATED # ) -# DEPRECATED # -# DEPRECATED # p << wizard.render(request) # in portal page if possible -# DEPRECATED # -# DEPRECATED # return p.render() - - -# DEPRECATED ## view for my_account -# DEPRECATED # class MyAccountView(TemplateView): -# DEPRECATED # template_name = "my_account.html" -# DEPRECATED # -# DEPRECATED # def from_process(self, request, **cleaned_data): -# DEPRECATED # #if request.method == 'POST': -# DEPRECATED # # if request.POST['submit_name']: -# DEPRECATED # if 'fname' in request.POST: -# DEPRECATED # messsag= "Got Name" -# DEPRECATED # #return render(request, 'portal/my_account.html') -# DEPRECATED # #response = HttpResponse("Here's the text of the Web page.") -# DEPRECATED # return HttpResponse(message) -# DEPRECATED # -# DEPRECATED # def get_context_data(self, **kwargs): -# DEPRECATED # page = Page(self.request) -# DEPRECATED # context = super(MyAccountView, self).get_context_data(**kwargs) -# DEPRECATED # context['person'] = self.request.user -# DEPRECATED # # XXX This is repeated in all pages -# DEPRECATED # # more general variables expected in the template -# DEPRECATED # context['title'] = 'User Profile Page' -# DEPRECATED # # the menu items on the top -# DEPRECATED # context['topmenu_items'] = topmenu_items('my_account', self.request) -# DEPRECATED # # so we can sho who is logged -# DEPRECATED # context['username'] = the_user(self.request) -# DEPRECATED # context.update(page.prelude_env()) -# DEPRECATED # return context - -# View for platforms -class PlatformsView(TemplateView): - template_name = "platforms.html" - - def get_context_data(self, **kwargs): - page = Page(self.request) - - #network_query = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform','platform_longname','gateway_type') - network_query = Query().get('local:platform').select('platform','platform_longname','gateway_type') - page.enqueue_query(network_query) - - page.expose_js_metadata() - page.expose_queries() - networklist = Hazelnut( - page = page, - title = 'List', - domid = 'checkboxes', - # this is the query at the core of the slice list - query = network_query, - query_all = network_query, - checkboxes = False, - datatables_options = { - # for now we turn off sorting on the checkboxes columns this way - # this of course should be automatic in hazelnut - 'aoColumns' : [None, None, None, None, {'bSortable': False}], - 'iDisplayLength' : 25, - 'bLengthChange' : True, - }, - ) -# -# networklist = SimpleList( -# title = None, -# page = page, -# key = 'platform', -# query = network_query, -# ) - - context = super(PlatformsView, self).get_context_data(**kwargs) - context['person'] = self.request.user - context['networks'] = networklist.render(self.request) - - # XXX This is repeated in all pages - # more general variables expected in the template - context['title'] = 'Platforms connected to MySlice' - # the menu items on the top - context['topmenu_items'] = topmenu_items('Platforms', self.request) - # so we can sho who is logged - context['username'] = the_user(self.request) - - context.update(page.prelude_env()) - - return context - - - # View for 1 platform and its details class PlatformView(TemplateView): template_name = "platform.html" @@ -673,14 +188,12 @@ class AccountView(TemplateView): #context.update(page.prelude_env()) return context -#my_acc form value processing @login_required -def acc_process(request): - +#my_acc form value processing +def account_process(request): user_query = Query().get('local:user').select('password','config') user_details = execute_query(request, user_query) - if 'submit_name' in request.POST: edited_first_name = request.POST['fname'] edited_last_name = request.POST['lname']