domain_name on user and project creation
[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", "domain_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
66 @login_required
67 def user_domains(request):
68 user = osmutils.get_user(request)
69 client = Client()
70 result = client.get_domains(user.get_token())
71 if result and result['error'] is False:
72 domains = []
73 if result['data'] and result['data']['user_domain_name']:
74 domain_names = result['data']['user_domain_name'].split(',')
75 domains.extend(x for x in domain_names if x not in domains)
76 if result['data'] and result['data']['project_domain_name']:
77 domain_names = result['data']['project_domain_name'].split(',')
78 domains.extend(x for x in domain_names if x not in domains)
79
80 return __response_handler(request, {'domains': domains})
81 return __response_handler(request, {'domains': []})
82
83
84 @login_required
85 def open_project(request):
86 user = osmutils.get_user(request)
87 project_id = user.project_id
88 try:
89
90 client = Client()
91 ##TODO change with adhoc api call
92 prj = client.project_get(user.get_token(), project_id)
93 nsd = client.nsd_list(user.get_token())
94 vnfd = client.vnfd_list(user.get_token())
95 ns = client.ns_list(user.get_token())
96 vnf = client.vnf_list(user.get_token())
97 proj_data_admin = prj['data']['_admin'] if prj and prj['error'] is False and prj['data'] and prj['data']['_admin'] else None
98 project_overview = {
99 'owner': user.username,
100 'name': user.project_name,
101 'updated_date': proj_data_admin['modified'] if proj_data_admin else '-',
102 'created_date': proj_data_admin['created'] if proj_data_admin else '-',
103
104 'type': 'osm',
105 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
106 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
107 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
108 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
109 }
110 return render(request, 'osm/osm_project_details.html',
111 {'project_overview': project_overview, 'project_id': project_id})
112
113 except Exception as e:
114 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
115
116
117 @login_required
118 def delete_project(request, project_id):
119 user = osmutils.get_user(request)
120
121 client = Client()
122 result = client.project_delete(user.get_token(), project_id)
123 if isinstance(result, dict) and 'error' in result and result['error']:
124 return __response_handler(request, result['data'], url=None,
125 status=result['data']['status'] if 'status' in result['data'] else 500)
126 else:
127 return __response_handler(request, {}, url=None, status=200)
128
129
130 @login_required
131 def switch_project(request, project_id):
132 user = osmutils.get_user(request)
133 user.switch_project(project_id)
134 return redirect('projects:open_project')
135
136
137 @login_required
138 def edit_project(request, project_id):
139 if request.method == 'POST':
140 user = osmutils.get_user(request)
141 client = Client()
142 project_dict = request.POST.dict()
143 keys = ["name"]
144 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
145 result = client.project_edit(user.get_token(), project_id, project_data)
146 if isinstance(result, dict) and 'error' in result and result['error']:
147 return __response_handler(request, result['data'], url=None,
148 status=result['data']['status'] if 'status' in result['data'] else 500)
149 else:
150 return __response_handler(request, {}, url=None, status=200)
151
152
153 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
154 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
155 if 'application/json' in raw_content_types or url is None:
156 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
157 elif to_redirect:
158 return redirect(url, *args, **kwargs)
159 else:
160 return render(request, url, data_res)