2 # Copyright 2017 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
21 from sf_t3d
.decorators
import login_required
22 from django
.http
import HttpResponse
, JsonResponse
23 from django
.shortcuts
import render
, redirect
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
31 logging
.basicConfig(level
=logging
.DEBUG
)
32 log
= logging
.getLogger('projecthandler/view.py')
37 return render(request
, 'home.html', {})
41 def create_new_project(request
):
42 if request
.method
== 'POST':
43 user
= osmutils
.get_user(request
)
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)
53 return __response_handler(request
, {}, url
=None, status
=200)
57 def user_projects(request
):
58 user
= osmutils
.get_user(request
)
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 [],
67 def user_domains(request
):
68 user
= osmutils
.get_user(request
)
70 result
= client
.get_domains(user
.get_token())
71 if result
and result
['error'] is False:
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
)
80 return __response_handler(request
, {'domains': domains
})
81 return __response_handler(request
, {'domains': []})
85 def open_project(request
):
86 user
= osmutils
.get_user(request
)
87 project_id
= user
.project_id
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
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 '-',
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,
110 return render(request
, 'osm/osm_project_details.html',
111 {'project_overview': project_overview
, 'project_id': project_id
})
113 except Exception as e
:
114 return render(request
, 'error.html', {'error_msg': 'Error open project! Please retry.'})
118 def delete_project(request
, project_id
):
119 user
= osmutils
.get_user(request
)
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)
127 return __response_handler(request
, {}, url
=None, status
=200)
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')
138 def edit_project(request
, project_id
):
139 if request
.method
== 'POST':
140 user
= osmutils
.get_user(request
)
142 project_dict
= request
.POST
.dict()
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)
150 return __response_handler(request
, {}, url
=None, status
=200)
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
)
158 return redirect(url
, *args
, **kwargs
)
160 return render(request
, url
, data_res
)