X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=projecthandler%2Fviews.py;h=de21e9a22a8e68d3e9a0fcf280fdecf8f15e9e0c;hb=refs%2Fchanges%2F60%2F6360%2F1;hp=8c553a4d56eb90072c2e762600915007b8ccb18e;hpb=fb37bca4b7e8178c65df2f1496afe372c1d55e78;p=osm%2FLW-UI.git diff --git a/projecthandler/views.py b/projecthandler/views.py index 8c553a4..de21e9a 100644 --- a/projecthandler/views.py +++ b/projecthandler/views.py @@ -20,22 +20,13 @@ from django.contrib.auth.decorators import login_required from django.http import HttpResponse, JsonResponse from django.middleware.csrf import get_token from django.shortcuts import render, redirect -from django.template.loader import render_to_string from lib.util import Util -from sf_user.models import CustomUser -import tarfile - - from projecthandler.osm_model import OsmProject -from projecthandler.models import Project - +from lib.osm.osmclient.clientv2 import Client -Project.add_project_type('osm', OsmProject) -from projecthandler.models import Repository - @login_required def home(request): return render(request, 'home.html', {}) @@ -43,81 +34,14 @@ def home(request): @login_required def create_new_project(request): - if request.method == 'POST': - error_msgs = [] - user = CustomUser.objects.get(id=request.user.id) - name = request.POST.get('name', 'WithoutName') - info = request.POST.get('info', ' ') - type = request.POST.get('type', '') - start_from = request.POST.get('startfrom', 'scratch') - - project_types = Project.get_project_types() - if type in project_types: - project_class = project_types[type] - - else: - # FIXME this error is not handled - error_msgs.append('Project type undefined.') - return render(request, 'error.html', - {'error_msg': 'Error creating new project, project type undefined. Please retry.'}) - - try: - - if start_from == 'scratch': - print 'from scratch' - data_project = {} - - elif start_from == 'files': - print 'from files' - data_project = project_class.data_project_from_files(request) - - elif start_from == 'example': - print 'from example' - data_project = project_class.data_project_from_example(request) - - project = project_class.create_project(name, user, False, info, data_project) - # print project.get_dataproject() - - - except Exception as e: - print 'Error creating ' + type + ' project! Please retry.' - print e - return render(request, 'error.html', {'error_msg': 'Error creating ' + type + ' project! Please retry.'}) - return redirect('projects:open_project', project_id=project.id) - - elif request.method == 'GET': - csrf_token_value = get_token(request) - result = {} - data_type_selector = [{ - 'id': '-1', - 'text': 'Select an option' - }] - type_example_files = {} - type_container_template = '' - project_types = Project.get_project_types() - print "project_types", project_types.keys() - for type in project_types: - project_class = project_types[type] - type_example_files.update(project_class.get_example_list()) - data_type_selector.append({ - 'id': type, - 'text': type, - 'value': type - }) - type_container_template += render_to_string(type + '/' + type + '_new_project.html') - - result.update({'type_example_files': json.dumps(type_example_files)}) - result.update({'data_type_selector': json.dumps(data_type_selector)}) - result.update({'type_container_template': type_container_template}) - result.update({'csrf_token': csrf_token_value}) - return render(request, 'new_project.html', result) + return render(request, 'home.html', {}) @login_required def user_projects(request): csrf_token_value = get_token(request) - user = CustomUser.objects.get(id=request.user.id) - projects = Project.objects.filter(owner=user).select_subclasses() + user = request.user + projects = user.get_projects() return render(request, 'projectlist.html', { 'projects': list(projects), @@ -128,11 +52,25 @@ def user_projects(request): @login_required def open_project(request, project_id=None): try: - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() - prj_token = project_overview['type'] - print request.COOKIES.keys() - return render(request, prj_token + '/' + prj_token + '_project_details.html', + user = request.user + client = Client() + nsd = client.nsd_list() + vnfd = client.vnfd_list() + ns = client.ns_list() + vnf = client.vnf_list() + project_overview = { + 'owner': user.username, + 'name': project_id, + 'updated_date': '-', + 'created_date': '-', + 'info': '-', + '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, + } + return render(request, 'osm/osm_project_details.html', {'project_overview': project_overview, 'project_id': project_id}) except Exception as e: @@ -145,7 +83,7 @@ def delete_project(request, project_id=None): if request.method == 'POST': try: - Project.objects.filter(id=project_id).delete() + ##TODO delete project return redirect('projects:projects_list') except Exception as e: print e @@ -153,80 +91,60 @@ def delete_project(request, project_id=None): elif request.method == 'GET': try: - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() - prj_token = project_overview['type'] - # example: 'etsi/etsi_project_delete.html' - print prj_token + '/' + prj_token + '_project_delete.html', project_overview['name'] - return render(request, prj_token + '/' + prj_token + '_project_delete.html', - {'project_id': project_id, 'project_name': project_overview['name']}) + 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) - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() - prj_token = project_overview['type'] - page = prj_token + '/' + prj_token + '_project_descriptors.html' + client = Client() + try: + if descriptor_type == 'nsd': + descriptors = client.nsd_list() - return render(request, page, { - 'descriptors': projects[0].get_descriptors(descriptor_type), + 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': prj_token, - 'project_overview_data': project_overview, + 'project_type': 'osm', "csrf_token_value": csrf_token_value, 'descriptor_type': descriptor_type - }) - - -@login_required -def graph(request, project_id=None): - if request.method == 'GET': - csrf_token_value = get_token(request) - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() - prj_token = project_overview['type'] - # example : 'etsi/project_graph.html' - return render(request, prj_token + '/project_graph.html', { - 'project_id': project_id, - 'project_overview_data': projects[0].get_overview_data(), - 'collapsed_sidebar': False - }) + },url) @login_required -def graph_data(request, project_id=None, descriptor_id=None): - print 'graph_data', project_id, descriptor_id - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() - # data = projects[0].get_overview_data() - prj_token = project_overview['type'] - - topology = projects[0].get_graph_data_json_topology(descriptor_id) - response = HttpResponse(topology, content_type="application/json") - response["Access-Control-Allow-Origin"] = "*" +def delete_descriptor(request, project_id=None, descriptor_type=None, descriptor_id=None): + csrf_token_value = get_token(request) - return response + 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 -@login_required -def delete_descriptor(request, project_id=None, descriptor_type=None, descriptor_id=None): - csrf_token_value = get_token(request) - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].delete_descriptor(descriptor_type, descriptor_id) - project_overview = projects[0].get_overview_data() + 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': projects[0].get_descriptors(descriptor_type), + 'descriptors': OsmProject.get_descriptors(descriptor_type), 'project_id': project_id, 'project_overview_data': project_overview, "csrf_token_value": csrf_token_value, @@ -237,50 +155,19 @@ def delete_descriptor(request, project_id=None, descriptor_type=None, descriptor }) -@login_required -def clone_descriptor(request, project_id=None, descriptor_type=None, descriptor_id=None): - csrf_token_value = get_token(request) - projects = Project.objects.filter(id=project_id).select_subclasses() - new_id = request.GET.get('newid', '') - result = projects[0].clone_descriptor(descriptor_type, descriptor_id, new_id) - project_overview = projects[0].get_overview_data() - prj_token = project_overview['type'] - page = prj_token + '/' + prj_token + '_project_descriptors.html' - - return render(request, page, { - 'descriptors': projects[0].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': "Cloned!" if result else 'Error in cloning'} - }) - - @login_required def new_descriptor(request, project_id=None, descriptor_type=None): - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() + + 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', '') - - json_template = projects[0].get_new_descriptor(descriptor_type, request_id) - print 'new descriptor GET', json_template - - descriptor_string_yaml = Util.json2yaml(json_template) - descriptor_string_json = json.dumps(json_template) - return render(request, page, { 'project_id': project_id, 'descriptor_type': descriptor_type, 'descriptor_id': request_id, - 'project_overview_data': project_overview, - 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml, - 'descriptor_string_json': descriptor_string_json} + 'project_overview_data': project_overview }) elif request.method == 'POST': csrf_token_value = get_token(request) @@ -291,17 +178,17 @@ def new_descriptor(request, project_id=None, descriptor_type=None): text = file_uploaded.read() data_type = file_uploaded.name.split(".")[-1] desc_name = file_uploaded.name.split(".")[0] - result = projects[0].create_descriptor(desc_name, descriptor_type, text, data_type, file_uploaded) + 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 = projects[0].create_descriptor(desc_name, descriptor_type, text, data_type) + result = OsmProject.create_descriptor(desc_name, descriptor_type, text, data_type) response_data = { 'project_id': project_id, 'descriptor_type': descriptor_type, - 'project_overview_data': projects[0].get_overview_data(), + 'project_overview_data':OsmProject.get_overview_data(), 'descriptor_id': result, 'alert_message': { 'success': True if result != False else False, @@ -317,8 +204,7 @@ def new_descriptor(request, project_id=None, descriptor_type=None): def edit_descriptor(request, project_id=None, descriptor_id=None, descriptor_type=None): if request.method == 'POST': print "edit_descriptor" - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].edit_descriptor(descriptor_type, descriptor_id, request.POST.get('text'), + result = OsmProject.edit_descriptor(descriptor_type, descriptor_id, request.POST.get('text'), request.POST.get('type')) response_data = { 'project_id': project_id, @@ -335,13 +221,12 @@ def edit_descriptor(request, project_id=None, descriptor_id=None, descriptor_typ elif request.method == 'GET': csrf_token_value = get_token(request) - projects = Project.objects.filter(id=project_id).select_subclasses() - project_overview = projects[0].get_overview_data() + project_overview = OsmProject.get_overview_data() print project_overview prj_token = project_overview['type'] page = prj_token + '/descriptor/descriptor_view.html' - descriptor = projects[0].get_descriptor(descriptor_id, descriptor_type) + descriptor = OsmProject.get_descriptor(descriptor_id, descriptor_type) descriptor_string_json = json.dumps(descriptor) descriptor_string_yaml = Util.json2yaml(descriptor) @@ -349,130 +234,12 @@ def edit_descriptor(request, project_id=None, descriptor_id=None, descriptor_typ return render(request, page, { 'project_id': project_id, 'descriptor_id': descriptor_id, - 'project_overview_data': projects[0].get_overview_data(), + '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}}) -@login_required -def graph_positions(request, project_id=None): - if request.method == 'POST': - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].edit_graph_positions(json.loads(request.POST.get('positions'))) - status_code = 200 if result else 500 - response = HttpResponse(json.dumps({}), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - - -@login_required -def add_element(request, project_id=None): - if request.method == 'POST': - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].get_add_element(request) - - status_code = 200 if result else 500 - response = HttpResponse(json.dumps({}), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - - -@login_required -def remove_element(request, project_id=None): - if request.method == 'POST': - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].get_remove_element(request) - - status_code = 200 if result else 500 - response = HttpResponse(json.dumps({}), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - - -@login_required -def add_link(request, project_id=None): - if request.method == 'POST': - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].get_add_link(request) - - status_code = 200 if result else 500 - response = HttpResponse(json.dumps({}), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - - -@login_required -def remove_link(request, project_id=None): - if request.method == 'POST': - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].get_remove_link(request) - - status_code = 200 if result else 500 - response = HttpResponse(json.dumps({}), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - -@login_required -def get_available_nodes(request, project_id=None): - if request.method == 'GET': - csrf_token_value = get_token(request) - projects = Project.objects.filter(id=project_id).select_subclasses() - print "get_available_nodes", request.GET.dict() - result = projects[0].get_available_nodes(request.GET.dict()) - status_code = 500 if result == None else 200 - print json.dumps(result) - response = HttpResponse(json.dumps(result), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - -@login_required -def overviewelement(request, project_id=None): - if request.method == 'GET': - result = {} - error_msg = None - try: - projects = Project.objects.filter(id=project_id).select_subclasses() - project = projects[0] - parameters = request.GET.dict() - print "parameters", parameters - result = project.get_node_overview(**parameters) - except Exception as e: - error_msg = str(e) - - if error_msg is not None: - return JsonResponse({'error': {'error_msg': str(error_msg)}}) - - return JsonResponse({'node_overview': result}) - -# ETSI specific method # -@login_required -def add_node_to_vnffg(request, project_id=None): - print "add_node_to_vnffg" # TODO log - if request.method == 'POST': - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].add_node_to_vnffg(request) - - status_code = 200 if result else 500 - response = HttpResponse(json.dumps({}), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - - -@login_required -def unused_vnf(request, project_id=None, nsd_id=None): - if request.method == 'GET': - print 'in method unused_vnf : ', project_id, nsd_id # TODO log - projects = Project.objects.filter(id=project_id).select_subclasses() - result = projects[0].get_unused_vnf(nsd_id) - status_code = 500 if result == None else 200 - response = HttpResponse(json.dumps(result), content_type="application/json", status=status_code) - response["Access-Control-Allow-Origin"] = "*" - return response - -# end ETSI specific method # - - # OSM specific method # def get_package_files_list(request, project_id, project, descriptor_id, descriptor_type): files_list = [] @@ -486,8 +253,8 @@ def get_package_files_list(request, project_id, project, descriptor_id, descript return __response_handler(request, result) -def download_pkg(request, project_id, project, descriptor_id, descriptor_type): - tar_pkg = project.download_pkg(project, descriptor_id, descriptor_type) +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" @@ -522,9 +289,8 @@ def create_ns(request, project_id, project, descriptor_id, descriptor_type): @login_required def custom_action(request, project_id=None, descriptor_id=None, descriptor_type=None, action_name=None): if request.method == 'GET': - projects = Project.objects.filter(id=project_id).select_subclasses() print "Custom action: " + action_name - return globals()[action_name](request, project_id, projects[0], descriptor_id, descriptor_type) + return globals()[action_name](request, project_id, descriptor_id, descriptor_type) def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):