From 48d7df72f1a0d9c405cac85b662a70c6c14dc238 Mon Sep 17 00:00:00 2001 From: Marco Milanesi Date: Wed, 7 Sep 2011 17:08:28 +0200 Subject: [PATCH] refactored code and introduced a new signal in ArticlesGenerator __init__ --- pelican/generators.py | 1 + pelican/plugins/github_activity.py | 26 ++++++++++++++++---------- pelican/signals.py | 1 + pelican/utils.py | 12 ------------ 4 files changed, 18 insertions(+), 22 deletions(-) diff --git a/pelican/generators.py b/pelican/generators.py index 38fa9da7..9baf240e 100755 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -101,6 +101,7 @@ class ArticlesGenerator(Generator): self.categories = defaultdict(list) super(ArticlesGenerator, self).__init__(*args, **kwargs) self.drafts = [] + signals.article_generator_init.send(self) def generate_feeds(self, writer): """Generate the feeds from the current context, and output files.""" diff --git a/pelican/plugins/github_activity.py b/pelican/plugins/github_activity.py index bbce2759..ba6cd70f 100644 --- a/pelican/plugins/github_activity.py +++ b/pelican/plugins/github_activity.py @@ -19,10 +19,8 @@ """ from pelican import signals -from pelican.utils import singleton -@singleton class GitHubActivity(): """ A class created to fetch github activity with feedparser @@ -30,7 +28,7 @@ class GitHubActivity(): def __init__(self, generator): try: import feedparser - self.ga = feedparser.parse( + self.activities = feedparser.parse( generator.settings['GITHUB_ACTIVITY_FEED']) except ImportError: raise Exception("unable to find feedparser") @@ -40,23 +38,31 @@ class GitHubActivity(): returns a list of html snippets fetched from github actitivy feed """ return [activity['content'][0]['value'].strip() - for activity in self.ga['entries']] + for activity in self.activities['entries']] -def add_github_activity(generator, metadata): +def fetch_github_activity(gen, metadata): """ registered handler for the github activity plugin + it puts in generator.context the html needed to be displayed on a + template """ - if 'GITHUB_ACTIVITY_FEED' in generator.settings.keys(): - ga = GitHubActivity(generator) + if 'GITHUB_ACTIVITY_FEED' in gen.settings.keys(): + gen.context['github_activity'] = gen.plugin_instance.fetch() - ga_html_snippets = ga.fetch() - generator.context['github_activity'] = ga_html_snippets + +def feed_parser_initialization(generator): + """ + Initialization of feed parser + """ + + generator.plugin_instance = GitHubActivity(generator) def register(): """ Plugin registration """ - signals.article_generate_context.connect(add_github_activity) + signals.article_generator_init.connect(feed_parser_initialization) + signals.article_generate_context.connect(fetch_github_activity) diff --git a/pelican/signals.py b/pelican/signals.py index f2bf4547..b1c35794 100644 --- a/pelican/signals.py +++ b/pelican/signals.py @@ -2,3 +2,4 @@ from blinker import signal initialized = signal('pelican_initialized') article_generate_context = signal('article_generate_context') +article_generator_init = signal('article_generator_init') diff --git a/pelican/utils.py b/pelican/utils.py index a67836ca..8e48c2e9 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -222,15 +222,3 @@ def files_changed(path, extensions): LAST_MTIME = mtime return True return False - -def singleton(cls): - """ - Singleton decorator for multiple calls inside plugins - for an example see pelican/plugins/github_activity.py - """ - instances = {} - def getinstance(*args, **kwargs): - if cls not in instances: - instances[cls] = cls(*args, **kwargs) - return instances[cls] - return getinstance