summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanyam Khurana <sanyam.khurana01@gmail.com>2019-01-10 15:30:00 +0530
committerTim Graham <timograham@gmail.com>2019-01-11 10:32:22 -0500
commit76d31be2d04dd6e6bcb5cb39a29ea9ed3938d0f9 (patch)
tree696b5d2c59b40be4d9f4072967650bb33ed725ff
parent6d73278d38e65b5785ce67f21c7ef6d7082aec0a (diff)
Refs #23829 -- Made ping_google command/function use https for the sitemap URL.
-rw-r--r--django/contrib/sitemaps/__init__.py9
-rw-r--r--django/contrib/sitemaps/management/commands/ping_google.py6
-rw-r--r--docs/ref/contrib/sitemaps.txt16
-rw-r--r--docs/releases/2.2.txt6
-rw-r--r--tests/sitemaps_tests/test_management.py8
-rw-r--r--tests/sitemaps_tests/test_utils.py14
6 files changed, 45 insertions, 14 deletions
diff --git a/django/contrib/sitemaps/__init__.py b/django/contrib/sitemaps/__init__.py
index cdf5f1b7a8..05a1b654dc 100644
--- a/django/contrib/sitemaps/__init__.py
+++ b/django/contrib/sitemaps/__init__.py
@@ -15,19 +15,19 @@ class SitemapNotFound(Exception):
pass
-def ping_google(sitemap_url=None, ping_url=PING_URL):
+def ping_google(sitemap_url=None, ping_url=PING_URL, sitemap_uses_https=True):
"""
Alert Google that the sitemap for the current site has been updated.
If sitemap_url is provided, it should be an absolute path to the sitemap
for this site -- e.g., '/sitemap.xml'. If sitemap_url is not provided, this
function will attempt to deduce it by using urls.reverse().
"""
- sitemap_full_url = _get_sitemap_full_url(sitemap_url)
+ sitemap_full_url = _get_sitemap_full_url(sitemap_url, sitemap_uses_https)
params = urlencode({'sitemap': sitemap_full_url})
urlopen('%s?%s' % (ping_url, params))
-def _get_sitemap_full_url(sitemap_url):
+def _get_sitemap_full_url(sitemap_url, sitemap_uses_https=True):
if not django_apps.is_installed('django.contrib.sites'):
raise ImproperlyConfigured("ping_google requires django.contrib.sites, which isn't installed.")
@@ -47,7 +47,8 @@ def _get_sitemap_full_url(sitemap_url):
Site = django_apps.get_model('sites.Site')
current_site = Site.objects.get_current()
- return 'http://%s%s' % (current_site.domain, sitemap_url)
+ scheme = 'https' if sitemap_uses_https else 'http'
+ return '%s://%s%s' % (scheme, current_site.domain, sitemap_url)
class Sitemap:
diff --git a/django/contrib/sitemaps/management/commands/ping_google.py b/django/contrib/sitemaps/management/commands/ping_google.py
index a72d2add60..b2d8f84366 100644
--- a/django/contrib/sitemaps/management/commands/ping_google.py
+++ b/django/contrib/sitemaps/management/commands/ping_google.py
@@ -7,6 +7,10 @@ class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('sitemap_url', nargs='?')
+ parser.add_argument('--sitemap-uses-http', action='store_true')
def handle(self, *args, **options):
- ping_google(sitemap_url=options['sitemap_url'])
+ ping_google(
+ sitemap_url=options['sitemap_url'],
+ sitemap_uses_https=not options['sitemap_uses_http'],
+ )
diff --git a/docs/ref/contrib/sitemaps.txt b/docs/ref/contrib/sitemaps.txt
index 3ba601bc67..166013659d 100644
--- a/docs/ref/contrib/sitemaps.txt
+++ b/docs/ref/contrib/sitemaps.txt
@@ -481,7 +481,7 @@ You may want to "ping" Google when your sitemap changes, to let it know to
reindex your site. The sitemaps framework provides a function to do just
that: :func:`django.contrib.sitemaps.ping_google()`.
-.. function:: ping_google(sitemap_url=None, ping_url=PING_URL)
+.. function:: ping_google(sitemap_url=None, ping_url=PING_URL, sitemap_uses_https=True)
``ping_google`` takes these optional arguments:
@@ -493,10 +493,18 @@ that: :func:`django.contrib.sitemaps.ping_google()`.
* ``ping_url`` - Defaults to Google's Ping Tool:
https://www.google.com/webmasters/tools/ping.
+ * ``sitemap_uses_https`` - Set to ``False`` if your site uses ``http``
+ rather than ``https``.
+
:func:`ping_google` raises the exception
``django.contrib.sitemaps.SitemapNotFound`` if it cannot determine your
sitemap URL.
+ .. versionadded:: 2.2
+
+ The ``sitemap_uses_https`` argument was added. Older versions of
+ Django always use ``http`` for a sitemap's URL.
+
.. admonition:: Register with Google first!
The :func:`ping_google` command only works if you have registered your
@@ -534,3 +542,9 @@ Once the sitemaps application is added to your project, you may also
ping Google using the ``ping_google`` management command::
python manage.py ping_google [/sitemap.xml]
+
+.. django-admin-option:: --sitemap-uses-http
+
+.. versionadded:: 2.2
+
+Use this option if your sitemap uses ``http`` rather than ``https``.
diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt
index 4a529f30da..87a7ef4931 100644
--- a/docs/releases/2.2.txt
+++ b/docs/releases/2.2.txt
@@ -479,6 +479,12 @@ Miscellaneous
passed as a value to encode because ``None`` can't be encoded in GET and POST
data. Either pass an empty string or omit the value.
+* The :djadmin:`ping_google` management command now defaults to ``https``
+ instead of ``http`` for the sitemap's URL. If your site uses http, use the
+ new :option:`ping_google --sitemap-uses-http` option. If you use the
+ :func:`~django.contrib.sitemaps.ping_google` function, set the new
+ ``sitemap_uses_https`` argument to ``False``.
+
.. _deprecated-features-2.2:
Features deprecated in 2.2
diff --git a/tests/sitemaps_tests/test_management.py b/tests/sitemaps_tests/test_management.py
index f0be10224b..f91de8ac4b 100644
--- a/tests/sitemaps_tests/test_management.py
+++ b/tests/sitemaps_tests/test_management.py
@@ -10,8 +10,8 @@ class PingGoogleTests(SitemapTestsBase):
def test_default(self, ping_google_func):
call_command('ping_google')
- ping_google_func.assert_called_with(sitemap_url=None)
+ ping_google_func.assert_called_with(sitemap_url=None, sitemap_uses_https=True)
- def test_arg(self, ping_google_func):
- call_command('ping_google', 'foo.xml')
- ping_google_func.assert_called_with(sitemap_url='foo.xml')
+ def test_args(self, ping_google_func):
+ call_command('ping_google', 'foo.xml', '--sitemap-uses-http')
+ ping_google_func.assert_called_with(sitemap_url='foo.xml', sitemap_uses_https=False)
diff --git a/tests/sitemaps_tests/test_utils.py b/tests/sitemaps_tests/test_utils.py
index 158f1625ce..34f46c45b3 100644
--- a/tests/sitemaps_tests/test_utils.py
+++ b/tests/sitemaps_tests/test_utils.py
@@ -15,16 +15,16 @@ class PingGoogleTests(SitemapTestsBase):
@mock.patch('django.contrib.sitemaps.urlopen')
def test_something(self, urlopen):
ping_google()
- params = urlencode({'sitemap': 'http://example.com/sitemap-without-entries/sitemap.xml'})
+ params = urlencode({'sitemap': 'https://example.com/sitemap-without-entries/sitemap.xml'})
full_url = 'https://www.google.com/webmasters/tools/ping?%s' % params
urlopen.assert_called_with(full_url)
def test_get_sitemap_full_url_global(self):
- self.assertEqual(_get_sitemap_full_url(None), 'http://example.com/sitemap-without-entries/sitemap.xml')
+ self.assertEqual(_get_sitemap_full_url(None), 'https://example.com/sitemap-without-entries/sitemap.xml')
@override_settings(ROOT_URLCONF='sitemaps_tests.urls.index_only')
def test_get_sitemap_full_url_index(self):
- self.assertEqual(_get_sitemap_full_url(None), 'http://example.com/simple/index.xml')
+ self.assertEqual(_get_sitemap_full_url(None), 'https://example.com/simple/index.xml')
@override_settings(ROOT_URLCONF='sitemaps_tests.urls.empty')
def test_get_sitemap_full_url_not_detected(self):
@@ -33,7 +33,13 @@ class PingGoogleTests(SitemapTestsBase):
_get_sitemap_full_url(None)
def test_get_sitemap_full_url_exact_url(self):
- self.assertEqual(_get_sitemap_full_url('/foo.xml'), 'http://example.com/foo.xml')
+ self.assertEqual(_get_sitemap_full_url('/foo.xml'), 'https://example.com/foo.xml')
+
+ def test_get_sitemap_full_url_insecure(self):
+ self.assertEqual(
+ _get_sitemap_full_url('/foo.xml', sitemap_uses_https=False),
+ 'http://example.com/foo.xml'
+ )
@modify_settings(INSTALLED_APPS={'remove': 'django.contrib.sites'})
def test_get_sitemap_full_url_no_sites(self):