Skip to content

Commit 3d58f2d

Browse files
committed
Ensuring that settings are proxied when running under Django
Re #47
1 parent 7a456ae commit 3d58f2d

File tree

4 files changed

+52
-9
lines changed

4 files changed

+52
-9
lines changed

react/apps.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class ReactConfig(AppConfig):
77
name = 'react'
88

99
def ready(self):
10+
react.conf.settings._PROXY_DJANGO_SETTINGS = True
1011
react.conf.settings.configure(
1112
**getattr(settings, 'REACT', {})
12-
)
13+
)

react/conf.py

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,36 @@
1-
from optional_django import conf
1+
class Conf(object):
2+
_render_url = 'http://127.0.0.1:9009/render'
3+
_render = True
4+
_PROXY_DJANGO_SETTINGS = False
25

6+
@property
7+
def RENDER_URL(self):
8+
if not self._PROXY_DJANGO_SETTINGS:
9+
return self._render_url
310

4-
class Conf(conf.Conf):
5-
RENDER_URL = 'http://127.0.0.1:9009/render'
6-
RENDER = True
11+
from django.conf import settings
712

8-
settings = Conf()
13+
if hasattr(settings, 'REACT'):
14+
return settings.REACT.get('RENDER_URL', self._render_url)
15+
16+
return self._render_url
17+
18+
@property
19+
def RENDER(self):
20+
if not self._PROXY_DJANGO_SETTINGS:
21+
return self._render
22+
23+
from django.conf import settings
24+
25+
if hasattr(settings, 'REACT'):
26+
return settings.REACT.get('RENDER', self._render)
27+
28+
return self._render
29+
30+
def configure(self, RENDER_URL=None, RENDER=None):
31+
if RENDER_URL is not None:
32+
self._render_url = RENDER_URL
33+
if RENDER is not None:
34+
self._render = RENDER
35+
36+
settings = Conf()

tests/settings.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
TEST_ROOT = os.path.dirname(__file__)
1515
COMPONENT_ROOT = os.path.join(TEST_ROOT, 'components')
1616

17+
DATABASES = {
18+
'default': {
19+
'ENGINE': 'django.db.backends.sqlite3',
20+
'NAME': 'mydatabase',
21+
}
22+
}
23+
1724

1825
class Components(object):
1926
HELLO_WORLD_JS = os.path.join(COMPONENT_ROOT, 'HelloWorld.js')

tests/test_django_integration.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import json
22
import datetime
3-
import unittest
3+
from django.test import TestCase
44
from django.utils import timezone
55
from optional_django.env import DJANGO_CONFIGURED
66
from react.render import render_component
7+
from react import conf
78
from .settings import Components
89

910

10-
class TestDjangoIntegration(unittest.TestCase):
11+
class TestDjangoIntegration(TestCase):
1112
__test__ = DJANGO_CONFIGURED
1213

1314
def test_can_serialize_datetime_values_in_props(self):
@@ -33,4 +34,10 @@ def test_can_serialize_datetime_values_in_props(self):
3334

3435
def test_relative_paths_are_resolved_via_the_static_file_finder(self):
3536
component = render_component(Components.DJANGO_REL_PATH, to_static_markup=True)
36-
self.assertEqual(str(component), '<span>You found me.</span>')
37+
self.assertEqual(str(component), '<span>You found me.</span>')
38+
39+
def test_django_settings_are_proxied(self):
40+
self.assertEqual(conf.settings.RENDER, True)
41+
with self.settings(REACT={'RENDER': False}):
42+
self.assertEqual(conf.settings.RENDER, False)
43+

0 commit comments

Comments
 (0)