Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Have relevant plugins use all_generators_finalized signal #410

Merged
merged 2 commits into from
Jul 13, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 23 additions & 9 deletions clean_summary/clean_summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@

from pelican import signals
from pelican.contents import Content, Article
from pelican.generators import ArticlesGenerator
from bs4 import BeautifulSoup
from six import text_type

def init(pelican):
global maximum_images
global minimum_one
maximum_images = pelican.settings.get('CLEAN_SUMMARY_MAXIMUM', 0)
minimum_one = pelican.settings.get('CLEAN_SUMMARY_MINIMUM_ONE', False)


def clean_summary(instance):
if "CLEAN_SUMMARY_MAXIMUM" in instance.settings:
maximum_images = instance.settings["CLEAN_SUMMARY_MAXIMUM"]
else:
maximum_images = 0
if "CLEAN_SUMMARY_MINIMUM_ONE" in instance.settings:
minimum_one = instance.settings['CLEAN_SUMMARY_MINIMUM_ONE']
else:
minimum_one = False
if type(instance) == Article:
summary = instance.summary
summary = BeautifulSoup(instance.summary, 'html.parser')
Expand All @@ -34,5 +34,19 @@ def clean_summary(instance):
summary.insert(0, first_image)
instance._summary = text_type(summary)


def run_plugin(generators):
for generator in generators:
if isinstance(generator, ArticlesGenerator):
for article in generator.articles:
clean_summary(article)


def register():
signals.content_object_init.connect(clean_summary)
signals.initialized.connect(init)
try:
signals.all_generators_finalized.connect(run_plugin)
except AttributeError:
# NOTE: This may result in #314 so shouldn't really be relied on
# https://github.com/getpelican/pelican-plugins/issues/314
signals.content_object_init.connect(clean_summary)
18 changes: 16 additions & 2 deletions read_more_link/read_more_link.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

from pelican import signals, contents
from pelican.utils import truncate_html_words
from pelican.generators import ArticlesGenerator

try:
from lxml.html import fragment_fromstring, fragments_fromstring, tostring
Expand Down Expand Up @@ -63,9 +64,22 @@ def insert_read_more_link(instance):
else:
summary = truncate_html_words(instance.content, SUMMARY_MAX_LENGTH)

if summary<instance.content:
if summary != instance.content:
read_more_link = READ_MORE_LINK_FORMAT.format(url=instance.url, text=READ_MORE_LINK)
instance._summary = insert_into_last_element(summary, read_more_link)


def run_plugin(generators):
for generator in generators:
if isinstance(generator, ArticlesGenerator):
for article in generator.articles:
insert_read_more_link(article)


def register():
signals.content_object_init.connect(insert_read_more_link)
try:
signals.all_generators_finalized.connect(run_plugin)
except AttributeError:
# NOTE: This may result in #314 so shouldn't really be relied on
# https://github.com/getpelican/pelican-plugins/issues/314
signals.content_object_init.connect(insert_read_more_link)
17 changes: 15 additions & 2 deletions representative_image/representative_image.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pelican import signals
from pelican.contents import Article, Draft, Page
from pelican.generators import ArticlesGenerator
from bs4 import BeautifulSoup


Expand All @@ -23,7 +24,7 @@ def images_extraction(instance):

# If there are no image in summary, look for it in the content body
if not representativeImage:
soup = BeautifulSoup(instance.content, 'html.parser')
soup = BeautifulSoup(instance._content, 'html.parser')
imageTag = soup.find('img')
if imageTag:
representativeImage = imageTag['src']
Expand All @@ -32,5 +33,17 @@ def images_extraction(instance):
instance.featured_image = representativeImage


def run_plugin(generators):
for generator in generators:
if isinstance(generator, ArticlesGenerator):
for article in generator.articles:
images_extraction(article)


def register():
signals.content_object_init.connect(images_extraction)
try:
signals.all_generators_finalized.connect(run_plugin)
except AttributeError:
# NOTE: This results in #314 so shouldn't really be relied on
# https://github.com/getpelican/pelican-plugins/issues/314
signals.content_object_init.connect(images_extraction)
5 changes: 0 additions & 5 deletions share_post/share_post.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,11 @@ def article_url(content):
return quote(('%s/%s' % (site_url, content.url)).encode('utf-8'))


def article_summary(content):
return quote(BeautifulSoup(content.summary, 'html.parser').get_text().strip().encode('utf-8'))


def share_post(content):
if isinstance(content, contents.Static):
return
title = article_title(content)
url = article_url(content)
summary = article_summary(content)

tweet = ('%s%s%s' % (title, quote(' '), url)).encode('utf-8')
diaspora_link = 'https://sharetodiaspora.github.io/?title=%s&url=%s' % (title, url)
Expand Down
22 changes: 19 additions & 3 deletions summary/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

from __future__ import unicode_literals
from pelican import signals
from pelican.generators import ArticlesGenerator, StaticGenerator

def initialized(pelican):
from pelican.settings import DEFAULT_CONFIG
Expand All @@ -21,7 +22,7 @@ def initialized(pelican):
pelican.settings.setdefault('SUMMARY_END_MARKER',
'<!-- PELICAN_END_SUMMARY -->')

def content_object_init(instance):
def extract_summary(instance):
# if summary is already specified, use it
# if there is no content, there's nothing to do
if hasattr(instance, '_summary'):
Expand All @@ -35,7 +36,6 @@ def content_object_init(instance):
begin_marker = instance.settings['SUMMARY_BEGIN_MARKER']
end_marker = instance.settings['SUMMARY_END_MARKER']

# extract out our summary
content = instance._content
begin_summary = -1
end_summary = -1
Expand Down Expand Up @@ -69,6 +69,22 @@ def content_object_init(instance):
instance._summary = summary
instance.has_summary = True


def run_plugin(generators):
for generator in generators:
if isinstance(generator, ArticlesGenerator):
for article in generator.articles:
extract_summary(article)
elif isinstance(generator, PagesGenerator):
for page in generator.pages:
extract_summary(page)


def register():
signals.initialized.connect(initialized)
signals.content_object_init.connect(content_object_init)
try:
signals.all_generators_finalized.connect(run_plugin)
except AttributeError:
# NOTE: This results in #314 so shouldn't really be relied on
# https://github.com/getpelican/pelican-plugins/issues/314
signals.content_object_init.connect(extract_summary)