Support for Multipart has been added to Broker 29/36429/1 amsterdam
authorSudhakarReddy <Sudhakar.reddy@amdocs.com>
Mon, 19 Mar 2018 07:21:13 +0000 (12:51 +0530)
committerSudhakarReddy <Sudhakar.reddy@amdocs.com>
Mon, 19 Mar 2018 07:21:13 +0000 (12:51 +0530)
Change-Id: I6831a708dc9ad48089f23337f80c4b566adcaaa4
Issue-ID: MULTICLOUD-180
Signed-off-by: SudhakarReddy <Sudhakar.reddy@amdocs.com>
multivimbroker/multivimbroker/forwarder/urls.py
multivimbroker/multivimbroker/forwarder/views.py
multivimbroker/requirements.txt

index 8cc3fa8..1d2aaa4 100644 (file)
@@ -21,6 +21,7 @@ from multivimbroker.forwarder.views import Identity
 from multivimbroker.forwarder.views import Registry
 from multivimbroker.forwarder.views import UnRegistry
 from multivimbroker.forwarder.views import VIMTypes
+from multivimbroker.forwarder.views import MultiPartView
 
 
 urlpatterns = [
@@ -36,6 +37,8 @@ urlpatterns = [
         UnRegistry.as_view()),
     url(r'^api/multicloud/v0/(?P<vimid>[0-9a-zA-Z_-]+)/extensions$',
         Extension.as_view()),
+    url(r'^api/multicloud/v0/(?P<vimid>[0-9a-zA-Z_-]+)/multipart',
+        MultiPartView.as_view()),
     url(r'^api/multicloud/v0/(?P<vimid>[0-9a-zA-Z_-]+)',
         Forward.as_view()),
 ]
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)
index caf8687..2ab3f92 100644 (file)
@@ -2,6 +2,9 @@
 Django==1.9.6
 djangorestframework==3.3.3
 
+#multipart support
+poster==0.8.1
+
 # redis cache
 redis==2.10.5