Merge branch 'onelab' of ssh://git.onelab.eu/git/myslice into onelab
[myslice.git] / rest / __init__.py
1 from manifold.core.query            import Query
2
3 from django.views.generic.base      import TemplateView
4
5 from unfold.loginrequired           import LoginRequiredView
6 from django.http                    import HttpResponse
7
8 from manifold.core.query            import Query, AnalyzedQuery
9 from manifoldapi.manifoldapi        import execute_query
10
11 from string import join
12 import json
13
14
15 def dispatch(request, object_type, object_name):
16
17     switch = {
18          'platform' : platform,
19          'slice' : slice,
20          'user' : user
21     }
22
23     # platform is local
24     if (object_type == 'platform') :
25         object_type = 'local:platform'
26         object_properties = ['platform', 'platform_longname', 'platform_url', 'platform_description','gateway_type'];
27     else :
28         query = Query.get('local:object').filter_by('table', '==', object_type).select('column.name')
29         results = execute_query(request, query)
30         if results :
31             object_properties = []
32             for r in results[0]['column'] :
33                 object_properties.append(r['name'])
34         else :
35             return error()
36
37     return switch.get(object_type, error)(request, object_type, object_name, object_properties)
38
39 #     if request.method == 'GET':
40 #         return switch.get(request, object_type, object_name, object_properties)
41 #     elif request.method == 'POST':
42 #         return post(request, object_type, object_name)
43
44 def platform():
45     return HttpResponse(json.dumps({'user' : 'error message'}), content_type="application/json")
46
47 def slice():
48     return HttpResponse(json.dumps({'user' : 'error message'}), content_type="application/json")
49
50 def user(request, object_type, object_name, object_properties):
51     query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn').select(object_properties)
52     #.select('slice.slice_hrn')
53         
54     return send(request, execute_query(request, query), object_properties)
55
56 def send(request, response, object_properties):
57     if request.path.split('/')[1] == 'rest' :
58         response_data = response
59     else :
60         response_data = {}
61         response_data['columns'] = object_properties
62         response_data['labels'] = object_properties
63         #response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
64         response_data['data'] = []
65         response_data['total'] = len(response)
66         for r in response :
67             d = []
68             for p in object_properties :
69                 d.append(r[p])
70             print d
71             
72             response_data['data'].append(d)
73             #response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
74          
75     return HttpResponse(json.dumps(response_data), content_type="application/json")
76
77
78
79
80
81 def get(request, object_type, object_name, object_properties):
82         
83     query = Query().get(object_type).select(object_properties).filter_by('user_hrn', '=', '$user_hrn')
84     if (object_name) :
85         query = query.filter_by(object_type + '_hrn', '=', object_name)
86     
87     response = execute_query(request, query)
88     
89     response_data = {}
90     response_data['columns'] = object_properties
91     response_data['labels'] = object_properties
92     #response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
93     response_data['data'] = []
94     response_data['total'] = len(response)
95     for r in response :
96         d = []
97         for p in object_properties :
98             d.append(r[p])
99         print d
100         
101         response_data['data'].append(d)
102         #response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
103          
104     return HttpResponse(json.dumps(response_data), content_type="application/json")
105
106 def post(request, object_type, object_name):
107     pass
108
109 def error():
110     return HttpResponse(json.dumps({'error' : 'error message'}), content_type="application/json")