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()
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 [],
66 def open_project(request
):
67 user
= osmutils
.get_user(request
)
68 project_id
= user
.project_id
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())
79 'owner': user
.username
,
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 '-',
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,
90 return render(request
, 'osm/osm_project_details.html',
91 {'project_overview': project_overview
, 'project_id': project_id
})
93 except Exception as e
:
94 return render(request
, 'error.html', {'error_msg': 'Error open project! Please retry.'})
98 def delete_project(request
, project_id
):
99 user
= osmutils
.get_user(request
)
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)
107 return __response_handler(request
, {}, url
=None, status
=200)
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')
118 def edit_project(request
, project_id
):
119 if request
.method
== 'POST':
120 user
= osmutils
.get_user(request
)
122 project_dict
= request
.POST
.dict()
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)
130 return __response_handler(request
, {}, url
=None, status
=200)
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
)
141 return redirect(url
, *args
, **kwargs
)
143 return render(request
, url
, data_res
)