Support for Multipart has been added to Broker
[multicloud/framework.git] / multivimbroker / multivimbroker / forwarder / views.py
index e098065..7575ffd 100644 (file)
 
 import os
 import json
+from poster.encode import multipart_encode
+from poster.streaminghttp import register_openers
+import re
 
 from rest_framework.views import APIView
 from rest_framework.views import Response
 from rest_framework.views import status
 from multivimbroker.forwarder.base import BaseHandler
+from rest_framework.parsers import MultiPartParser
 
 #
 
@@ -120,3 +124,24 @@ class Forward(BaseServer):
 
         return self.send(vimid, request.get_full_path(), request.body, "PUT",
                          headers=None)
+
+
+# Multipart view
+class MultiPartView(BaseServer):
+
+    parser_classes = (MultiPartParser, )
+
+    def post(self, request, vimid):
+        register_openers()
+        datagen, headers = multipart_encode(dict(request.data.iterlists()))
+        # will convert the datagen to be accepted by httplib2 body param
+        requestData = "".join(datagen)
+        # MultiPart parser store the header keys in request.META
+        # A custom header in request body(for ex: Cloud_Type) 
+        # will be transformed to HTTP_CLOUD_TYPE
+        regex = re.compile('^HTTP_')
+        for key, value in request.META.iteritems():
+            if key.startswith("HTTP_"):
+                headers[regex.sub('',key).replace('_','-')] = value
+        return self.send(vimid, request.path, requestData, "POST",
+                         headers=headers)