plugins: added pres_view + small fixes
authorJordan Augé <jordan.auge@lip6.fr>
Fri, 2 Aug 2013 10:35:13 +0000 (12:35 +0200)
committerJordan Augé <jordan.auge@lip6.fr>
Fri, 2 Aug 2013 10:35:13 +0000 (12:35 +0200)
plugins/code_editor/code_editor.js
plugins/googlemap/googlemap.js
plugins/pres_view [new submodule]
portal/event.py [new file with mode: 0644]
portal/static/experiments.png [new file with mode: 0644]
portal/static/testbeds.png [new file with mode: 0644]
portal/static/user.png [new file with mode: 0644]
portal/urls.py
portal/views.py
unfold/templates/plugin-init.js

index 5e88873..664bbdc 100644 (file)
 
         this.initialize();
         // END CONSTRUCTOR
-    } // function DebugPlatform
+    } // function CodeEditor
 
 })( jQuery );
 
index 8c3c095..69db6ef 100644 (file)
@@ -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 (submodule)
index 0000000..96e46a0
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 96e46a0ff58c6c5e2bec53e4fa3f6b2b95e639eb
diff --git a/portal/event.py b/portal/event.py
new file mode 100644 (file)
index 0000000..cf95b5e
--- /dev/null
@@ -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 (file)
index 0000000..cd97086
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 (file)
index 0000000..ed9aa0e
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 (file)
index 0000000..fa72bdd
Binary files /dev/null and b/portal/static/user.png differ
index b756c98..16da2e6 100644 (file)
@@ -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<type>\w+)/?$', 'portal.views.pres_view_methods'),
+    (r'^animation/(?P<constraints>[^/]+)/(?P<id>\w+)/?$', 'portal.views.pres_view_animation'),
+    (r'^static/(?P<constraints>[^/]+)/(?P<id>\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'),
index 73e1ea4..d55fc17 100644 (file)
@@ -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")
index 0d44075..5995a71 100644 (file)
@@ -1 +1 @@
-$(document).ready(function() { jQuery('#{{ domid }}').{{ plugin_classname }}({{ settings_json|safe }}); });
+$(document).ready(function() { $('#{{ domid }}').{{ plugin_classname }}({{ settings_json|safe }}); });