X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=projecthandler%2Fviews.py;h=6a9a98a342c2f23549d38419161342cf276a8e24;hb=3218b2b802b040b6110780eb95cf84a9f3101505;hp=16fb457f8c3549a4ea56264f39a01263b65c0b42;hpb=099364f3465712ac0232f9535ee15b3b5f902fa9;p=osm%2FLW-UI.git diff --git a/projecthandler/views.py b/projecthandler/views.py index 16fb457..6a9a98a 100644 --- a/projecthandler/views.py +++ b/projecthandler/views.py @@ -15,16 +15,21 @@ # import json +import logging -from django.contrib.auth.decorators import login_required +import yaml +from sf_t3d.decorators import login_required from django.http import HttpResponse, JsonResponse -from django.middleware.csrf import get_token from django.shortcuts import render, redirect + +from authosm.exceptions import OSMAuthException from lib.util import Util -from projecthandler.osm_model import OsmProject -from lib.osm.osmclient.client import Client +from lib.osm.osmclient.clientv2 import Client +import authosm.utils as osmutils +logging.basicConfig(level=logging.DEBUG) +log = logging.getLogger('projecthandler/view.py') @login_required @@ -34,269 +39,104 @@ def home(request): @login_required def create_new_project(request): - return render(request, 'home.html', {}) + if request.method == 'POST': + user = osmutils.get_user(request) + client = Client() + new_project_dict = request.POST.dict() + keys = ["name"] + project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_project_dict.items())) + result = client.project_create(user.get_token(), project_data) + if isinstance(result, dict) and 'error' in result and result['error']: + return __response_handler(request, result['data'], url=None, + status=result['data']['status'] if 'status' in result['data'] else 500) + else: + return __response_handler(request, {}, url=None, status=200) @login_required def user_projects(request): - csrf_token_value = get_token(request) - user = request.user - projects = user.get_projects() - - return render(request, 'projectlist.html', { - 'projects': list(projects), - 'csrf_token': csrf_token_value - }) - + user = osmutils.get_user(request) + client = Client() + result = client.project_list(user.get_token()) + return __response_handler(request,{ + 'projects': result['data'] if result and result['error'] is False else [], + },'projectlist.html') @login_required -def open_project(request, project_id=None): +def open_project(request): + user = osmutils.get_user(request) + project_id = user.project_id try: - user = request.user + client = Client() - nsd = client.nsd_list() - vnfd = client.vnfd_list() - ns = client.ns_list() - vnf = client.vnf_list() + ##TODO change with adhoc api call + prj = client.project_get(user.get_token(), project_id) + nsd = client.nsd_list(user.get_token()) + vnfd = client.vnfd_list(user.get_token()) + ns = client.ns_list(user.get_token()) + vnf = client.vnf_list(user.get_token()) project_overview = { 'owner': user.username, 'name': project_id, - 'updated_date': '-', - 'created_date': '-', - 'info': '-', + 'updated_date': prj['data']['_admin']['modified'] if prj and prj['error'] is False else '-', + 'created_date': prj['data']['_admin']['created'] if prj and prj['error'] is False else '-', + 'type': 'osm', - 'nsd': len(nsd) if nsd else 0, - 'vnfd': len(vnfd) if vnfd else 0, - 'ns': len(ns) if ns else 0, - 'vnf': len(vnf) if vnf else 0, + 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0, + 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0, + 'ns': len(ns['data']) if ns and ns['error'] is False else 0, + 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0, } return render(request, 'osm/osm_project_details.html', {'project_overview': project_overview, 'project_id': project_id}) except Exception as e: - print e return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'}) @login_required -def delete_project(request, project_id=None): - if request.method == 'POST': - - try: - ##TODO delete project - return redirect('projects:projects_list') - except Exception as e: - print e - return render(request, 'error.html', {'error_msg': 'Error deleting Project.'}) - - elif request.method == 'GET': - try: - return render(request, 'osm/osm_project_delete.html', - {'project_id': project_id, 'project_name': project_id}) - - except Exception as e: - print e - return render(request, 'error.html', {'error_msg': 'Project not found.'}) - - -@login_required -def show_descriptors(request, project_id=None, descriptor_type=None): - csrf_token_value = get_token(request) +def delete_project(request, project_id): + user = osmutils.get_user(request) client = Client() - try: - if descriptor_type == 'nsd': - descriptors = client.nsd_list() - - elif descriptor_type == 'vnfd': - descriptors = client.vnfd_list() - except Exception as e: - descriptors = [] - - url = 'osm/osm_project_descriptors.html' - return __response_handler(request, { - 'descriptors': descriptors, - 'project_id': project_id, - 'project_type': 'osm', - "csrf_token_value": csrf_token_value, - 'descriptor_type': descriptor_type - },url) - - -@login_required -def delete_descriptor(request, project_id=None, descriptor_type=None, descriptor_id=None): - csrf_token_value = get_token(request) - - try: - client = Client() - if descriptor_type == 'nsd': - result = client.nsd_delete(descriptor_id) - elif descriptor_type == 'vnfd': - result = client.vnfd_delete(descriptor_id) - - else: - return False - - except Exception as e: - result = False - project_overview = OsmProject.get_overview_data() - prj_token = project_overview['type'] - page = prj_token + '/' + prj_token + '_project_descriptors.html' - - return render(request, page, { - 'descriptors': OsmProject.get_descriptors(descriptor_type), - 'project_id': project_id, - 'project_overview_data': project_overview, - "csrf_token_value": csrf_token_value, - 'descriptor_type': descriptor_type, - #'alert_message': { - # 'success': result, - # 'message': "Delete succeeded!" if result else 'Error in delete'} - }) + result = client.project_delete(user.get_token(), project_id) + if isinstance(result, dict) and 'error' in result and result['error']: + return __response_handler(request, result['data'], url=None, + status=result['data']['status'] if 'status' in result['data'] else 500) + else: + return __response_handler(request, {}, url=None, status=200) @login_required -def new_descriptor(request, project_id=None, descriptor_type=None): - - project_overview = OsmProject.get_overview_data() - prj_token = project_overview['type'] - page = prj_token + '/descriptor/descriptor_new.html' - if request.method == 'GET': - request_id = request.GET.get('id', '') - return render(request, page, { - 'project_id': project_id, - 'descriptor_type': descriptor_type, - 'descriptor_id': request_id, - 'project_overview_data': project_overview - }) - elif request.method == 'POST': - csrf_token_value = get_token(request) - data_type = request.POST.get('type') - print "TYPE", data_type - if data_type == "file": - file_uploaded = request.FILES['file'] - text = file_uploaded.read() - data_type = file_uploaded.name.split(".")[-1] - desc_name = file_uploaded.name.split(".")[0] - result = OsmProject.create_descriptor(desc_name, descriptor_type, text, data_type, file_uploaded) - else: - text = request.POST.get('text') - desc_name = request.POST.get('id') - result = OsmProject.create_descriptor(desc_name, descriptor_type, text, data_type) - - - response_data = { - 'project_id': project_id, - 'descriptor_type': descriptor_type, - 'project_overview_data':OsmProject.get_overview_data(), - 'descriptor_id': result, - 'alert_message': { - 'success': True if result != False else False, - 'message': "Descriptor created" if result else 'Error in creation'} - } - status_code = 200 if result != False else 500 - response = HttpResponse(json.dumps(response_data), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response +def switch_project(request, project_id): + user = osmutils.get_user(request) + user.switch_project(project_id) + return redirect('projects:open_project') @login_required -def edit_descriptor(request, project_id=None, descriptor_id=None, descriptor_type=None): +def edit_project(request, project_id): if request.method == 'POST': - print "edit_descriptor" - result = OsmProject.edit_descriptor(descriptor_type, descriptor_id, request.POST.get('text'), - request.POST.get('type')) - response_data = { - 'project_id': project_id, - 'descriptor_type': descriptor_type, - #'project_overview_data': projects[0].get_overview_data(), - 'alert_message': { - 'success': True if result else False, - 'message': "Descriptor modified." if result else 'Error during descriptor editing.'} - } - status_code = 200 if result else 500 - response = HttpResponse(json.dumps(response_data), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - - elif request.method == 'GET': - csrf_token_value = get_token(request) - project_overview = OsmProject.get_overview_data() - print project_overview - prj_token = project_overview['type'] - page = prj_token + '/descriptor/descriptor_view.html' - - descriptor = OsmProject.get_descriptor(descriptor_id, descriptor_type) - - descriptor_string_json = json.dumps(descriptor) - descriptor_string_yaml = Util.json2yaml(descriptor) - # print descriptor - return render(request, page, { - 'project_id': project_id, - 'descriptor_id': descriptor_id, - 'project_overview_data': OsmProject.get_overview_data(), - 'descriptor_type': descriptor_type, - 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml, - 'descriptor_string_json': descriptor_string_json}}) - - -# OSM specific method # -def get_package_files_list(request, project_id, project, descriptor_id, descriptor_type): - files_list = [] - try: - files_list = project.get_package_files_list(descriptor_type, descriptor_id) - result = {'files': files_list} - except Exception as e: - print e - url = 'error.html' - result = {'error_msg': 'Unknown error.'} - return __response_handler(request, result) - - -def download_pkg(request, project_id, descriptor_id, descriptor_type): - tar_pkg = OsmProject.download_pkg(descriptor_id, descriptor_type) - - response = HttpResponse(content_type="application/tgz") - response["Content-Disposition"] = "attachment; filename=osm_export.tar.gz" - response.write(tar_pkg.getvalue()) - return response - - -def create_ns(request, project_id, project, descriptor_id, descriptor_type): - files_list = [] - try: - ns_data={ - "nsName": request.POST.get('nsName', 'WithoutName'), - "nsDescription": request.POST.get('nsDescription', ''), - "nsdId": request.POST.get('nsdId', ''), - "vimAccountId": request.POST.get('vimAccountId', ''), - "ssh-authorized-key": [ - { - request.POST.get('key-pair-ref', ''): request.POST.get('keyValue', '') - } - ] - } - #result = project.create_ns(descriptor_type, descriptor_id, ns_data) + user = osmutils.get_user(request) + client = Client() + project_dict = request.POST.dict() + keys = ["name"] + project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items())) + result = client.project_edit(user.get_token(), project_id, project_data) + if isinstance(result, dict) and 'error' in result and result['error']: + return __response_handler(request, result['data'], url=None, + status=result['data']['status'] if 'status' in result['data'] else 500) + else: + return __response_handler(request, {}, url=None, status=200) - except Exception as e: - print e - url = 'error.html' - result = {'error_msg': 'Unknown error.'} - return __response_handler(request, result) -# end OSM specific method # -@login_required -def custom_action(request, project_id=None, descriptor_id=None, descriptor_type=None, action_name=None): - if request.method == 'GET': - print "Custom action: " + action_name - return globals()[action_name](request, project_id, descriptor_id, descriptor_type) def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs): raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',') - if 'application/json' in raw_content_types: - return JsonResponse(data_res) + if 'application/json' in raw_content_types or url is None: + return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs) elif to_redirect: return redirect(url, *args, **kwargs) else: