fix 885; fix 886
[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 proj_data_admin = prj['data']['_admin'] if prj and prj['error'] is False and prj['data'] and prj['data']['_admin'] else None
79 project_overview = {
80 'owner': user.username,
81 'name': user.project_name,
82 'updated_date': proj_data_admin['modified'] if proj_data_admin else '-',
83 'created_date': proj_data_admin['created'] if proj_data_admin else '-',
84
85 'type': 'osm',
86 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
87 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
88 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
89 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
90 }
91 return render(request, 'osm/osm_project_details.html',
92 {'project_overview': project_overview, 'project_id': project_id})
93
94 except Exception as e:
95 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
96
97
98 @login_required
99 def delete_project(request, project_id):
100 user = osmutils.get_user(request)
101
102 client = Client()
103 result = client.project_delete(user.get_token(), project_id)
104 if isinstance(result, dict) and 'error' in result and result['error']:
105 return __response_handler(request, result['data'], url=None,
106 status=result['data']['status'] if 'status' in result['data'] else 500)
107 else:
108 return __response_handler(request, {}, url=None, status=200)
109
110
111 @login_required
112 def switch_project(request, project_id):
113 user = osmutils.get_user(request)
114 user.switch_project(project_id)
115 return redirect('projects:open_project')
116
117
118 @login_required
119 def edit_project(request, project_id):
120 if request.method == 'POST':
121 user = osmutils.get_user(request)
122 client = Client()
123 project_dict = request.POST.dict()
124 keys = ["name"]
125 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
126 result = client.project_edit(user.get_token(), project_id, project_data)
127 if isinstance(result, dict) and 'error' in result and result['error']:
128 return __response_handler(request, result['data'], url=None,
129 status=result['data']['status'] if 'status' in result['data'] else 500)
130 else:
131 return __response_handler(request, {}, url=None, status=200)
132
133
134 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
135 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
136 if 'application/json' in raw_content_types or url is None:
137 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
138 elif to_redirect:
139 return redirect(url, *args, **kwargs)
140 else:
141 return render(request, url, data_res)