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