Add Get register api implementation in framework
[multicloud/framework.git] / multivimbroker / multivimbroker / forwarder / views.py
index 5c7cd0a..898acc5 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import os
+import os
 import json
-import re
-import tempfile
-from django.core.files.uploadedfile import InMemoryUploadedFile
-from poster.encode import multipart_encode
-from poster.streaminghttp import register_openers
+import re
+import tempfile
+from django.core.files.uploadedfile import InMemoryUploadedFile
+from poster.encode import multipart_encode
+from poster.streaminghttp import register_openers
 
 from rest_framework.views import APIView
 from rest_framework.views import Response
@@ -72,6 +72,11 @@ class Registry(BaseServer):
         return self.send(vimid, request.get_full_path(), request.body, "POST",
                          headers=originHeaders(request))
 
+    def get(self, request, vimid):
+
+        return self.send(vimid, request.get_full_path(), request.body, "GET",
+                         headers=originHeaders(request))
+
 
 class UnRegistry(BaseServer):
 
@@ -114,7 +119,8 @@ class CheckCapacity(BaseServer):
         for vim in body.get("VIMs", []):
             url = request.get_full_path().replace(
                 "check_vim_capacity", "%s/capacity_check" % vim)
-            resp = self.send(vim, url, json.dumps(newbody), "POST")
+            resp = self.send(vim, url, json.dumps(newbody), "POST",
+                             headers=originHeaders(request))
             if int(resp.status_code) != status.HTTP_200_OK:
                 continue
             try:
@@ -176,6 +182,10 @@ class APIv1Identity(Identity):
 
 class APIv1Registry(Registry):
 
+    def get(self, request, cloud_owner, cloud_region_id):
+        vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id)
+        return super(APIv1Registry, self).get(request, vimid)
+
     def post(self, request, cloud_owner, cloud_region_id):
         vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id)
         return super(APIv1Registry, self).post(request, vimid)
@@ -224,15 +234,20 @@ class APIv1CheckCapacity(CheckCapacity):
                 "check_vim_capacity", "%s/%s/capacity_check" %
                                       (cloud_owner, cloud_region_id))
             vimid = extsys.encode_vim_id(cloud_owner, cloud_region_id)
-            resp = self.send(vimid, url, json.dumps(newbody), "POST")
+            resp = self.send(vimid, url, json.dumps(newbody), "POST",
+                             headers=originHeaders(request))
+
             if int(resp.status_code) != status.HTTP_200_OK:
                 continue
+
             try:
                 resp_body = json.loads(resp.content)
             except ValueError:
                 continue
             if not resp_body.get("result", False):
                 continue
+            azCapInfo = resp_body.get("AZs", [])
+            vim["AZs"] = azCapInfo
             ret['VIMs'].append(vim)
         return Response(data=ret, status=status.HTTP_200_OK)
 
@@ -286,34 +301,38 @@ class APIv1InfraWorkload(BaseServer):
                          "DELETE", headers=originHeaders(request))
 
     def __process_multipart(self, request, vimid):
-        try:
-            register_openers()
-            dataDict = dict(request.data.iterlists())
-            params = {}
-            for key in dataDict.keys():
-                dataObj = dataDict[key][0]
-                if isinstance(dataObj, InMemoryUploadedFile):
-                    f = tempfile.NamedTemporaryFile(prefix="django_",
-                                                    suffix=dataObj._name,
-                                                    delete=False)
-                    f.write(dataObj.file.read())
-                    f.seek(dataObj.file.tell(), 0)
-                    dataObj.file.close()
-                    params[key] = open(f.name, 'rb')
-                else:
-                    params[key] = dataObj
-            datagen, headers = multipart_encode(params)
-            regex = re.compile('^HTTP_')
-            for key, value in request.META.iteritems():
-                if key.startswith("HTTP_"):
-                    headers[regex.sub('', key).replace('_', '-')] = value
-            resp = self.send(vimid, request.path, datagen, "POST",
-                             headers=headers, multipart=True)
-        finally:
-            for key in params:
-                refobj = params[key]
-                if type(refobj) is not unicode:
-                    if refobj.closed is False:
-                        print refobj.close()
-                    os.remove(refobj.name)
-        return resp
+        return Response(
+            data={'error': 'multipart API is not supported yet'},
+            status=status.HTTP_400_BAD_REQUEST)
+#        try:
+#            API is depreciated due to poster not available in py3
+#            register_openers()
+#            dataDict = dict(request.data.iterlists())
+#            params = {}
+#            for key in dataDict.keys():
+#                dataObj = dataDict[key][0]
+#                if isinstance(dataObj, InMemoryUploadedFile):
+#                    f = tempfile.NamedTemporaryFile(prefix="django_",
+#                                                    suffix=dataObj._name,
+#                                                    delete=False)
+#                    f.write(dataObj.file.read())
+#                    f.seek(dataObj.file.tell(), 0)
+#                    dataObj.file.close()
+#                    params[key] = open(f.name, 'rb')
+#                else:
+#                    params[key] = dataObj
+#             datagen, headers = multipart_encode(params)
+#             regex = re.compile('^HTTP_')
+#             for key, value in request.META.iteritems():
+#                if key.startswith("HTTP_"):
+#                    headers[regex.sub('', key).replace('_', '-')] = value
+#             resp = self.send(vimid, request.path, datagen, "POST",
+#                             headers=headers, multipart=True)
+#        finally:
+#             for key in params or {}:
+#                refobj = params[key]
+#                if type(refobj) is not unicode:
+#                    if refobj.closed is False:
+#                        print (refobj.close())
+#                    os.remove(refobj.name)
+#        return resp