From c86a0917cbbadc295a73f6c03b8e625ec31ef6e5 Mon Sep 17 00:00:00 2001 From: Rafael Caricio Date: Sun, 19 Jul 2015 11:17:55 +0200 Subject: [PATCH] Isolate responsabilities --- django_pyvows/context.py | 33 +++++++++++++------------------ django_pyvows/http_helpers.py | 23 +++++++++++++-------- django_pyvows/settings_helpers.py | 9 +++++++++ 3 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 django_pyvows/settings_helpers.py diff --git a/django_pyvows/context.py b/django_pyvows/context.py index e377e5c..a772092 100644 --- a/django_pyvows/context.py +++ b/django_pyvows/context.py @@ -13,32 +13,27 @@ import os import django from pyvows import Vows -from django_pyvows import http_helpers +from django_pyvows.http_helpers import HttpClientSupport +from django_pyvows.settings_helpers import SettingsOverrideSupport -class DjangoContext(Vows.Context): +class DjangoContext(Vows.Context, HttpClientSupport, SettingsOverrideSupport): + def __init__(self, parent): + super(DjangoContext, self).__init__(parent) + HttpClientSupport.__init__(self) + SettingsOverrideSupport.__init__(self) + self.ignore('start_environment', 'settings_module') + + def settings_module(self): + return 'settings' @classmethod - def start_environment(cls, settings_path): - if not settings_path: + def start_environment(cls, settings_module): + if not settings_module: raise ValueError('The settings_path argument is required.') - os.environ.update({'DJANGO_SETTINGS_MODULE': settings_path}) + os.environ.update({'DJANGO_SETTINGS_MODULE': settings_module}) django.setup() from django.test.utils import setup_test_environment setup_test_environment() - - def __init__(self, parent): - super(DjangoContext, self).__init__(parent) - self.ignore('start_environment', 'settings', 'get', 'post') - - def settings(self, **kwargs): - from django.test.utils import override_settings - return override_settings(**kwargs) - - def get(self, *args, **kwargs): - return http_helpers.get(*args, **kwargs) - - def post(self, *args, **kwargs): - return http_helpers.post(*args, **kwargs) diff --git a/django_pyvows/http_helpers.py b/django_pyvows/http_helpers.py index 0826136..bd38466 100644 --- a/django_pyvows/http_helpers.py +++ b/django_pyvows/http_helpers.py @@ -2,13 +2,20 @@ # -*- coding: utf-8 -*- -def get(*args, **kwargs): - from django.test.client import Client - client = Client() - return client.get(*args, **kwargs) +class HttpClientSupport(object): + def __init__(self): + self._client = None + self.ignore('get', 'post') + @property + def client(self): + if self._client is None: + from django.test.client import Client # Needs to be lazy loaded due settings config + self._client = Client() + return self._client -def post(*args, **kwargs): - from django.test.client import Client - client = Client() - return client.post(*args, **kwargs) + def get(self, *args, **kwargs): + return self.client.get(*args, **kwargs) + + def post(self, *args, **kwargs): + return self.client.post(*args, **kwargs) diff --git a/django_pyvows/settings_helpers.py b/django_pyvows/settings_helpers.py new file mode 100644 index 0000000..0b12389 --- /dev/null +++ b/django_pyvows/settings_helpers.py @@ -0,0 +1,9 @@ + + +class SettingsOverrideSupport(object): + def __init__(self): + self.ignore('settings') + + def settings(self, **kwargs): + from django.test.utils import override_settings + return override_settings(**kwargs)