From d723433f1fa5cb5a8d10243471c216d7e892fd6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Us=C3=A1n?= <5434104+andruten@users.noreply.github.com> Date: Tue, 5 Nov 2024 22:34:39 +0100 Subject: [PATCH] feat: `REVPROXY` settings dict (#192) --- CHANGELOG.rst | 7 +++++-- docs/settings.rst | 23 +++++++++++++++++++++-- revproxy/__init__.py | 2 +- revproxy/apps.py | 15 +++++++++------ revproxy/settings.py | 2 +- revproxy/views.py | 2 +- tests/test_views.py | 2 +- 7 files changed, 39 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b0cd58c..2ab1e5b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,7 +1,10 @@ -0.13.0 (Unreleased) +0.13.0 (2024-11-05) =================== -* Added new `REVPROXY_QUOTE_SPACES_AS_PLUS` setting +* Added `REVPROXY` settings dict #192 +* Let encode spaces as `%20` or `+` #191 +* Cast int cookie dict max_age #185 +* Replaced deprecated getheader in favor of headers #184 0.12.0 (2023-10-19) diff --git a/docs/settings.rst b/docs/settings.rst index 3dd3b2c..a22225b 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -1,4 +1,23 @@ Settings -================== +======== -`REVPROXY_QUOTE_SPACES_AS_PLUS`: Tells revproxy if it spaces should be replaced by `+` or `%20`. +Our configurations are all namespaced under the ``REVPROXY`` settings. + +For example: + +.. code-block:: python + + REVPROXY = { + 'QUOTE_SPACES_AS_PLUS': True, + } + + +List of available settings +-------------------------- + +QUOTE_SPACES_AS_PLUS +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Default: ``True`` + +Indicates whether spaces should be replaced by %20 or + when parsing a URL. diff --git a/revproxy/__init__.py b/revproxy/__init__.py index 74c952d..bf0e110 100644 --- a/revproxy/__init__.py +++ b/revproxy/__init__.py @@ -1,3 +1,3 @@ -__version__ = '0.12.0' +__version__ = '0.13.0' default_app_config = 'revproxy.apps.RevProxyConfig' diff --git a/revproxy/apps.py b/revproxy/apps.py index ab840a9..1968e08 100644 --- a/revproxy/apps.py +++ b/revproxy/apps.py @@ -10,9 +10,12 @@ class RevProxyConfig(AppConfig): def ready(self): super().ready() - for setting, default_value in REVPROXY_DEFAULT_SETTINGS.items(): - setattr( - settings, - setting, - getattr(settings, setting, default_value), - ) + default_settings = { + 'REVPROXY': REVPROXY_DEFAULT_SETTINGS + } + + if not hasattr(settings, 'REVPROXY'): + setattr(settings, 'REVPROXY', default_settings['REVPROXY']) + else: + for key, value in default_settings['REVPROXY'].items(): + settings.REVPROXY.setdefault(key, value) diff --git a/revproxy/settings.py b/revproxy/settings.py index 96405f1..1208026 100644 --- a/revproxy/settings.py +++ b/revproxy/settings.py @@ -1,3 +1,3 @@ REVPROXY_DEFAULT_SETTINGS = { - 'REVPROXY_QUOTE_SPACES_AS_PLUS': True, + 'QUOTE_SPACES_AS_PLUS': True, } diff --git a/revproxy/views.py b/revproxy/views.py index f0676d8..3298d46 100644 --- a/revproxy/views.py +++ b/revproxy/views.py @@ -169,7 +169,7 @@ def get_request_headers(self): def get_quoted_path(self, path): """Return quoted path to be used in proxied request""" - if settings.REVPROXY_QUOTE_SPACES_AS_PLUS: + if settings.REVPROXY["QUOTE_SPACES_AS_PLUS"]: return quote_plus(path.encode('utf8'), QUOTE_SAFE) else: return quote(path.encode('utf8'), QUOTE_SAFE) diff --git a/tests/test_views.py b/tests/test_views.py index 66bf6ed..1ccddfb 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -212,7 +212,7 @@ class CustomProxyView(ProxyView): decode_content=False, headers=headers) - @override_settings(REVPROXY_QUOTE_SPACES_AS_PLUS=False) + @override_settings(REVPROXY={'QUOTE_SPACES_AS_PLUS': False}) def test_space_is_escaped_disabled(self): class CustomProxyView(ProxyView): upstream = 'http://example.com'