Commit 9aeb917d authored by Berker Peksag's avatar Berker Peksag Committed by Tim Graham
Browse files

Fixed #23884 -- Moved FlatPageSitemap into django.contrib.flatpages.

parent aa5ef0d4
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
from django.apps import apps as django_apps
from django.contrib.sitemaps import Sitemap
from django.core.exceptions import ImproperlyConfigured


class FlatPageSitemap(Sitemap):
    def items(self):
        if not django_apps.is_installed('django.contrib.sites'):
            raise ImproperlyConfigured("FlatPageSitemap requires django.contrib.sites, which isn't installed.")
        Site = django_apps.get_model('sites.Site')
        current_site = Site.objects.get_current()
        return current_site.flatpage_set.filter(registration_required=False)
+25 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals

from django.apps import apps
from django.test import TestCase
from django.test.utils import modify_settings, override_settings


@override_settings(
    ROOT_URLCONF='django.contrib.flatpages.tests.urls',
    SITE_ID=1,
)
@modify_settings(INSTALLED_APPS={'append': ['django.contrib.sitemaps']},)
class FlatpagesSitemapTests(TestCase):

    @classmethod
    def setUpTestData(cls):
        Site = apps.get_model('sites.Site')
        current_site = Site.objects.get_current()
        current_site.flatpage_set.create(url="/foo/", title="foo")
        current_site.flatpage_set.create(url="/private-foo/", title="private foo", registration_required=True)

    def test_flatpage_sitemap(self):
        response = self.client.get('/flatpages/sitemap.xml')
        self.assertIn(b'<url><loc>http://example.com/foo/</loc></url>', response.getvalue())
        self.assertNotIn(b'<url><loc>http://example.com/private-foo/</loc></url>', response.getvalue())
+6 −0
Original line number Diff line number Diff line
from django.conf.urls import include, url
from django.contrib.flatpages.sitemaps import FlatPageSitemap
from django.contrib.sitemaps import views

# special urls for flatpage test cases
urlpatterns = [
    url(r'^flatpages/sitemap\.xml$', views.sitemap,
        {'sitemaps': {'flatpages': FlatPageSitemap}},
        name='django.contrib.sitemaps.views.sitemap'),

    url(r'^flatpage_root', include('django.contrib.flatpages.urls')),
    url(r'^accounts/', include('django.contrib.auth.urls')),
]
+15 −0
Original line number Diff line number Diff line
import warnings

from django.apps import apps as django_apps
from django.conf import settings
from django.core import urlresolvers, paginator
from django.core.exceptions import ImproperlyConfigured
from django.utils import translation
from django.utils.deprecation import RemovedInDjango19Warning
from django.utils.six.moves.urllib.parse import urlencode
from django.utils.six.moves.urllib.request import urlopen

@@ -133,6 +136,18 @@ class Sitemap(object):


class FlatPageSitemap(Sitemap):
    # This class is not a subclass of
    # django.contrib.flatpages.sitemaps.FlatPageSitemap to avoid a
    # circular import problem.

    def __init__(self):
        warnings.warn(
            "'django.contrib.sitemaps.FlatPageSitemap' is deprecated. "
            "Use 'django.contrib.flatpages.sitemaps.FlatPageSitemap' instead.",
            RemovedInDjango19Warning,
            stacklevel=2
        )

    def items(self):
        if not django_apps.is_installed('django.contrib.sites'):
            raise ImproperlyConfigured("FlatPageSitemap requires django.contrib.sites, which isn't installed.")
+18 −0
Original line number Diff line number Diff line
from __future__ import unicode_literals

from unittest import skipUnless
import warnings

from django.apps import apps
from django.conf import settings
from django.contrib.sitemaps import FlatPageSitemap
from django.test import SimpleTestCase

from .base import SitemapTestsBase

@@ -40,3 +43,18 @@ class FlatpagesSitemapTests(SitemapTestsBase):
        self.assertContains(response, '<loc>%s%s</loc>' % (self.base_url, public.url))
        # Private flatpage should not be in the sitemap
        self.assertNotContains(response, '<loc>%s%s</loc>' % (self.base_url, private.url))


class FlatpagesSitemapDeprecationTests(SimpleTestCase):

    def test_deprecation(self):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter('always')
            FlatPageSitemap()

        self.assertEqual(len(warns), 1)
        self.assertEqual(
            str(warns[0].message),
            "'django.contrib.sitemaps.FlatPageSitemap' is deprecated. "
            "Use 'django.contrib.flatpages.sitemaps.FlatPageSitemap' instead.",
        )
Loading