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 = [
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()),
]
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
#
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)