Skip to content

Commit

Permalink
Revert "Force string url before passing to urlparse (#6341)"
Browse files Browse the repository at this point in the history
This reverts commit 8a4b042.
This reverts commit c005e6f.
  • Loading branch information
kaedroho committed Sep 29, 2020
1 parent c005e6f commit 8605717
Show file tree
Hide file tree
Showing 4 changed files with 2 additions and 97 deletions.
1 change: 0 additions & 1 deletion CHANGELOG.txt
Expand Up @@ -20,7 +20,6 @@ Changelog
* Make document `content-type` and `content-disposition` configurable via `WAGTAILDOCS_CONTENT_TYPES` and `WAGTAILDOCS_INLINE_CONTENT_TYPES` (Matt Westcott)
* Slug generation no longer removes stopwords (Andy Chosak, Scott Cranfill)
* Add check to disallow StreamField block names that do not match Python variable syntax (François Poulain)
* The `BASE_URL` setting is now converted to a str, if it isn't already, when constructing API URLs (thenewguy)
* Fix: Make page-level actions accessible to keyboard users in page listing tables (Jesse Menn)
* Fix: `WAGTAILFRONTENDCACHE_LANGUAGES` was being interpreted incorrectly. It now accepts a list of strings, as documented (Karl Hobley)
* Fix: Update oEmbed endpoints to use https where available (Matt Westcott)
Expand Down
1 change: 0 additions & 1 deletion docs/releases/2.11.rst
Expand Up @@ -29,7 +29,6 @@ Other features
* Make document ``content-type`` and ``content-disposition`` configurable via ``WAGTAILDOCS_CONTENT_TYPES`` and ``WAGTAILDOCS_INLINE_CONTENT_TYPES`` (Matt Westcott)
* Slug generation no longer removes stopwords (Andy Chosak, Scott Cranfill)
* Add check to disallow StreamField block names that do not match Python variable syntax (François Poulain)
* The ``BASE_URL`` setting is now converted to a str, if it isn't already, when constructing API URLs (thenewguy)


Bug fixes
Expand Down
94 changes: 1 addition & 93 deletions wagtail/api/v2/tests/tests.py
@@ -1,98 +1,6 @@
from unittest import TestCase

from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.test import RequestFactory, override_settings
from django.utils.encoding import force_bytes

from wagtail.core.models import Page, Site
from ..utils import FieldsParameterParseError, get_base_url, parse_boolean, parse_fields_parameter


class DynamicBaseUrl(object):
def __str__(self):
return 'https://www.example.com'

def __bytes__(self):
return force_bytes(self.__str__())

def decode(self, *args, **kwargs):
return self.__bytes__().decode(*args, **kwargs)


class TestGetBaseUrl(TestCase):
def prepare_site(self):
page_content_type = ContentType.objects.get_or_create(
model='page',
app_label='wagtailcore'
)[0]
root_page = Page.objects.get_or_create(
title="Root",
slug='root',
content_type=page_content_type,
path='0001',
depth=1,
numchild=1,
url_path='/',
)[0]
site = Site.objects.get_or_create(
hostname='other.example.com',
port=8080,
root_page=root_page,
is_default_site=True,
)[0]
return site

def clear_cached_site(self, request):
del request._wagtail_site

def test_get_base_url_unset(self):
self.assertIsNone(get_base_url())

def test_get_base_url_from_request(self):
# base url for siteless request should be None
request = RequestFactory().get('/')
self.assertIsNone(Site.find_for_request(request))
self.assertIsNone(get_base_url(request))

# base url for request with a site should be based on the site's details
site = self.prepare_site()
self.clear_cached_site(request)
self.assertEqual(site, Site.find_for_request(request))
self.assertEqual(get_base_url(request), 'http://other.example.com:8080')

# port 443 should indicate https without a port
site.port = 443
site.save()
self.clear_cached_site(request)
self.assertEqual(get_base_url(request), 'https://other.example.com')

# port 80 should indicate http without a port
site.port = 80
site.save()
self.clear_cached_site(request)
self.assertEqual(get_base_url(request), 'http://other.example.com')

@override_settings(WAGTAILAPI_BASE_URL='https://bar.example.com')
def test_get_base_url_prefers_setting(self):
request = RequestFactory().get('/')
site = self.prepare_site()
self.assertEqual(site, Site.find_for_request(request))
self.assertEqual(get_base_url(request), 'https://bar.example.com')
del settings.WAGTAILAPI_BASE_URL
self.assertEqual(get_base_url(request), 'http://other.example.com:8080')

@override_settings(WAGTAILAPI_BASE_URL='https://bar.example.com')
def test_get_base_url_from_setting_string(self):
self.assertEqual(get_base_url(), 'https://bar.example.com')

@override_settings(WAGTAILAPI_BASE_URL=b'https://baz.example.com')
def test_get_base_url_from_setting_bytes(self):
self.assertEqual(get_base_url(), 'https://baz.example.com')

@override_settings(WAGTAILAPI_BASE_URL=DynamicBaseUrl())
def test_get_base_url_from_setting_object(self):
self.assertEqual(get_base_url(), 'https://www.example.com')
from ..utils import FieldsParameterParseError, parse_boolean, parse_fields_parameter


class TestParseFieldsParameter(TestCase):
Expand Down
3 changes: 1 addition & 2 deletions wagtail/api/v2/utils.py
@@ -1,7 +1,6 @@
from urllib.parse import urlparse

from django.conf import settings
from django.utils.encoding import force_str

from wagtail.core.models import Page, Site
from wagtail.core.utils import resolve_model_string
Expand All @@ -24,7 +23,7 @@ def get_base_url(request=None):

if base_url:
# We only want the scheme and netloc
base_url_parsed = urlparse(force_str(base_url))
base_url_parsed = urlparse(base_url)

return base_url_parsed.scheme + '://' + base_url_parsed.netloc

Expand Down

0 comments on commit 8605717

Please sign in to comment.