fix bug 923; fix bug 940
[osm/LW-UI.git] / vimhandler / views.py
index d41ff82..04c9cde 100644 (file)
@@ -15,7 +15,7 @@
 #
 
 from django.shortcuts import render, redirect
-from django.contrib.auth.decorators import login_required
+from sf_t3d.decorators import login_required
 from django.http import HttpResponse
 import json
 from lib.osm.osmclient.clientv2 import Client
@@ -31,13 +31,13 @@ log = logging.getLogger('vimhandler.py')
 def list(request):
     user = osmutils.get_user(request)
     project_id = user.project_id
+    result = {'type': 'ns', 'project_id': project_id}
+    raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
+    if 'application/json' not in raw_content_types:
+        return __response_handler(request, result, 'vim_list.html')
     client = Client()
-    result = client.vim_list(user.get_token())
-    print result
-    result = {
-        "project_id": project_id,
-        "datacenters": result['data'] if result and result['error'] is False else []
-    }
+    result_client = client.vim_list(user.get_token())
+    result["datacenters"] = result_client['data'] if result_client and result_client['error'] is False else []
     return __response_handler(request, result, 'vim_list.html')
 
 
@@ -49,34 +49,43 @@ def create(request):
     if request.method == 'GET':
         return __response_handler(request, result, 'vim_create.html')
     else:
-        new_vim_dict = request.POST.dict()
-        client = Client()
-        keys = ["schema_version",
-                "schema_type",
-                "name",
-                "vim_url",
-                "vim_type",
-                "vim_user",
-                "vim_password",
-                "vim_tenant_name",
-                "description"]
-        vim_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_vim_dict.items()))
-        vim_data['config'] = {}
-        for k, v in new_vim_dict.items():
-            if str(k).startswith('config_') and len(v) > 0:
-                config_key = k[7:]
-                vim_data['config'][config_key] = v
-        if 'additional_conf' in new_vim_dict:
-            try:
-                additional_conf_dict = yaml.safe_load(new_vim_dict['additional_conf'])
-                for k,v in additional_conf_dict.items():
-                    vim_data['config'][k] = v
-            except Exception as e:
-                # TODO return error on json.loads exception
-                print e
+        try:
+            new_vim_dict = request.POST.dict()
+            client = Client()
+            keys = ["schema_version",
+                    "schema_type",
+                    "name",
+                    "vim_url",
+                    "vim_type",
+                    "vim_user",
+                    "vim_password",
+                    "vim_tenant_name",
+                    "description"]
+            vim_data = dict(filter(lambda i: i[0] in keys and len(
+                i[1]) > 0, new_vim_dict.items()))
+            vim_data['config'] = {}
+
+            config_file = request.FILES.get('config_file')
+
+            if config_file is not None:
+                config = ''
+                for line in config_file:
+                    config = config + line.decode()
+                vim_data['config'] = yaml.load(config)
+            elif 'config' in request.POST and request.POST.get('config') != '':
+                vim_data['config'] = yaml.load(request.POST.get('config'))
+
+
+        except Exception as e:
+            return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message}, url=None, status=400)
         result = client.vim_create(user.get_token(), vim_data)
-        # TODO  'vim:show', to_redirect=True, vim_id=vim_id
-        return __response_handler(request, result, 'vims:list', to_redirect=True, )
+
+        if 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 delete(request, vim_id=None):
@@ -86,7 +95,8 @@ def delete(request, vim_id=None):
         del_res = client.vim_delete(user.get_token(), vim_id)
     except Exception as e:
         log.exception(e)
-    return __response_handler(request, {}, 'vims:list', to_redirect=True, )
+    return __response_handler(request, del_res, 'vims:list', to_redirect=True)
+
 
 @login_required
 def show(request, vim_id=None):
@@ -94,7 +104,6 @@ def show(request, vim_id=None):
     project_id = user.project_id
     client = Client()
     result = client.vim_get(user.get_token(), vim_id)
-    print result
     if isinstance(result, dict) and 'error' in result and result['error']:
         return render(request, 'error.html')