diff options
| author | Bas Peschier <basp@fabrique.nl> | 2015-03-15 11:26:47 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-03-18 13:03:25 -0400 |
| commit | 0339844b70895d6162b4595ae615e6edf843c6cd (patch) | |
| tree | b4412df41361415c9800756e90ca117a3389fa71 /django | |
| parent | 6bff3439894ac22d80f270f36513fc86586273f3 (diff) | |
Fixed #24476 -- Added context manager/decorator for overriding script prefix.
Tests were using an undocumented keyword argument for easily overriding
script prefix while reversing. This is now changed into a test utility
which can be used as decorator or context manager.
Diffstat (limited to 'django')
| -rw-r--r-- | django/core/urlresolvers.py | 5 | ||||
| -rw-r--r-- | django/test/utils.py | 21 |
2 files changed, 23 insertions, 3 deletions
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index cf42768add..563d4a7ade 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -527,15 +527,14 @@ def resolve(path, urlconf=None): return get_resolver(urlconf).resolve(path) -def reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None): +def reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None): if urlconf is None: urlconf = get_urlconf() resolver = get_resolver(urlconf) args = args or [] kwargs = kwargs or {} - if prefix is None: - prefix = get_script_prefix() + prefix = get_script_prefix() if not isinstance(viewname, six.string_types): view = viewname diff --git a/django/test/utils.py b/django/test/utils.py index 5224bcfb71..0101919d11 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -12,11 +12,13 @@ from django.apps import apps from django.conf import UserSettingsHolder, settings from django.core import mail from django.core.signals import request_started +from django.core.urlresolvers import get_script_prefix, set_script_prefix from django.db import reset_queries from django.http import request from django.template import Template from django.test.signals import setting_changed, template_rendered from django.utils import six +from django.utils.decorators import ContextDecorator from django.utils.encoding import force_str from django.utils.translation import deactivate @@ -595,3 +597,22 @@ def require_jinja2(test_func): 'OPTIONS': {'keep_trailing_newline': True}, }])(test_func) return test_func + + +class ScriptPrefix(ContextDecorator): + def __enter__(self): + set_script_prefix(self.prefix) + + def __exit__(self, exc_type, exc_val, traceback): + set_script_prefix(self.old_prefix) + + def __init__(self, prefix): + self.prefix = prefix + self.old_prefix = get_script_prefix() + + +def override_script_prefix(prefix): + """ + Decorator or context manager to temporary override the script prefix. + """ + return ScriptPrefix(prefix) |
