From c6c0ee76c2d47017a56ef8442d8616e2dd2fb9d7 Mon Sep 17 00:00:00 2001 From: Marco Milanesi Date: Tue, 6 Sep 2011 18:54:41 +0200 Subject: [PATCH] implemented github activity plugin --- pelican/plugins/github_activity.py | 27 +++++++++++++++++++++++++++ pelican/signals.py | 1 + pelican/utils.py | 12 ++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 pelican/plugins/github_activity.py diff --git a/pelican/plugins/github_activity.py b/pelican/plugins/github_activity.py new file mode 100644 index 00000000..d279e616 --- /dev/null +++ b/pelican/plugins/github_activity.py @@ -0,0 +1,27 @@ +from pelican import signals +from pelican.utils import singleton + +@singleton +class GitHubActivity(): + def __init__(self, generator): + try: + import feedparser + self.ga = feedparser.parse( + generator.settings['GITHUB_ACTIVITY_FEED']) + except ImportError: + raise Exception("unable to find feedparser") + + def fetch(self): + return [activity['content'][0]['value'].strip() + for activity in self.ga['entries']] + +def add_github_activity(generator, metadata): + if 'GITHUB_ACTIVITY_FEED' in generator.settings.keys(): + + ga = GitHubActivity(generator) + + ga_html_snippets = ga.fetch() + generator.context['github_activity'] = ga_html_snippets + +def register(): + signals.article_generate_context.connect(add_github_activity) diff --git a/pelican/signals.py b/pelican/signals.py index f2bf4547..fb50252f 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') +github_activity = signal('github_activity') diff --git a/pelican/utils.py b/pelican/utils.py index 8e48c2e9..a67836ca 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -222,3 +222,15 @@ 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