merged changes
[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         return switch.get('platform', error)(request, object_name, object_properties)
28     else :
29         query = Query.get('local:object').filter_by('table', '==', object_type).select('column.name')
30         results = execute_query(request, query)
31         if results :
32             object_properties = []
33             for r in results[0]['column'] :
34                 object_properties.append(r['name'])
35         else :
36             return error()
37         return switch.get(object_type, error)(request, 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(request, object_name, object_properties):
45     query  = Query().get('local:platform').filter_by('disabled', '==', '0').select(object_properties)
46     return send(request, execute_query(request, query), object_properties)
47
48 def slice(request, object_name, object_properties):
49     query = Query().get('slice').filter_by('user.user_hrn', '==', '$user_hrn').select(object_properties)
50     return send(request, execute_query(request, query), object_properties)
51
52 def user(request, object_name, object_properties):
53     query = Query().get('user').filter_by('user_hrn', '==', '$user_hrn').select(object_properties)
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     elif request.path.split('/')[1] == 'table' :
60         response_data = response
61     elif request.path.split('/')[1] == 'datatable' :
62         response_data = {}
63         response_data['columns'] = object_properties
64         response_data['labels'] = object_properties
65         #response_data['labels'] = [ 'Platform', 'Name', 'Url', 'Description','Gateway Type' ]
66         response_data['data'] = []
67         response_data['total'] = len(response)
68         for r in response :
69             d = []
70             for p in object_properties :
71                 d.append(r[p])
72             print d
73             
74             response_data['data'].append(d)
75             #response_data['data'].append([ r['platform'], r['platform_longname'], r['platform_url'], r['platform_description'], r['gateway_type'] ])
76          
77     return HttpResponse(json.dumps(response_data), content_type="application/json")
78
79 def error(request, object_name, object_properties):
80     return HttpResponse(json.dumps({'error' : 'an error has occurred'}), content_type="application/json")