From 0465a06654ca2679c616f9a61e9bc246ea32d011 Mon Sep 17 00:00:00 2001 From: Anthony Young Date: Tue, 19 Jul 2011 11:32:31 -0700 Subject: [PATCH] re-add LazyUser, fix tests so that they pass --- .../django_openstack/middleware/keystone.py | 9 ++++++++- .../django_openstack/tests/api_tests.py | 18 ++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/django-openstack/django_openstack/middleware/keystone.py b/django-openstack/django_openstack/middleware/keystone.py index 4973e082a..9116cffe9 100644 --- a/django-openstack/django_openstack/middleware/keystone.py +++ b/django-openstack/django_openstack/middleware/keystone.py @@ -50,9 +50,16 @@ def get_user_from_request(request): request.session['serviceCatalog']) +class LazyUser(object): + def __get__(self, request, obj_type=None): + if not hasattr(request, '_cached_user'): + request._cached_user = get_user_from_request(request) + return request._cached_user + + class AuthenticationMiddleware(object): def process_request(self, request): - request.__class__.user = get_user_from_request(request) + request.__class__.user = LazyUser() def process_exception(self, request, exception): if type(exception) in [openstack.compute.exceptions.Forbidden, diff --git a/django-openstack/django_openstack/tests/api_tests.py b/django-openstack/django_openstack/tests/api_tests.py index 905aec333..cfddedb1a 100644 --- a/django-openstack/django_openstack/tests/api_tests.py +++ b/django-openstack/django_openstack/tests/api_tests.py @@ -776,12 +776,11 @@ class AuthApiTests(test.TestCase): ] tenants_mock.for_token('aToken').AndReturn(tenant_list) - request_mock = self.mox.CreateMock(http.HttpRequest) - request_mock.session = {'token': 'aToken'} + self.request.session = {'token': 'aToken'} self.mox.ReplayAll() - ret_val = api.token_get_tenant(request_mock, TEST_TENANT_ID) + ret_val = api.token_get_tenant(self.request, TEST_TENANT_ID) self.assertEqual(tenant_list[1], ret_val) self.mox.VerifyAll() @@ -800,12 +799,11 @@ class AuthApiTests(test.TestCase): ] tenants_mock.for_token('aToken').AndReturn(tenant_list) - request_mock = self.mox.CreateMock(http.HttpRequest) - request_mock.session = {'token': 'aToken'} + self.request.session = {'token': 'aToken'} self.mox.ReplayAll() - ret_val = api.token_get_tenant(request_mock, TEST_TENANT_ID) + ret_val = api.token_get_tenant(self.request, TEST_TENANT_ID) self.assertIsNone(ret_val) self.mox.VerifyAll() @@ -827,11 +825,9 @@ class AuthApiTests(test.TestCase): ] tenants_mock.for_token('aToken').AndReturn(tenant_list) - request_mock = self.mox.CreateMock(http.HttpRequest) - self.mox.ReplayAll() - ret_val = api.token_list_tenants(request_mock, 'aToken') + ret_val = api.token_list_tenants(self.request, 'aToken') for tenant in ret_val: self.assertIn(tenant, tenant_list) @@ -850,11 +846,9 @@ class AuthApiTests(test.TestCase): tokens_mock.create(TEST_TENANT_ID, TEST_USERNAME, TEST_PASSWORD).AndReturn(test_token) - request_mock = self.mox.CreateMock(http.HttpRequest) - self.mox.ReplayAll() - ret_val = api.token_create(request_mock, TEST_TENANT_ID, + ret_val = api.token_create(self.request, TEST_TENANT_ID, TEST_USERNAME, TEST_PASSWORD) self.assertEqual(test_token, ret_val)