cloudcomputinghust/CAL

View on GitHub
calplus/middlewares.py

Summary

Maintainability
A
0 mins
Test Coverage
from oslo_context import context

from calplus import base
from calplus import utils


class DeserializeMiddleware(base.BaseMiddleware):

    def __init__(self):
        super(DeserializeMiddleware, self).__init__()

    def _deserialize(self, req):
        deserializer = utils.JSONRequestDeserializer()
        body = deserializer.default(req)
        cloud = body['body']['cloud']
        req.env['calplus.cloud'] = str(cloud)

    def __attach_req_id_to_resp(self, req, resp):
        req_id = context.generate_request_id()
        req.env['request-id'] = req_id
        if 'x-request-id' not in resp._headers:
            resp._headers['x-request-id'] = req_id

    def process_request(self, req, resp):
        self._deserialize(req)
        self.__attach_req_id_to_resp(req, resp)


class FuncMiddleware(base.BaseMiddleware):

    def __init__(self, func):
        super(FuncMiddleware, self).__init__()
        self.func = func

    def process_resource(self, req, resp, resource, params):
        return self.func(req, resp, resource, params)


class SerializeMiddleware(base.BaseMiddleware):

    def __init__(self):
        super(SerializeMiddleware, self).__init__()

    def _serialize(self, resp, result):
        serializer = utils.JSONResponseSerializer()
        serializer.default(resp, result)

    def process_response(self, req, resp, resource):
        self._serialize(resp, resp.body)