rest module, home view shows the list of slices
authorCiro Scognamiglio <ciro.scognamiglio@cslash.net>
Mon, 24 Feb 2014 17:51:33 +0000 (18:51 +0100)
committerCiro Scognamiglio <ciro.scognamiglio@cslash.net>
Mon, 24 Feb 2014 17:51:33 +0000 (18:51 +0100)
myslice/urls.py
portal/static/css/onelab.css
portal/templates/onelab/onelab_home-view.html
rest/__init__.py [new file with mode: 0644]
rest/get.py [new file with mode: 0644]
rest/platform.py [new file with mode: 0644]
rest/urls.py [new file with mode: 0644]
ui/static/img/icon_authority_color_small.png [new file with mode: 0644]
ui/static/img/loading.gif [new file with mode: 0644]

index 5e1547b..1eac188 100644 (file)
@@ -55,6 +55,17 @@ urls = [
     # the manifold proxy
     (r'^manifold/proxy/(?P<format>\w+)/?$', 'manifold.manifoldproxy.proxy'),
     #
+    #
+    # RESTful interface
+    (r'^rest/(?P<object_type>[^/]+)/(?P<object_name>[^/]+)?/?$', 'rest.dispatch'),
+    (r'^datatable/(?P<object_type>[^/]+)/(?P<object_name>[^/]+)?/?$', 'rest.dispatch'),
+    #
+    #
+    #(r'^view/?', include('view.urls')),
+    #(r'^list/slices', 'view.list.slices'),
+    #(r'^list/(?P<object_type>[^/]+)', 'view.list.default'),
+    #
+    #
     # Portal
     url(r'^portal/', include('portal.urls')),
 ]
index e2f6216..dc8932c 100644 (file)
@@ -177,6 +177,20 @@ div#home-dashboard div#manager {
     display:none;
 }
 
+div#home-dashboard div#home-slice-list {
+    margin:25px 0;
+    padding:0 25px;
+    text-align:left;
+}
+div#home-dashboard div#home-slice-list ul {
+    list-style: none;
+    padding:0;
+    margin:0;
+}
+div#home-dashboard div#home-slice-list li {
+    
+}
+
 .login-submit {
     vertical-align:middle;
     padding:0;
@@ -227,6 +241,17 @@ div.well {
 }
 
 
+/* INSTITUTION */
+div#institution {
+    color:black;
+    margin:25px auto;
+}
+.form-hint {
+    font-size:11pt;
+    font-style:italic;
+    color:gray;
+}
+
 /* SLICE REQUEST */
 div#slice-request {
     color:black;
index 80e040c..6777eb3 100644 (file)
@@ -36,6 +36,7 @@
                                <td>
                                {% if person %}
                                        <button id="slicerequestbtn" type="button" class="btn btn-default"><span class="glyphicon glyphicon-plus"></span> Request a Slice</button>
+                                       <div id="home-slice-list"><img src="{{ STATIC_URL }}img/loading.gif" alt="Loading Slices" /></div>
                                {% else %}
                                {% endif %}
                                </td>
                });
                $('button#ticketbtn').click(function() {
                        window.location="/portal/contact/";
-               })
-               ;$('button#slicerequestbtn').click(function() {
+               });
+               $('button#slicerequestbtn').click(function() {
                        window.location="/portal/slice_request/";
                });
+               
+               {% if person %}
+               $.getJSON("rest/user", function( data ) {
+                 var items = [];
+                 $.each( data[0].slices, function( key, val ) {
+                   items.push( "<li><a href=\"portal/slice/"+val+"\">" + val + "</a></li>" );
+                 });
+                 
+                 $("div#home-slice-list").html($( "<ul/>", { html: items.join( "" ) }));
+                 
+               });
+               {% endif %}
        });
 </script>
 {% endblock unfold_main %}
