Source code for api.middleware
"""
HTTP middleware for the Deis REST API.
See https://docs.djangoproject.com/en/1.6/topics/http/middleware/
"""
import json
from django.http import HttpResponse
from rest_framework import status
from api import __version__
[docs]class APIVersionMiddleware(object):
"""
Return an error if a client request is incompatible with this REST API
version, and include that REST API version with each response.
"""
[docs] def process_request(self, request):
"""
Return a 405 "Not Allowed" if the request's client major version
doesn't match this controller's REST API major version (currently "1").
"""
try:
client_version = request.META['HTTP_DEIS_VERSION']
server_version = __version__.rsplit('.', 2)[0]
if client_version != server_version:
message = {
'error': 'Client and server versions do not match. ' +
'Client version: {} '.format(client_version) +
'Server version: {}'.format(server_version)
}
return HttpResponse(
json.dumps(message),
content_type='application/json',
status=status.HTTP_405_METHOD_NOT_ALLOWED
)
except KeyError:
pass
[docs] def process_response(self, request, response):
"""
Include the controller's REST API major and minor version in
a response header.
"""
# clients shouldn't care about the patch release
response['DEIS_API_VERSION'] = __version__.rsplit('.', 1)[0]
response['X_DEIS_API_VERSION'] = response['DEIS_API_VERSION'] # DEPRECATED
return response