Skip to content

Commit 5e6d49c

Browse files
committed
Add interpolate argument to avoid resolving proxied values.
The argument is already documented but not implemented yet. Fixes #415
1 parent fe59a81 commit 5e6d49c

File tree

4 files changed

+16
-3
lines changed

4 files changed

+16
-3
lines changed

CHANGELOG.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
55
The format is inspired by `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`_
66
and this project adheres to `Semantic Versioning <https://semver.org/spec/v2.0.0.html>`_.
77

8+
`v0.x.y`_ - Unreleased
9+
-------------------------------
10+
Added
11+
+++++
12+
- Added support for ``interpolate`` parameter
13+
`#415 <https://github.com/joke2k/django-environ/pull/415>`_.
14+
815
`v0.11.2`_ - 1-September-2023
916
-------------------------------
1017
Fixed

docs/tips.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ Proxy value
226226
===========
227227

228228
Values that being with a ``$`` may be interpolated. Pass ``interpolate=True`` to
229-
``environ.Env()`` to enable this feature:
229+
``environ.Env()`` to enable this feature (``True`` by default):
230230

231231
.. code-block:: python
232232

environ/environ.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,11 @@ class Env:
189189
for s in ('', 's')]
190190
CLOUDSQL = 'cloudsql'
191191

192-
def __init__(self, **scheme):
192+
def __init__(self, interpolate=True, **scheme):
193193
self.smart_cast = True
194194
self.escape_proxy = False
195195
self.prefix = ""
196+
self.interpolate = interpolate
196197
self.scheme = scheme
197198

198199
def __call__(self, var, cast=None, default=NOTSET, parse_default=False):
@@ -396,7 +397,8 @@ def get_value(self, var, cast=None, default=NOTSET, parse_default=False):
396397
# Resolve any proxied values
397398
prefix = b'$' if isinstance(value, bytes) else '$'
398399
escape = rb'\$' if isinstance(value, bytes) else r'\$'
399-
if hasattr(value, 'startswith') and value.startswith(prefix):
400+
if self.interpolate and \
401+
hasattr(value, 'startswith') and value.startswith(prefix):
400402
value = value.lstrip(prefix)
401403
value = self.get_value(value, cast=cast, default=default)
402404

tests/test_env.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ def test_bool_true(self, value, variable):
134134
def test_proxied_value(self):
135135
assert self.env('PROXIED_VAR') == 'bar'
136136

137+
def test_not_interpolated_proxied_value(self):
138+
env = Env(interpolate=False)
139+
assert env('PROXIED_VAR') == '$STR_VAR'
140+
137141
def test_dollar_sign(self):
138142
assert self.env('DOLLAR_VAR') == 'SOME_VALUE$S3CR3TK3Y@HELLO'
139143

0 commit comments

Comments
 (0)