diff --git a/rest/__init__.py b/rest/__init__.py
new file mode 100644 (file)
index 0000000..892e4ca
--- /dev/null
@@ -0,0 +1,110 @@
+from manifold.core.query            import Query
+
+from django.views.generic.base      import TemplateView
+
+from unfold.loginrequired           import LoginRequiredView
+from django.http                    import HttpResponse
+
+from manifold.core.query            import Query, AnalyzedQuery
+from manifold.manifoldapi           import execute_query
+
+from string import join
+import json
+
+
+def dispatch(request, object_type, object_name):
+
+    switch = {
+         'platform' : platform,
+         'slice' : slice,
+         'user' : user
+    }
+
+    # platform is local
+    if (object_type == 'platform') :
+        object_type = 'local:platform'
+        object_properties = ['platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type'];
+    else :
+        query = Query.get('local:object').filter_by('table', '==', object_type).select('column.name')
+        results = execute_query(request, query)
+        if results :
+            object_properties = []
+            for r in results[0]['column'] :
+                object_properties.append(r['name'])
+        else :
+            return error()
+
+    return switch.get(object_type, error)(request, object_type, object_name, object_properties)
+
+#     if request.method == 'GET':
+#         return switch.get(request, object_type, object_name, object_properties)
+#     elif request.method == 'POST':
+#         return post(request, object_type, object_name)
+
+def platform():
+    return HttpResponse(json.dumps({'user' : 'error message'}), content_type="application/json")
+
+def slice():
+    return HttpResponse(json.dumps({'user' : 'error message'}), content_type="application/json")
+
+def user(request, object_type, object_name, object_properties):
+    query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn').select(object_properties)
+    #.select('slice.slice_hrn')
+        
+    return send(request, execute_query(request, query), object_properties)
+
+def send(request, response, object_properties):
+    if request.path.split('/')[1] == 'rest' :
+        response_data = response
+    else :
+        response_data = {}
+        response_data['columns'] = object_properties
+        response_data['labels'] = object_properties
+        #response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
+        response_data['data'] = []
+        response_data['total'] = len(response)
+        for r in response :
+            d = []
+            for p in object_properties :
+                d.append(r[p])
+            print d
+            
+            response_data['data'].append(d)
+            #response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
+         
+    return HttpResponse(json.dumps(response_data), content_type="application/json")
+
+
+
+
+
+def get(request, object_type, object_name, object_properties):
+        
+    query = Query().get(object_type).select(object_properties).filter_by('user_hrn', '=', '$user_hrn')
+    if (object_name) :
+        query = query.filter_by(object_type + '_hrn', '=', object_name)
+    
+    response = execute_query(request, query)
+    
+    response_data = {}
+    response_data['columns'] = object_properties
+    response_data['labels'] = object_properties
+    #response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
+    response_data['data'] = []
+    response_data['total'] = len(response)
+    for r in response :
+        d = []
+        for p in object_properties :
+            d.append(r[p])
+        print d
+        
+        response_data['data'].append(d)
+        #response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
+         
+    return HttpResponse(json.dumps(response_data), content_type="application/json")
+
+def post(request, object_type, object_name):
+    pass
+
+def error():
+    return HttpResponse(json.dumps({'error' : 'error message'}), content_type="application/json")
\ No newline at end of file
diff --git a/rest/get.py b/rest/get.py
new file mode 100644 (file)
index 0000000..c72b4e4
--- /dev/null
@@ -0,0 +1,63 @@
+from manifold.core.query            import Query, AnalyzedQuery
+
+from django.views.generic.base      import TemplateView
+
+from unfold.loginrequired           import LoginRequiredView
+from django.http                    import HttpResponse
+
+from manifold.core.query            import Query, AnalyzedQuery
+from manifold.manifoldapi           import execute_query
+
+import json
+
+def platform(request, platform_name):
+    
+    platform_query  = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type')
+    response = execute_query(request,platform_query)
+    
+    response_data = {}
+    response_data['columns'] = [ 'platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type' ]
+    response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
+    response_data['data'] = []
+    for r in response :
+        response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
+        
+    return HttpResponse(json.dumps(response_data), content_type="application/json")
+
+def slice(request, slice_name):
+    
+    platform_query  = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type')
+    response = execute_query(request,platform_query)
+    
+
+    
+    response_data = {}
+    response_data['columns'] = [ 'platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type' ]
+    response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
+    response_data['data'] = []
+    for r in response :
+        response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
+        
+    return HttpResponse(json.dumps(response_data), content_type="application/json")
+
+#         slicename = 'ple.upmc.myslicedemo'
+#         main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename)
+#         main_query.select(
+#                 'slice_hrn',
+#                 'resource.hrn', 'resource.urn', 
+#                 'resource.hostname', 'resource.type', 
+#                 'resource.network_hrn',
+#                 'lease.urn',
+#                 'user.user_hrn',
+#                 #'application.measurement_point.counter'
+#         )
+#          
+#         res = execute_query(self.request,main_query)
+#        
+#         print res
+#         
+#         return render(request, self.template_name, {"resources": res[0]['resource']})
+    
+
+#     def get (self, request, name='default'):
+#         return HttpResponse()
\ No newline at end of file
diff --git a/rest/platform.py b/rest/platform.py
new file mode 100644 (file)
index 0000000..87792a6
--- /dev/null
@@ -0,0 +1,42 @@
+from manifold.core.query            import Query, AnalyzedQuery
+
+from django.views.generic.base      import TemplateView
+
+from unfold.loginrequired           import LoginRequiredView
+from django.http                    import HttpResponse
+
+from manifold.core.query            import Query, AnalyzedQuery
+from manifold.manifoldapi           import execute_query
+
+import json
+
+
+def dispatch(request, platform_name):
+    return get(request, platform_name)
+
+def get(request, platform_name):
+    
+    platform_query  = Query().get('local:platform').filter_by('disabled', '==', '0').select('platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type')
+    response = execute_query(request,platform_query)
+    
+    q = Query.get('slice').select('slice_hrn')
+    result = execute_query(request,q)
+    print result
+# #     
+#     query = Query.get('local:object').select('table')
+#     results = execute_query(request, query)
+#     print results
+#     
+    query = Query.get('local:object').filter_by('table', '==', 'slice').select('column.name')
+    results = execute_query(request, query)
+    print results
+    
+    response_data = {}
+    response_data['columns'] = [ 'platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type' ]
+    response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
+    response_data['data'] = []
+    #response_data['resources'] = { 'total' : len(r) }
+    for r in response :
+        response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
+        
+    return HttpResponse(json.dumps(response_data), content_type="application/json")
\ No newline at end of file
diff --git a/rest/urls.py b/rest/urls.py
new file mode 100644 (file)
index 0000000..55d364d
--- /dev/null
@@ -0,0 +1,8 @@
+
+from django.conf.urls           import patterns, include, url
+from django.conf      import settings
+
+
+urlpatterns = patterns('',
+    url(r'^rest/get/slice/(?P<slice_name>[^/]+)/?$', 'rest.get.slice')
+)
diff --git a/ui/static/img/icon_authority_color_small.png b/ui/static/img/icon_authority_color_small.png
new file mode 100644 (file)
index 0000000..b38ac5f
Binary files /dev/null and b/ui/static/img/icon_authority_color_small.png differ
diff --git a/ui/static/img/loading.gif b/ui/static/img/loading.gif
new file mode 100644 (file)
index 0000000..e3e22a3
Binary files /dev/null and b/ui/static/img/loading.gif differ