diff --git a/pelican/contents.py b/pelican/contents.py index 8a9be817..873e89cd 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -112,7 +112,7 @@ class Page(object): if 'summary' in metadata: self._summary = metadata['summary'] - signals.content_object_init.send(self.__class__, instance=self) + signals.content_object_init.send(self) def check_properties(self): """test that each mandatory property is set.""" diff --git a/pelican/plugins/summary.py b/pelican/plugins/summary.py index cd433b7c..b32d59c5 100644 --- a/pelican/plugins/summary.py +++ b/pelican/plugins/summary.py @@ -14,24 +14,13 @@ def initialized(pelican): pelican.settings.setdefault('SUMMARY_END_MARKER', '') -def content_object_init(PageClass, instance): +def content_object_init(instance): # if summary is already specified, use it if 'summary' in instance.metadata: return - try: - content = instance.content - except: - # in some tests, this fails because a context has not been set - return - - # monkey patch a new function around get_content that removes summary - # markers - prev_get_content = instance.get_content - def get_content(self, siteurl): - content = prev_get_content(siteurl) - self.settings['SUMMARY_BEGIN_MARKER'] = '' - self.settings['SUMMARY_END_MARKER'] = '' + def _get_content(self): + content = self._content if self.settings['SUMMARY_BEGIN_MARKER']: content = content.replace( self.settings['SUMMARY_BEGIN_MARKER'], '', 1) @@ -39,23 +28,25 @@ def content_object_init(PageClass, instance): content = content.replace( self.settings['SUMMARY_END_MARKER'], '', 1) return content - instance.get_content = types.MethodType(get_content, instance) - + instance._get_content = types.MethodType(_get_content, instance) + # extract out our summary - begin_summary = -1 - end_summary = -1 - if instance.settings['SUMMARY_BEGIN_MARKER']: - begin_summary = content.find(instance.settings['SUMMARY_BEGIN_MARKER']) - if instance.settings['SUMMARY_END_MARKER']: - end_summary = content.find(instance.settings['SUMMARY_END_MARKER']) - if begin_summary != -1 or end_summary != -1: - # the beginning position has to take into account the length - # of the marker - begin_summary = (begin_summary + - len(instance.settings['SUMMARY_BEGIN_MARKER']) - if begin_summary != -1 else 0) - end_summary = end_summary if end_summary != -1 else None - instance._summary = content[begin_summary:end_summary] + if not hasattr(instance, '_summary'): + content = instance._content + begin_summary = -1 + end_summary = -1 + if instance.settings['SUMMARY_BEGIN_MARKER']: + begin_summary = content.find(instance.settings['SUMMARY_BEGIN_MARKER']) + if instance.settings['SUMMARY_END_MARKER']: + end_summary = content.find(instance.settings['SUMMARY_END_MARKER']) + if begin_summary != -1 or end_summary != -1: + # the beginning position has to take into account the length + # of the marker + begin_summary = (begin_summary + + len(instance.settings['SUMMARY_BEGIN_MARKER']) + if begin_summary != -1 else 0) + end_summary = end_summary if end_summary != -1 else None + instance._summary = content[begin_summary:end_summary] def register(): signals.initialized.connect(initialized)