From: Ciro Scognamiglio Date: Mon, 24 Feb 2014 17:51:33 +0000 (+0100) Subject: rest module, home view shows the list of slices X-Git-Tag: myslice-1.1~315 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=574ab14b3b3daf0f407dcc2a73a54ad5f87af372;p=unfold.git rest module, home view shows the list of slices --- diff --git a/myslice/urls.py b/myslice/urls.py index 5e1547bd..1eac188f 100644 --- a/myslice/urls.py +++ b/myslice/urls.py @@ -55,6 +55,17 @@ urls = [ # the manifold proxy (r'^manifold/proxy/(?P\w+)/?$', 'manifold.manifoldproxy.proxy'), # + # + # RESTful interface + (r'^rest/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.dispatch'), + (r'^datatable/(?P[^/]+)/(?P[^/]+)?/?$', 'rest.dispatch'), + # + # + #(r'^view/?', include('view.urls')), + #(r'^list/slices', 'view.list.slices'), + #(r'^list/(?P[^/]+)', 'view.list.default'), + # + # # Portal url(r'^portal/', include('portal.urls')), ] diff --git a/portal/static/css/onelab.css b/portal/static/css/onelab.css index e2f62164..dc8932ce 100644 --- a/portal/static/css/onelab.css +++ b/portal/static/css/onelab.css @@ -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; diff --git a/portal/templates/onelab/onelab_home-view.html b/portal/templates/onelab/onelab_home-view.html index 80e040cc..6777eb33 100644 --- a/portal/templates/onelab/onelab_home-view.html +++ b/portal/templates/onelab/onelab_home-view.html @@ -36,6 +36,7 @@ {% if person %} +
Loading Slices
{% else %} {% endif %} @@ -93,10 +94,22 @@ }); $('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( "
  • " + val + "
  • " ); + }); + + $("div#home-slice-list").html($( "
      ", { html: items.join( "" ) })); + + }); + {% endif %} }); {% endblock unfold_main %} diff --git a/rest/__init__.py b/rest/__init__.py new file mode 100644 index 00000000..892e4ca5 --- /dev/null +++ b/rest/__init__.py @@ -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 index 00000000..c72b4e4d --- /dev/null +++ b/rest/get.py @@ -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 index 00000000..87792a6d --- /dev/null +++ b/rest/platform.py @@ -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 index 00000000..55d364d2 --- /dev/null +++ b/rest/urls.py @@ -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[^/]+)/?$', '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 index 00000000..b38ac5f7 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 index 00000000..e3e22a3e Binary files /dev/null and b/ui/static/img/loading.gif differ