blob: 575d2534d27b51d7f2178bdf1624338ed2d1e345 [file] [log] [blame]
lombardoffb37bca2018-05-03 16:20:04 +02001#
2# Copyright 2017 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17import json
lombardofrf5776442018-06-26 10:37:40 +020018import logging
lombardoffb37bca2018-05-03 16:20:04 +020019
lombardofrf5776442018-06-26 10:37:40 +020020import yaml
lombardoffb37bca2018-05-03 16:20:04 +020021from django.contrib.auth.decorators import login_required
22from django.http import HttpResponse, JsonResponse
lombardoffb37bca2018-05-03 16:20:04 +020023from django.shortcuts import render, redirect
lombardofr99f922f2018-07-17 17:27:36 +020024
25from authosm.exceptions import OSMAuthException
lombardoffb37bca2018-05-03 16:20:04 +020026from lib.util import Util
lombardofr07930222018-06-19 16:59:45 +020027from lib.osm.osmclient.clientv2 import Client
lombardofr99f922f2018-07-17 17:27:36 +020028import authosm.utils as osmutils
lombardoffb37bca2018-05-03 16:20:04 +020029
30
lombardofrf5776442018-06-26 10:37:40 +020031logging.basicConfig(level=logging.DEBUG)
32log = logging.getLogger('projecthandler/view.py')
lombardoffb37bca2018-05-03 16:20:04 +020033
lombardoffb37bca2018-05-03 16:20:04 +020034
35@login_required
36def home(request):
37 return render(request, 'home.html', {})
38
39
40@login_required
41def create_new_project(request):
lombardofr480be482018-06-26 23:44:40 +020042 if request.method == 'POST':
lombardofr99f922f2018-07-17 17:27:36 +020043 user = osmutils.get_user(request)
lombardofr480be482018-06-26 23:44:40 +020044 client = Client()
45 new_project_dict = request.POST.dict()
46 keys = ["name"]
47 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_project_dict.items()))
lombardofr99f922f2018-07-17 17:27:36 +020048 result = client.project_create(user.get_token(), project_data)
lombardofr480be482018-06-26 23:44:40 +020049 if isinstance(result, dict) and 'error' in result and result['error']:
50 print result
51 return __response_handler(request, result['data'], url=None,
52 status=result['data']['status'] if 'status' in result['data'] else 500)
53 else:
54 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +020055
56
57@login_required
58def user_projects(request):
lombardofr99f922f2018-07-17 17:27:36 +020059 user = osmutils.get_user(request)
lombardofr480be482018-06-26 23:44:40 +020060 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +020061 result = client.project_list(user.get_token())
lombardofr10b52d12018-07-17 23:42:28 +020062 return __response_handler(request,{
lombardofr480be482018-06-26 23:44:40 +020063 'projects': result['data'] if result and result['error'] is False else [],
lombardofr10b52d12018-07-17 23:42:28 +020064 },'projectlist.html')
65
lombardoffb37bca2018-05-03 16:20:04 +020066
67
lombardofr99f922f2018-07-17 17:27:36 +020068def open_composer(request):
69 user = osmutils.get_user(request)
70 project_id = user.project_id
71 result = {'project_id': project_id,
72 'vertices': [
73 {"info": {"type": "vnf", "property": {"custom_label": ""},
74 "group": []}, "id": "vm"},
75 {"info": {"type": "vnf", "property": {"custom_label": ""},
76 "group": []}, "id": "vlan"},
77 {"info": {"type": "vnf", "property": {"custom_label": ""},
78 "group": []}, "id": "firewall"},
79 {"info": {"type": "vnf", "property": {"custom_label": ""},
80 "group": []}, "id": "ping"},
81
82 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
83 "group": []}, "id": "vl1"},
84 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
85 "group": []}, "id": "vl2"},
86 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
87 "group": []}, "id": "vl3"},
88 ],
89 'edges': [
90 {"source": "vm", "group": [], "target": "vl3", "view": "ns"},
91 {"source": "vlan", "group": [], "target": "vl3", "view": "ns"},
92 {"source": "vlan", "group": [], "target": "vl1", "view": "ns"},
93 {"source": "firewall", "group": [], "target": "vl1", "view": "ns"},
94 {"source": "firewall", "group": [], "target": "vl2", "view": "ns"},
95 {"source": "ping", "group": [], "target": "vl2", "view": "ns"},
96 ],
97 'model': {
98 "layer": {
99
100 "ns": {
101 "nodes": {
102 "vnf": {
103 "addable": {
104 "callback": "addNode"
105 },
106 "removable": {
107 "callback": "removeNode"
108 },
109 "expands": "vnf"
110 },
111 "ns_vl": {
112 "addable": {
113 "callback": "addNode"
114 },
115 "removable": {
116 "callback": "removeNode"
117 }
118 },
119
120 },
121 "allowed_edges": {
122 "ns_vl": {
123 "destination": {
124 "vnf": {
125 "callback": "addLink",
126 "direct_edge": False,
127 "removable": {
128 "callback": "removeLink"
129 }
130 }
131 }
132 },
133 "vnf": {
134 "destination": {
135 "ns_vl": {
136 "callback": "addLink",
137 "direct_edge": False,
138 "removable": {
139 "callback": "removeLink"
140 }
141 },
142
143 }
144 }
145
146 }
147 },
148 "vnf": {
149 "nodes": {
150 "vdu": {
151 "addable": {
152 "callback": "addNode"
153 },
154 "removable": {
155 "callback": "removeNode"
156 }
157 },
158 "cp": {
159 "addable": {
160 "callback": "addNode"
161 },
162 "removable": {
163 "callback": "removeNode"
164 }
165 },
166
167 },
168 "allowed_edges": {
169 "vdu": {
170 "destination": {
171 "cp": {
172 "callback": "addLink",
173 "direct_edge": False,
174 "removable": {
175 "callback": "removeLink"
176 }
177 }
178 }
179 },
180 "cp": {
181 "destination": {
182 "vdu": {
183 "callback": "addLink",
184 "direct_edge": False,
185 "removable": {
186 "callback": "removeLink"
187 }
188 }
189 }
190 }
191 }
192 },
193 "name": "OSM",
194 "version": 1,
195 "nodes": {
196 "vnf": {
197 "label": "vnf"
198 },
199 "ns_vl": {
200 "label": "vl"
201 },
202 "cp": {
203 "label": "cp"
204 },
205 "vdu": {
206 "label": "vdu"
207 }
208 },
209 "description": "osm",
210 "callback": {
211 "addNode": {
212 "file": "osm_controller.js",
213 "class": "OsmController"
214 },
215 "removeNode": {
216 "file": "osm_controller.js",
217 "class": "OsmController"
218 },
219 "addLink": {
220 "file": "osm_controller.js",
221 "class": "OsmController"
222 },
223 "removeLink": {
224 "file": "osm_controller.js",
225 "class": "OsmController"
226 }
227 }
228
229 }
230 }}
231 return __response_handler(request, result, 'project_graph_base.html')
232
233
234def get_available_nodes(request):
235
236 params = request.GET.dict()
237 nodes = {
238 'ns': [{"types": [{"name": "Generic", "id": "vnf"},
239 {"name": "ping", "id": "vnf"},
240 {"name": "pong", "id": "vnf"},
241 {"name": "hackfest1-vm", "id": "vnf"}], "category_name": "Vnf"},
242 {"types": [{"name": "VL", "id": "ns_vl"}], "category_name": "VirtualLink"}],
243 'vnf': [{"types": [{"name": "VDU", "id": "vdu"}], "category_name": "Vdu"},
244 {"types": [{"name": "CP", "id": "cp"}], "category_name": "CP"}]
245 }
246
247 return __response_handler(request, nodes[params['layer']])
248
249
lombardoffb37bca2018-05-03 16:20:04 +0200250@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200251def open_project(request):
252 user = osmutils.get_user(request)
253 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200254 try:
lombardofr99f922f2018-07-17 17:27:36 +0200255
lombardofr099364f2018-06-12 11:21:02 +0200256 client = Client()
lombardofrf5776442018-06-26 10:37:40 +0200257 ##TODO change with adhoc api call
lombardofr99f922f2018-07-17 17:27:36 +0200258 nsd = client.nsd_list(user.get_token())
259 vnfd = client.vnfd_list(user.get_token())
260 ns = client.ns_list(user.get_token())
261 vnf = client.vnf_list(user.get_token())
lombardofr099364f2018-06-12 11:21:02 +0200262 project_overview = {
263 'owner': user.username,
264 'name': project_id,
265 'updated_date': '-',
266 'created_date': '-',
267 'info': '-',
268 'type': 'osm',
lombardofrf5776442018-06-26 10:37:40 +0200269 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
270 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
271 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
272 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
lombardofr099364f2018-06-12 11:21:02 +0200273 }
274 return render(request, 'osm/osm_project_details.html',
lombardoffb37bca2018-05-03 16:20:04 +0200275 {'project_overview': project_overview, 'project_id': project_id})
276
277 except Exception as e:
278 print e
279 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
280
281
282@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200283def delete_project(request):
284 user = osmutils.get_user(request)
285 project_id = user.project_id
lombardofr480be482018-06-26 23:44:40 +0200286 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +0200287 result = client.project_delete(user.get_token(), project_id)
lombardofr480be482018-06-26 23:44:40 +0200288 if isinstance(result, dict) and 'error' in result and result['error']:
289 print result
290 return __response_handler(request, result['data'], url=None,
291 status=result['data']['status'] if 'status' in result['data'] else 500)
292 else:
293 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200294
295
lombardoffb37bca2018-05-03 16:20:04 +0200296@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200297def switch_project(request, project_id):
298 user = osmutils.get_user(request)
299 user.switch_project(project_id)
300 return redirect('projects:open_project')
301
302
303@login_required
304def show_descriptors(request, descriptor_type=None):
305 user = osmutils.get_user(request)
306 project_id = user.project_id
lombardofr099364f2018-06-12 11:21:02 +0200307 client = Client()
lombardofrf5776442018-06-26 10:37:40 +0200308 print request.GET.dict()
lombardofr099364f2018-06-12 11:21:02 +0200309 try:
310 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200311 descriptors = client.nsd_list(user.get_token())
lombardofr099364f2018-06-12 11:21:02 +0200312 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200313 descriptors = client.vnfd_list(user.get_token())
lombardofr099364f2018-06-12 11:21:02 +0200314 except Exception as e:
lombardofrf5776442018-06-26 10:37:40 +0200315 log.exception(e)
lombardofr099364f2018-06-12 11:21:02 +0200316 descriptors = []
317
318 url = 'osm/osm_project_descriptors.html'
lombardof07db64f2018-05-11 13:47:10 +0200319 return __response_handler(request, {
lombardofrf5776442018-06-26 10:37:40 +0200320 'descriptors': descriptors['data'] if descriptors and descriptors['error'] is False else [],
lombardoffb37bca2018-05-03 16:20:04 +0200321 'project_id': project_id,
lombardofr099364f2018-06-12 11:21:02 +0200322 'project_type': 'osm',
lombardoffb37bca2018-05-03 16:20:04 +0200323 'descriptor_type': descriptor_type
lombardof07db64f2018-05-11 13:47:10 +0200324 },url)
lombardoffb37bca2018-05-03 16:20:04 +0200325
326
327@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200328def delete_descriptor(request, descriptor_type=None, descriptor_id=None):
329 user = osmutils.get_user(request)
330 project_id = user.project_id
lombardofr099364f2018-06-12 11:21:02 +0200331 try:
332 client = Client()
333 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200334 result = client.nsd_delete(user.get_token(), descriptor_id)
lombardofr099364f2018-06-12 11:21:02 +0200335 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200336 result = client.vnfd_delete(user.get_token(), descriptor_id)
lombardofr099364f2018-06-12 11:21:02 +0200337 except Exception as e:
lombardofrf5776442018-06-26 10:37:40 +0200338 log.exception(e)
339 result = {'error': True, 'data': str(e)}
lombardoffb37bca2018-05-03 16:20:04 +0200340
lombardofrf5776442018-06-26 10:37:40 +0200341 url = 'osm/osm_project_descriptors.html'
342 descriptors = {}
343 try:
344 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200345 descriptors = client.nsd_list(user.get_token())
lombardofrf5776442018-06-26 10:37:40 +0200346 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200347 descriptors = client.vnfd_list(user.get_token())
lombardofrf5776442018-06-26 10:37:40 +0200348 except Exception as e:
349 log.exception(e)
350
351 return __response_handler(request, {
352 'descriptors': descriptors['data'] if descriptors and descriptors['error'] is False else [],
lombardoffb37bca2018-05-03 16:20:04 +0200353 'project_id': project_id,
lombardofrf5776442018-06-26 10:37:40 +0200354 'project_type': 'osm',
lombardoffb37bca2018-05-03 16:20:04 +0200355 'descriptor_type': descriptor_type,
lombardofrf5776442018-06-26 10:37:40 +0200356 'alert_message': {
357 'success': False if result['error'] is True else True,
358 'message': 'An error occurred while processing your request.' if result and result['error'] is True else "Record deleted successfully"}
359 }, url)
360
lombardoffb37bca2018-05-03 16:20:04 +0200361
362
363@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200364def new_descriptor(request, descriptor_type=None):
365 user = osmutils.get_user(request)
366 project_id = user.project_id
lombardofrf5776442018-06-26 10:37:40 +0200367 page = 'osm/descriptor/descriptor_new.html'
lombardoffb37bca2018-05-03 16:20:04 +0200368 if request.method == 'GET':
369 request_id = request.GET.get('id', '')
lombardofrf5776442018-06-26 10:37:40 +0200370
371 return __response_handler(request, {
lombardoffb37bca2018-05-03 16:20:04 +0200372 'project_id': project_id,
373 'descriptor_type': descriptor_type,
374 'descriptor_id': request_id,
lombardofrf5776442018-06-26 10:37:40 +0200375 }, page)
lombardoffb37bca2018-05-03 16:20:04 +0200376 elif request.method == 'POST':
lombardoffb37bca2018-05-03 16:20:04 +0200377 data_type = request.POST.get('type')
378 print "TYPE", data_type
379 if data_type == "file":
380 file_uploaded = request.FILES['file']
lombardofrf5776442018-06-26 10:37:40 +0200381
382 try:
383 client = Client()
384 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200385 result = client.nsd_onboard(user.get_token(), file_uploaded)
lombardofrf5776442018-06-26 10:37:40 +0200386 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200387 result = client.vnfd_onboard(user.get_token(), file_uploaded)
lombardofrf5776442018-06-26 10:37:40 +0200388 else:
389 log.debug('Create descriptor: Unknown data type')
390 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
391
392 except Exception as e:
393 log.exception(e)
394 result = {'error': True, 'data': str(e)}
lombardoffb37bca2018-05-03 16:20:04 +0200395 else:
lombardofrf5776442018-06-26 10:37:40 +0200396 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
lombardoffb37bca2018-05-03 16:20:04 +0200397
lombardofrf5776442018-06-26 10:37:40 +0200398 if result['error']:
399 print result
400 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
lombardofrf5776442018-06-26 10:37:40 +0200401 else:
402 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200403
404
405@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200406def edit_descriptor(request, descriptor_id=None, descriptor_type=None):
407 user = osmutils.get_user(request)
408 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200409 if request.method == 'POST':
410 print "edit_descriptor"
lombardofrf5776442018-06-26 10:37:40 +0200411 new_data = request.POST.get('text'),
412 data_type = request.POST.get('type')
413 #print new_data
414 try:
415 client = Client()
416 if descriptor_type == 'nsd':
417 if data_type == 'yaml':
418 new_data = yaml.load(request.POST.get('text'))
419 elif data_type == 'json':
420 new_data = json.loads(request.POST.get('text'))
421 print new_data
lombardofr99f922f2018-07-17 17:27:36 +0200422 result = client.nsd_update(user.get_token(), descriptor_id, new_data)
lombardofrf5776442018-06-26 10:37:40 +0200423 elif descriptor_type == 'vnfd':
424 if data_type == 'yaml':
425 new_data = yaml.load(request.POST.get('text'))
426 elif data_type == 'json':
427 new_data = json.loads(request.POST.get('text'))
428 print new_data
lombardofr99f922f2018-07-17 17:27:36 +0200429 result = client.vnfd_update(user.get_token(), descriptor_id, new_data)
lombardofrf5776442018-06-26 10:37:40 +0200430
431 else:
432 log.debug('Update descriptor: Unknown data type')
433 result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
434 except Exception as e:
435 log.exception(e)
436 result = {'error': True, 'data': str(e)}
437 print result
438 if result['error'] == True:
439 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
440
441 else:
442 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200443
444 elif request.method == 'GET':
lombardoffb37bca2018-05-03 16:20:04 +0200445
lombardofrf5776442018-06-26 10:37:40 +0200446 page = 'osm/descriptor/descriptor_view.html'
447 try:
448 client = Client()
449 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200450 result = client.nsd_get(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200451 print result
452 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200453 result = client.vnfd_get(user.get_token(), descriptor_id)
lombardoffb37bca2018-05-03 16:20:04 +0200454
lombardofrf5776442018-06-26 10:37:40 +0200455 print result
456 except Exception as e:
457 log.exception(e)
458 result = {'error': True, 'data': str(e)}
459
460 if isinstance(result, dict) and 'error' in result and result['error']:
461 return render(request, 'error.html')
462
463 descriptor_string_json = json.dumps(result, indent=2)
464 descriptor_string_yaml = Util.json2yaml(result)
lombardoffb37bca2018-05-03 16:20:04 +0200465 # print descriptor
466 return render(request, page, {
467 'project_id': project_id,
468 'descriptor_id': descriptor_id,
lombardoffb37bca2018-05-03 16:20:04 +0200469 'descriptor_type': descriptor_type,
470 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml,
471 'descriptor_string_json': descriptor_string_json}})
472
473
lombardofrf5776442018-06-26 10:37:40 +0200474@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200475def get_package_files_list(request, descriptor_id, descriptor_type):
476 user = osmutils.get_user(request)
lombardoffb37bca2018-05-03 16:20:04 +0200477 try:
lombardofrf5776442018-06-26 10:37:40 +0200478 client = Client()
479 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200480 artifacts_res = client.nsd_artifacts(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200481 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200482 artifacts_res = client.vnf_packages_artifacts(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200483 else:
484 return False
485
486 files_list = yaml.load(artifacts_res['data'] if artifacts_res and artifacts_res['error'] is False else [])
lombardoffb37bca2018-05-03 16:20:04 +0200487 result = {'files': files_list}
488 except Exception as e:
lombardofrf5776442018-06-26 10:37:40 +0200489 log.exception(e)
lombardoffb37bca2018-05-03 16:20:04 +0200490 url = 'error.html'
491 result = {'error_msg': 'Unknown error.'}
492 return __response_handler(request, result)
493
lombardofrf5776442018-06-26 10:37:40 +0200494@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200495def download_pkg(request, descriptor_id, descriptor_type):
496 user = osmutils.get_user(request)
lombardofrf5776442018-06-26 10:37:40 +0200497 file_name = "osm_export.tar.gz"
498 tar_pkg = None
499 try:
500 client = Client()
501 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200502 tar_pkg = client.get_nsd_pkg(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200503 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200504 tar_pkg = client.get_vnfd_pkg(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200505
506 except Exception as e:
507 log.exception(e)
lombardoffb37bca2018-05-03 16:20:04 +0200508
509 response = HttpResponse(content_type="application/tgz")
lombardofrf5776442018-06-26 10:37:40 +0200510 response["Content-Disposition"] = "attachment; filename="+ file_name
lombardoffb37bca2018-05-03 16:20:04 +0200511 response.write(tar_pkg.getvalue())
512 return response
513
514
lombardoffb37bca2018-05-03 16:20:04 +0200515@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200516def custom_action(request, descriptor_id=None, descriptor_type=None, action_name=None):
lombardoffb37bca2018-05-03 16:20:04 +0200517 if request.method == 'GET':
lombardoffb37bca2018-05-03 16:20:04 +0200518 print "Custom action: " + action_name
lombardofr99f922f2018-07-17 17:27:36 +0200519 return globals()[action_name](request, descriptor_id, descriptor_type)
lombardoffb37bca2018-05-03 16:20:04 +0200520
521
522def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
523 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofrf5776442018-06-26 10:37:40 +0200524 if 'application/json' in raw_content_types or url is None:
525 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200526 elif to_redirect:
527 return redirect(url, *args, **kwargs)
528 else:
529 return render(request, url, data_res)