summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSudhakarReddy <Sudhakar.reddy@amdocs.com>2018-03-19 12:51:13 +0530
committerSudhakarReddy <Sudhakar.reddy@amdocs.com>2018-03-19 12:51:13 +0530
commit5b65dffd0c34a56a55c56f80b684de063690dc9a (patch)
treec5eda292726dd689b0cb2effc97bb9abe018505c
parent6b4d59475fb8f4c3cd74632672665ae0c3ed12e2 (diff)
Support for Multipart has been added to Brokeramsterdam
Change-Id: I6831a708dc9ad48089f23337f80c4b566adcaaa4 Issue-ID: MULTICLOUD-180 Signed-off-by: SudhakarReddy <Sudhakar.reddy@amdocs.com>
-rw-r--r--multivimbroker/multivimbroker/forwarder/urls.py3
-rw-r--r--multivimbroker/multivimbroker/forwarder/views.py25
-rw-r--r--multivimbroker/requirements.txt3
3 files changed, 31 insertions, 0 deletions
diff --git a/multivimbroker/multivimbroker/forwarder/urls.py b/multivimbroker/multivimbroker/forwarder/urls.py
index 8cc3fa8..1d2aaa4 100644
--- a/multivimbroker/multivimbroker/forwarder/urls.py
+++ b/multivimbroker/multivimbroker/forwarder/urls.py
@@ -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()),
]
diff --git a/multivimbroker/multivimbroker/forwarder/views.py b/multivimbroker/multivimbroker/forwarder/views.py
index e098065..7575ffd 100644
--- a/multivimbroker/multivimbroker/forwarder/views.py
+++ b/multivimbroker/multivimbroker/forwarder/views.py
@@ -14,11 +14,15 @@
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)
diff --git a/multivimbroker/requirements.txt b/multivimbroker/requirements.txt
index caf8687..2ab3f92 100644
--- a/multivimbroker/requirements.txt
+++ b/multivimbroker/requirements.txt
@@ -2,6 +2,9 @@
Django==1.9.6
djangorestframework==3.3.3
+#multipart support
+poster==0.8.1
+
# redis cache
redis==2.10.5