From: Jordan Augé Date: Fri, 2 Aug 2013 10:35:13 +0000 (+0200) Subject: plugins: added pres_view + small fixes X-Git-Tag: myslice-0.2-1~83^2~1 X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=commitdiff_plain;h=64c9f6a817a402720d18ea7bf6cd80f07ca767ec plugins: added pres_view + small fixes --- diff --git a/plugins/code_editor/code_editor.js b/plugins/code_editor/code_editor.js index 5e88873d..664bbdc7 100644 --- a/plugins/code_editor/code_editor.js +++ b/plugins/code_editor/code_editor.js @@ -427,7 +427,7 @@ this.initialize(); // END CONSTRUCTOR - } // function DebugPlatform + } // function CodeEditor })( jQuery ); diff --git a/plugins/googlemap/googlemap.js b/plugins/googlemap/googlemap.js index 8c3c0958..69db6ef1 100644 --- a/plugins/googlemap/googlemap.js +++ b/plugins/googlemap/googlemap.js @@ -12,6 +12,8 @@ (function($){ + var PLUGIN_NAME = 'GoogleMap'; + // routing calls jQuery.fn.GoogleMap = function( method ) { if ( methods[method] ) { @@ -19,7 +21,7 @@ } else if ( typeof method === 'object' || ! method ) { return methods.init.apply( this, arguments ); } else { - jQuery.error( 'Method ' + method + ' does not exist on jQuery.GoogleMap' ); + jQuery.error( 'Method ' + method + ' does not exist on jQuery.' + PLUGIN_NAME ); } }; @@ -48,7 +50,7 @@ plugin.initialize(); /* Events */ - $this.on('show.GoogleMaps', methods.show); + $this.on('show.' + PLUGIN_NAME, methods.show); $this.set_query_handler(options.query_uuid, plugin.query_handler); $this.set_record_handler(options.query_uuid, plugin.record_handler); @@ -69,7 +71,7 @@ var hazelnut = $this.data('Manifold'); // Unbind all events using namespacing - $(window).unbind('Manifold'); + $(window).unbind(PLUGIN_NAME); // Remove associated data hazelnut.remove(); diff --git a/plugins/pres_view b/plugins/pres_view new file mode 160000 index 00000000..96e46a0f --- /dev/null +++ b/plugins/pres_view @@ -0,0 +1 @@ +Subproject commit 96e46a0ff58c6c5e2bec53e4fa3f6b2b95e639eb diff --git a/portal/event.py b/portal/event.py new file mode 100644 index 00000000..cf95b5e0 --- /dev/null +++ b/portal/event.py @@ -0,0 +1,135 @@ +# !/usr/bin/python +# -*-coding: utf-8-*- + +import pickle +import os.path +import xmlrpclib +import ast +import time + +class Event: + def __init__(self, structure): + self.srv="" + self.structure = structure + self.authType = "" + self.server = "" + self.methode = "" + self.parameters = {} + self.return_fields = [] + + self.auth = {} + self.print_method="" + self.print_options="" + self.geo_methode="" + self.id="" + + ##APE### + self.raw = "" + self.channel = "" + ####### + + + + + self.data = self.make_data() + + + def split(self): + args = self.structure.split(";"); + self.raw = args[0] + self.channel = args[1] + self.print_method = args[2] + self.print_options = ast.literal_eval(args[3]) + self.authType = args[4] + self.server = ast.literal_eval(args[5]) + self.server = self.server["server"] + self.methode = args[6] + self.parameters = ast.literal_eval(args[7]) + self.return_fields = eval(args[8]) + + def makeAuth(self): + if self.authType=="anonymous": + self.auth["AuthMethod"] = "anonymous" + elif type=="password": + self.auth["AuthMethod"] = "password" + self.auth["Username"] = "XXX" + self.auth["AuthString"] = "XXX" + elif self.authType=="session": + self.auth["AuthMethod"] = "session" + self.auth["session"] = "XXX" + elif self.authType=="gpg": + self.auth["AuthMethod"] = "gpg" + self.auth["name"] = "XXX" + self.auth["signature"] = "XXX" + + def include_geoposition(self, data): + list=[] + if len(data)<8: + for i in data: + i["ape_position"] = self.get_geoposition(i) + list.append(i) + return list + else: + try: + sites_id = self.srv.GetSites(self.auth,{},["site_id","latitude","longitude"]) + except : + return 45 + try: + for i in data: + for j in sites_id: + if i["site_id"]==j["site_id"]: + try: + pos=[{"latitude": j["latitude"], "longitude": j["longitude"]}] + except: + return 83 + # + i["ape_position"] = pos + list.append(i) + + except: + return 82 + return list + + def get_geoposition(self,i): + if self.geo_methode == "site_id": + id = i["site_id"] + try: + geo_pos = self.srv.GetSites(self.auth, {"site_id": id}, ["latitude","longitude"]) + except: + geo_pos = 43 + return geo_pos + else: + return 42 + + + def get_event_list_from_xmlrpc(self): + self.srv = xmlrpclib.Server(self.server, allow_none = 1) + if self.methode=="GetSites": + self.geo_methode="site_id"; + try : + if len(self.return_fields)==0: + return self.srv.GetSites(self.auth, self.parameters) + else : + return self.srv.GetSites(self.auth, self.parameters, self.return_fields) + except: + return 0 + else: + return 0 + + def make_data(self): + try : + self.split() + self.makeAuth() + except: + return 43 + try : + rototo = self.get_event_list_from_xmlrpc() + except: + return 44 + try: + + return self.include_geoposition(rototo) + except: + return 47 + + diff --git a/portal/static/experiments.png b/portal/static/experiments.png new file mode 100644 index 00000000..cd97086b Binary files /dev/null and b/portal/static/experiments.png differ diff --git a/portal/static/testbeds.png b/portal/static/testbeds.png new file mode 100644 index 00000000..ed9aa0e4 Binary files /dev/null and b/portal/static/testbeds.png differ diff --git a/portal/static/user.png b/portal/static/user.png new file mode 100644 index 00000000..fa72bdd2 Binary files /dev/null and b/portal/static/user.png differ diff --git a/portal/urls.py b/portal/urls.py index b756c98f..16da2e65 100644 --- a/portal/urls.py +++ b/portal/urls.py @@ -22,7 +22,7 @@ from django.conf.urls import patterns, include, url from portal import views -from portal.views import UserRegisterView, UserValidateView, DashboardView +from portal.views import UserRegisterView, UserValidateView, DashboardView, PresViewView from portal.util import TemplateView # DEPRECATED #named_register_forms = ( @@ -48,6 +48,11 @@ urlpatterns = patterns('', url(r'^contact/?$', views.contact), # Slice request url(r'^slice_request/?$', views.slice_request), + + url(r'^pres_view/?$', PresViewView.as_view(), name='pres_view'), + (r'^methods/(?P\w+)/?$', 'portal.views.pres_view_methods'), + (r'^animation/(?P[^/]+)/(?P\w+)/?$', 'portal.views.pres_view_animation'), + (r'^static/(?P[^/]+)/(?P\w+)/?$', 'portal.views.pres_view_static'), #url(r'^slice/request/?$', views.slice_request, name='slice_request'), # Slice confirmation #url(r'^slice/validate/?$', views.slice_validate, name='slice_validate'), diff --git a/portal/views.py b/portal/views.py index 73e1ea4c..d55fc175 100644 --- a/portal/views.py +++ b/portal/views.py @@ -27,7 +27,13 @@ from django.contrib import messages from django.views.generic import View from django.views.generic.base import TemplateView from django.shortcuts import render + from plugins.lists.simplelist import SimpleList + +from plugins.pres_view import PresView +from portal.event import Event +import json + from portal import signals from portal.forms import UserRegisterForm, SliceRequestForm, ContactForm from portal.util import RegistrationView, ActivationView @@ -576,3 +582,175 @@ def slice_request(request): 'username': the_user (request) }) + +class PresViewView(TemplateView): + template_name = "view-unfold1.html" + + def get_context_data(self, **kwargs): + + page = Page(self.request) + + pres_view = PresView(page = page) + + context = super(PresViewView, self).get_context_data(**kwargs) + + #context['ALL_STATIC'] = "all_static" + context['unfold1_main'] = pres_view.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('PresView', self.request) + # so we can sho who is logged + context['username'] = the_user(self.request) + + prelude_env = page.prelude_env() + context.update(prelude_env) + + return context + +def json_me(config_file,type): + json_answer = '' + for ligne in config_file: + if not ligne.startswith('#'): + args = ligne.split(';') + json_answer += str('{ "name": "' + args[0] + '" ,"id":"' + args[1] + '" ,"descriptif":"' + args[2]+'"') + if type!="dynamic": + json_answer += str(',"contraints":') + if args[3]=="": + json_answer += str('""') + else: + json_answer += str(args[3]) + json_answer += str('},') + return json_answer[:-1] + + +DIR = '/var/myslice/' +STATIC = '%s/config_method_static' % DIR +DYNAMIC = '%s/config_method_dynamic' % DIR +ANIMATION = '%s/config_method_animation' % DIR + +def pres_view_methods(request, type): + + if type ==None: + return 0 + elif type =="static": + config = open(STATIC, "r") + json_answer = str('{ "options": [') + json_answer += str(json_me(config,"static")) + json_answer += str('] }') + config.close() + elif type =="dynamic": + config = open(DYNAMIC, "r") + json_answer = str('{ "options": [') + json_answer += str(json_me(config,"dynamic")) + json_answer += str('] }') + config.close() + elif type =="animation": + config = open(ANIMATION, "r") + json_answer = str('{ "options": [') + json_answer += str(json_me(config,"animation")) + json_answer += str('] }') + config.close() + elif type =="all": + config = open(STATIC, "r") + json_answer = str('{ "static": [') + json_answer += str(json_me(config,"static")) + json_answer += str('],') + json_answer += str('"dynamic": [') + config.close() + config = open(DYNAMIC, "r") + json_answer += str(json_me(config,"dynamic")) + json_answer += str('],') + json_answer += str('"animation": [') + config.close() + config = open(ANIMATION, "r") + json_answer += str(json_me(config,"animation")) + json_answer += str('] }') + config.close() + else: + return 0 + return HttpResponse (json_answer, mimetype="application/json") + +def pres_view_animation(request, constraints, id): + +# sites crees depuis 2008 +# static.py?contraints=']date_created':1262325600&id='name_id"' + + # method = request.getvalue('method') #ex : GetSites + #constraints = "']date_created':1262325600" + #id = "2" + + if id == None: + return 0 + + # method = 'GetSites'#request.getvalue('method') #ex : GetSites + # constraints = {}#request.getvalue('constraints') // nul = {} + # response_field = "'site_id','name','date_created'"#request.getvalue('response_field') + + config_file = open(ANIMATION, "r") + for ligne in config_file: + if not ligne.startswith('#'): + ligne = ligne.split('\n') + first = ligne[0].split(';') + if (str(first[1]) == str(id)): + save = first + config_file.close() + + #Les print_method, print_option sont definis par le client (js) + #Les animations acceptent que les connexions anonymous + # args = "postmsg;animation;;;anonymous;https://www.planet-lab.eu/PLCAPI/;" + args = ";;"+str(save[8])+";"+str(save[9])+";anonymous;"+str(save[5])+";"+str(save[6])+";{"+str(constraints)+"};"+str(save[7])+";" + + + #Creation d'un objet event + event = Event(args) + cmd = [{"params": { + "data": { + "print_options": event.print_options, + "print_method": event.print_method, + "message": event.data + } + } + }] + + json_answer = json.dumps(cmd) + return HttpResponse (json_answer, mimetype="application/json") + +def pres_view_static(request, constraints, id): + #constraints = "']date_created':1262325600" + #id = "2" + + # method = 'GetSites'#request.getvalue('method') #ex : GetSites + # constraints = {}#request.getvalue('constraints') // nul = {} + # response_field = "'site_id','name','date_created'"#request.getvalue('response_field') + + config_file = open(STATIC, "r") + for ligne in config_file: + if not ligne.startswith('#'): + ligne = ligne.split('\n') + first = ligne[0].split(';') + if (str(first[1]) == str(id)): + save = first + config_file.close() + + #Les print_method, print_option sont definis par le client (js) + #Les animations acceptent que les connexions anonymous + # args = "postmsg;animation;;;anonymous;https://www.planet-lab.eu/PLCAPI/;" + args = ";;"+str(save[8])+";"+str(save[9])+";anonymous;"+str(save[5])+";"+str(save[6])+";{"+str(constraints)+"};"+str(save[7])+";" + + + #Creation d'un objet event + event = Event(args) + cmd = [{"params": { + "data": { + "print_options": event.print_options, + "print_method": event.print_method, + "message": event.data + } + } + }] + + json_answer = json.dumps(cmd) + return HttpResponse (json_answer, mimetype="application/json") diff --git a/unfold/templates/plugin-init.js b/unfold/templates/plugin-init.js index 0d44075b..5995a719 100644 --- a/unfold/templates/plugin-init.js +++ b/unfold/templates/plugin-init.js @@ -1 +1 @@ -$(document).ready(function() { jQuery('#{{ domid }}').{{ plugin_classname }}({{ settings_json|safe }}); }); +$(document).ready(function() { $('#{{ domid }}').{{ plugin_classname }}({{ settings_json|safe }}); });