From 9749d873a6243a8cf000f6eae58d5d2c2ed43106 Mon Sep 17 00:00:00 2001 From: Yves-Gwenael Bourhis Date: Tue, 26 Jan 2016 17:07:26 +0100 Subject: [PATCH] Fixing timezone awareness Putting back timezone awareness in the middleware which was accidently removed by https://review.openstack.org/#/c/179513/ Change-Id: I01424dee71e778969d97cbb38899d898e01177fa Closes-bug: #1538189 --- horizon/middleware.py | 5 +++++ horizon/test/tests/middleware.py | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/horizon/middleware.py b/horizon/middleware.py index 4102419580..f0ba39436e 100644 --- a/horizon/middleware.py +++ b/horizon/middleware.py @@ -29,6 +29,7 @@ from django.contrib import messages as django_messages from django import http from django import shortcuts from django.utils.encoding import iri_to_uri # noqa +from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from openstack_auth import views as auth_views @@ -106,6 +107,10 @@ class HorizonMiddleware(object): } ) + tz = request.session.get('django_timezone') + if tz: + timezone.activate(tz) + def process_exception(self, request, exception): """Catches internal Horizon exception classes such as NotAuthorized, NotFound and Http302 and handles them gracefully. diff --git a/horizon/test/tests/middleware.py b/horizon/test/tests/middleware.py index 4b80b9ae7a..694824b3d7 100644 --- a/horizon/test/tests/middleware.py +++ b/horizon/test/tests/middleware.py @@ -16,6 +16,7 @@ from django.conf import settings from django.http import HttpResponseRedirect # noqa +from django.utils import timezone from horizon import exceptions from horizon import middleware @@ -23,6 +24,15 @@ from horizon.test import helpers as test class MiddlewareTests(test.TestCase): + + def setUp(self): + self._timezone_backup = timezone.get_current_timezone_name() + return super(MiddlewareTests, self).setUp() + + def tearDown(self): + timezone.activate(self._timezone_backup) + return super(MiddlewareTests, self).tearDown() + def test_redirect_login_fail_to_login(self): url = settings.LOGIN_URL request = self.factory.post(url) @@ -49,3 +59,19 @@ class MiddlewareTests(test.TestCase): resp = mw.process_response(request, response) self.assertEqual(200, resp.status_code) self.assertEqual(url, resp['X-Horizon-Location']) + + def test_timezone_awareness(self): + url = settings.LOGIN_REDIRECT_URL + mw = middleware.HorizonMiddleware() + + request = self.factory.get(url) + request.session['django_timezone'] = 'America/Chicago' + mw.process_request(request) + self.assertEqual( + timezone.get_current_timezone_name(), 'America/Chicago') + request.session['django_timezone'] = 'Europe/Paris' + mw.process_request(request) + self.assertEqual(timezone.get_current_timezone_name(), 'Europe/Paris') + request.session['django_timezone'] = 'UTC' + mw.process_request(request) + self.assertEqual(timezone.get_current_timezone_name(), 'UTC')