diff --git a/pelican/contents.py b/pelican/contents.py index 4d313ab8b..4397d424a 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -273,6 +273,9 @@ def replacer(m): return hrefs.sub(replacer, content) + def get_siteurl(self): + return self._context.get('localsiteurl', '') + @memoized def get_content(self, siteurl): if hasattr(self, '_get_content'): @@ -281,22 +284,19 @@ def get_content(self, siteurl): content = self._content return self._update_content(content, siteurl) - def get_siteurl(self): - return self._context.get('localsiteurl', '') - @property def content(self): return self.get_content(self.get_siteurl()) - def _get_summary(self): + @memoized + def get_summary(self, siteurl): """Returns the summary of an article. This is based on the summary metadata if set, otherwise truncate the content. """ if hasattr(self, '_summary'): - return self._update_content(self._summary, - self.get_siteurl()) + return self._update_content(self._summary, siteurl) if self.settings['SUMMARY_MAX_LENGTH'] is None: return self.content @@ -304,15 +304,17 @@ def _get_summary(self): return truncate_html_words(self.content, self.settings['SUMMARY_MAX_LENGTH']) - @memoized - def get_summary(self, siteurl): - """uses siteurl to be memoizable""" - return self._get_summary() - @property def summary(self): return self.get_summary(self.get_siteurl()) + def _get_summary(self): + """deprecated function to access summary""" + + logger.warn('_get_summary() has been deprecated since 3.6.4. ' + 'Use the summary decorator instead') + return self.summary + @summary.setter def summary(self, value): """Dummy function""" diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 59cff8447..1bceeb64b 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -23,7 +23,7 @@ TEST_SUMMARY = generate_lorem_ipsum(n=1, html=False) -class TestPage(unittest.TestCase): +class TestPage(LoggedTestCase): def setUp(self): super(TestPage, self).setUp() @@ -41,9 +41,19 @@ def setUp(self): }, 'source_path': '/path/to/file/foo.ext' } + self._disable_limit_filter() def tearDown(self): locale.setlocale(locale.LC_ALL, self.old_locale) + self._enable_limit_filter() + + def _disable_limit_filter(self): + from pelican.contents import logger + logger.disable_filter() + + def _enable_limit_filter(self): + from pelican.contents import logger + logger.enable_filter() def test_use_args(self): # Creating a page with arguments passed to the constructor should use @@ -87,6 +97,18 @@ def test_summary_max_length(self): page = Page(**page_kwargs) self.assertEqual(page.summary, '') + def test_summary_get_summary_warning(self): + """calling ._get_summary() should issue a warning""" + page_kwargs = self._copy_page_kwargs() + page = Page(**page_kwargs) + self.assertEqual(page.summary, TEST_SUMMARY) + self.assertEqual(page._get_summary(), TEST_SUMMARY) + self.assertLogCountEqual( + count=1, + msg="_get_summary\(\) has been deprecated since 3\.6\.4\. " + "Use the summary decorator instead", + level=logging.WARNING) + def test_slug(self): page_kwargs = self._copy_page_kwargs() settings = get_settings()