From: SudhakarReddy Date: Mon, 19 Mar 2018 07:21:13 +0000 (+0530) Subject: Support for Multipart has been added to Broker X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=refs%2Fheads%2Famsterdam;hp=6b4d59475fb8f4c3cd74632672665ae0c3ed12e2;p=multicloud%2Fframework.git Support for Multipart has been added to Broker Change-Id: I6831a708dc9ad48089f23337f80c4b566adcaaa4 Issue-ID: MULTICLOUD-180 Signed-off-by: SudhakarReddy --- 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[0-9a-zA-Z_-]+)/extensions$', Extension.as_view()), + url(r'^api/multicloud/v0/(?P[0-9a-zA-Z_-]+)/multipart', + MultiPartView.as_view()), url(r'^api/multicloud/v0/(?P[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