new django app descriptionhandler
[osm/LW-UI.git] / projecthandler / views.py
1 #
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
17 import json
18 import logging
19
20 import yaml
21 from sf_t3d.decorators import login_required
22 from django.http import HttpResponse, JsonResponse
23 from django.shortcuts import render, redirect
24
25 from authosm.exceptions import OSMAuthException
26 from lib.util import Util
27 from lib.osm.osmclient.clientv2 import Client
28 import authosm.utils as osmutils
29
30
31 logging.basicConfig(level=logging.DEBUG)
32 log = logging.getLogger('projecthandler/view.py')
33
34
35 @login_required
36 def home(request):
37 return render(request, 'home.html', {})
38
39
40 @login_required
41 def create_new_project(request):
42 if request.method == 'POST':
43 user = osmutils.get_user(request)
44 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()))
48 result = client.project_create(user.get_token(), project_data)
49 if isinstance(result, dict) and 'error' in result and result['error']:
50 return __response_handler(request, result['data'], url=None,
51 status=result['data']['status'] if 'status' in result['data'] else 500)
52 else:
53 return __response_handler(request, {}, url=None, status=200)
54
55
56 @login_required
57 def user_projects(request):
58 user = osmutils.get_user(request)
59 client = Client()
60 result = client.project_list(user.get_token())
61 return __response_handler(request,{
62 'projects': result['data'] if result and result['error'] is False else [],
63 },'projectlist.html')
64
65 @login_required
66 def open_project(request):
67 user = osmutils.get_user(request)
68 project_id = user.project_id
69 try:
70
71 client = Client()
72 ##TODO change with adhoc api call
73 prj = client.project_get(user.get_token(), project_id)
74 nsd = client.nsd_list(user.get_token())
75 vnfd = client.vnfd_list(user.get_token())
76 ns = client.ns_list(user.get_token())
77 vnf = client.vnf_list(user.get_token())
78 project_overview = {
79 'owner': user.username,
80 'name': project_id,
81 'updated_date': prj['data']['_admin']['modified'] if prj and prj['error'] is False else '-',
82 'created_date': prj['data']['_admin']['created'] if prj and prj['error'] is False else '-',
83
84 'type': 'osm',
85 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
86 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
87 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
88 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
89 }
90 return render(request, 'osm/osm_project_details.html',
91 {'project_overview': project_overview, 'project_id': project_id})
92
93 except Exception as e:
94 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
95
96
97 @login_required
98 def delete_project(request, project_id):
99 user = osmutils.get_user(request)
100
101 client = Client()
102 result = client.project_delete(user.get_token(), project_id)
103 if isinstance(result, dict) and 'error' in result and result['error']:
104 return __response_handler(request, result['data'], url=None,
105 status=result['data']['status'] if 'status' in result['data'] else 500)
106 else:
107 return __response_handler(request, {}, url=None, status=200)
108
109
110 @login_required
111 def switch_project(request, project_id):
112 user = osmutils.get_user(request)
113 user.switch_project(project_id)
114 return redirect('projects:open_project')
115
116
117 @login_required
118 def edit_project(request, project_id):
119 if request.method == 'POST':
120 user = osmutils.get_user(request)
121 client = Client()
122 project_dict = request.POST.dict()
123 keys = ["name"]
124 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
125 result = client.project_edit(user.get_token(), project_id, project_data)
126 if isinstance(result, dict) and 'error' in result and result['error']:
127 return __response_handler(request, result['data'], url=None,
128 status=result['data']['status'] if 'status' in result['data'] else 500)
129 else:
130 return __response_handler(request, {}, url=None, status=200)
131
132
133
134
135
136 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
137 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
138 if 'application/json' in raw_content_types or url is None:
139 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
140 elif to_redirect:
141 return redirect(url, *args, **kwargs)
142 else:
143 return render(request, url, data_res)