Skip to content

Commit 3aaaaa0

Browse files
authored
Django 1.11 live server updates (#378)
* Do not pass specified port to Django 1.11 live server. * Raise a warning when trying to specify a live server port with Django 1.11. * Setup ALLOWED_HOSTS for live server.
1 parent 9d3f2b2 commit 3aaaaa0

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

pytest_django/fixtures.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,11 +285,23 @@ def live_server(request):
285285
``django.contrib.staticfiles`` is available in INSTALLED_APPS.
286286
"""
287287
skip_if_no_django()
288-
addr = request.config.getvalue('liveserver')
289-
if not addr:
290-
addr = os.getenv('DJANGO_LIVE_TEST_SERVER_ADDRESS')
288+
289+
import django
290+
291+
addr = (request.config.getvalue('liveserver') or
292+
os.getenv('DJANGO_LIVE_TEST_SERVER_ADDRESS'))
293+
294+
if addr and django.VERSION >= (1, 11) and ':' in addr:
295+
request.config.warn('D001', 'Specifying a live server port is not supported '
296+
'in Django 1.11. This will be an error in a future '
297+
'pytest-django release.')
298+
291299
if not addr:
292-
addr = 'localhost:8081,8100-8200'
300+
if django.VERSION < (1, 11):
301+
addr = 'localhost:8081,8100-8200'
302+
else:
303+
addr = 'localhost'
304+
293305
server = live_server_helper.LiveServer(addr)
294306
request.addfinalizer(server.stop)
295307
return server

pytest_django/live_server_helper.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ class LiveServer(object):
1010
"""
1111

1212
def __init__(self, addr):
13+
import django
1314
from django.db import connections
1415
from django.test.testcases import LiveServerThread
16+
from django.test.utils import modify_settings
1517

1618
connections_override = {}
1719
for conn in connections.all():
@@ -32,9 +34,19 @@ def __init__(self, addr):
3234
from django.test.testcases import _StaticFilesHandler
3335
liveserver_kwargs['static_handler'] = _StaticFilesHandler
3436

35-
host, possible_ports = parse_addr(addr)
36-
self.thread = LiveServerThread(host, possible_ports,
37-
**liveserver_kwargs)
37+
if django.VERSION < (1, 11):
38+
host, possible_ports = parse_addr(addr)
39+
self.thread = LiveServerThread(host, possible_ports,
40+
**liveserver_kwargs)
41+
else:
42+
host = addr
43+
self.thread = LiveServerThread(host, **liveserver_kwargs)
44+
45+
self._live_server_modified_settings = modify_settings(
46+
ALLOWED_HOSTS={'append': host},
47+
)
48+
self._live_server_modified_settings.enable()
49+
3850
self.thread.daemon = True
3951
self.thread.start()
4052
self.thread.is_ready.wait()
@@ -48,6 +60,7 @@ def stop(self):
4860
terminate = getattr(self.thread, 'terminate', lambda: None)
4961
terminate()
5062
self.thread.join()
63+
self._live_server_modified_settings.disable()
5164

5265
@property
5366
def url(self):

tests/test_fixtures.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,20 @@ def test_serve_static_dj17_without_staticfiles_app(self, live_server,
187187
with pytest.raises(HTTPError):
188188
urlopen(live_server + '/static/a_file.txt').read()
189189

190+
@pytest.mark.skipif(get_django_version() < (1, 11),
191+
reason='Django >= 1.11 required')
192+
def test_specified_port_error_message_django_111(self, django_testdir):
193+
django_testdir.create_test_module("""
194+
def test_with_live_server(live_server):
195+
pass
196+
""")
197+
198+
result = django_testdir.runpytest_subprocess('--liveserver=localhost:1234')
199+
result.stdout.fnmatch_lines([
200+
'*Specifying a live server port is not supported in Django 1.11. This '
201+
'will be an error in a future pytest-django release.*'
202+
])
203+
190204

191205
@pytest.mark.django_project(extra_settings="""
192206
AUTH_USER_MODEL = 'app.MyCustomUser'

0 commit comments

Comments
 (0)