diff --git a/readthedocs/proxito/middleware.py b/readthedocs/proxito/middleware.py index 50cf96e4ac2..c8394354730 100644 --- a/readthedocs/proxito/middleware.py +++ b/readthedocs/proxito/middleware.py @@ -10,6 +10,7 @@ from django.conf import settings from django.shortcuts import render +from django.urls.base import set_urlconf from django.utils.deprecation import MiddlewareMixin from readthedocs.projects.models import Domain, Project @@ -199,6 +200,10 @@ def process_response(self, request, response): # noqa * For custom domains, check the HSTS values on the Domain object. The domain object should be saved already in request.domain. """ + # Reset URLconf for this thread + # to the original one. + set_urlconf(None) + host = request.get_host().lower().split(':')[0] public_domain = settings.PUBLIC_DOMAIN.lower().split(':')[0] diff --git a/readthedocs/proxito/tests/test_middleware.py b/readthedocs/proxito/tests/test_middleware.py index 2294563c6e1..a589d693abe 100644 --- a/readthedocs/proxito/tests/test_middleware.py +++ b/readthedocs/proxito/tests/test_middleware.py @@ -3,11 +3,13 @@ import sys import pytest -from django.urls.base import set_urlconf, get_urlconf from django.test import TestCase from django.test.utils import override_settings +from django.urls.base import get_urlconf, set_urlconf from django_dynamic_fixture import get +from readthedocs.builds.models import Version +from readthedocs.projects.constants import PUBLIC from readthedocs.projects.models import Domain, Project, ProjectRelationship from readthedocs.proxito.middleware import ProxitoMiddleware from readthedocs.rtd_tests.base import RequestFactoryTestMixin @@ -159,16 +161,23 @@ def setUp(self): Project, slug='pip', users=[self.owner], - privacy_level='public', + privacy_level=PUBLIC, urlconf='subpath/to/$version/$language/$filename' # Flipped ) + self.testing_version = get( + Version, + slug='testing', + project=self.pip, + built=True, + active=True, + ) + self.pip.versions.update(privacy_level=PUBLIC) - self.old_urlconf = get_urlconf() sys.modules['fake_urlconf'] = self.pip.proxito_urlconf set_urlconf('fake_urlconf') def tearDown(self): - set_urlconf(self.old_urlconf) + set_urlconf(None) def test_proxied_api_methods(self): # This is mostly a unit test, but useful to make sure the below tests work @@ -221,29 +230,38 @@ def setUp(self): name='pip', slug='pip', users=[self.owner], - privacy_level='public', + privacy_level=PUBLIC, urlconf='subpath/$subproject/$version/$language/$filename' # Flipped ) + self.pip.versions.update(privacy_level=PUBLIC) self.subproject = get( Project, name='subproject', slug='subproject', users=[self.owner], - privacy_level='public', + privacy_level=PUBLIC, main_language_project=None, ) + self.testing_version = get( + Version, + slug='testing', + project=self.subproject, + built=True, + active=True, + ) + self.subproject.versions.update(privacy_level=PUBLIC) self.relationship = get( ProjectRelationship, parent=self.pip, child=self.subproject, ) - self.old_urlconf = get_urlconf() sys.modules['fake_urlconf'] = self.pip.proxito_urlconf set_urlconf('fake_urlconf') - # TODO: Figure out why this is failing in travis - @pytest.mark.xfail(strict=True) + def tearDown(self): + set_urlconf(None) + def test_middleware_urlconf_subproject(self): resp = self.client.get('/subpath/subproject/testing/en/foodex.html', HTTP_HOST=self.domain) self.assertEqual(resp.status_code, 200)