replace get_summary with _get_summary

When memoizing summary a dummy get_summary function was introduced to
properly work. This has multiple problems:
* The siteurl argument is actually not used in the function, it is only
  used so it properly memoizes.
* It differs from how content is accessed and memoized.

This commit brings summary inline with how content is accessed and
processed. It also removes the old get_summary function with the unused
siteurl argument.

Additionally _get_summary is marked as deprecated and calls .summary
instead while also issueing a warning.
This commit is contained in:
derwinlu 2015-10-19 16:38:07 +02:00
commit 2cb2bf05df
2 changed files with 36 additions and 12 deletions

View file

@ -273,6 +273,9 @@ class Content(object):
return hrefs.sub(replacer, content) return hrefs.sub(replacer, content)
def get_siteurl(self):
return self._context.get('localsiteurl', '')
@memoized @memoized
def get_content(self, siteurl): def get_content(self, siteurl):
if hasattr(self, '_get_content'): if hasattr(self, '_get_content'):
@ -281,22 +284,19 @@ class Content(object):
content = self._content content = self._content
return self._update_content(content, siteurl) return self._update_content(content, siteurl)
def get_siteurl(self):
return self._context.get('localsiteurl', '')
@property @property
def content(self): def content(self):
return self.get_content(self.get_siteurl()) return self.get_content(self.get_siteurl())
def _get_summary(self): @memoized
def get_summary(self, siteurl):
"""Returns the summary of an article. """Returns the summary of an article.
This is based on the summary metadata if set, otherwise truncate the This is based on the summary metadata if set, otherwise truncate the
content. content.
""" """
if hasattr(self, '_summary'): if hasattr(self, '_summary'):
return self._update_content(self._summary, return self._update_content(self._summary, siteurl)
self.get_siteurl())
if self.settings['SUMMARY_MAX_LENGTH'] is None: if self.settings['SUMMARY_MAX_LENGTH'] is None:
return self.content return self.content
@ -304,15 +304,17 @@ class Content(object):
return truncate_html_words(self.content, return truncate_html_words(self.content,
self.settings['SUMMARY_MAX_LENGTH']) self.settings['SUMMARY_MAX_LENGTH'])
@memoized
def get_summary(self, siteurl):
"""uses siteurl to be memoizable"""
return self._get_summary()
@property @property
def summary(self): def summary(self):
return self.get_summary(self.get_siteurl()) 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 @summary.setter
def summary(self, value): def summary(self, value):
"""Dummy function""" """Dummy function"""

View file

@ -23,7 +23,7 @@ TEST_CONTENT = str(generate_lorem_ipsum(n=1))
TEST_SUMMARY = generate_lorem_ipsum(n=1, html=False) TEST_SUMMARY = generate_lorem_ipsum(n=1, html=False)
class TestPage(unittest.TestCase): class TestPage(LoggedTestCase):
def setUp(self): def setUp(self):
super(TestPage, self).setUp() super(TestPage, self).setUp()
@ -41,9 +41,19 @@ class TestPage(unittest.TestCase):
}, },
'source_path': '/path/to/file/foo.ext' 'source_path': '/path/to/file/foo.ext'
} }
self._disable_limit_filter()
def tearDown(self): def tearDown(self):
locale.setlocale(locale.LC_ALL, self.old_locale) 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): def test_use_args(self):
# Creating a page with arguments passed to the constructor should use # Creating a page with arguments passed to the constructor should use
@ -87,6 +97,18 @@ class TestPage(unittest.TestCase):
page = Page(**page_kwargs) page = Page(**page_kwargs)
self.assertEqual(page.summary, '') 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): def test_slug(self):
page_kwargs = self._copy_page_kwargs() page_kwargs = self._copy_page_kwargs()
settings = get_settings() settings = get_settings()