diff --git a/pelicanext/disqus_static/README.rst b/pelicanext/disqus_static/README.rst
new file mode 100644
index 0000000..fac6c8d
--- /dev/null
+++ b/pelicanext/disqus_static/README.rst
@@ -0,0 +1,61 @@
+Disqus static comment plugin for Pelican
+====================================
+
+This plugin adds a disqus_comments property to all articles.
+Comments are fetched at generation time using disqus API.
+
+Installation
+------------
+Because we use disqus API to retrieve the comments you need to create an application at
+http://disqus.com/api/applications/ which will provide you with a secret and public keys for the API.
+
+Put ``disqus_static.py`` plugin in ``plugins`` folder in pelican installation
+and use the following in your settings::
+
+ PLUGINS = [u"pelican.plugins.disqus_static"]
+
+ DISQUS_SITENAME = u'YOUR_SITENAME'
+ DISQUS_SECRET_KEY = u'YOUR_SECRET_KEY'
+ DISQUS_PUBLIC_KEY = u'YOUR_PUBLIC_KEY'
+
+Usage
+-----
+
+Example use of the comments in templates:
+.. code-block:: html+jinja
+
+ {% if article.disqus_comments %}
+
+ {% endif %}
+
+TODO
+-----
+
+ - handle replies to comments properly and maintain parent-child relationships
+ - test for sites with over 100 comments (I think disqus API only returns 100 items per request)
diff --git a/pelicanext/disqus_static/disqus_static.py b/pelicanext/disqus_static/disqus_static.py
new file mode 100644
index 0000000..78b56e5
--- /dev/null
+++ b/pelicanext/disqus_static/disqus_static.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+"""
+Disqus static comment plugin for Pelican
+====================================
+This plugin adds a disqus_comments property to all articles.
+Comments are fetched at generation time using disqus API.
+"""
+
+from disqusapi import DisqusAPI
+from pelican import signals
+
+def initialized(pelican):
+ from pelican.settings import _DEFAULT_CONFIG
+ _DEFAULT_CONFIG.setdefault('DISQUS_SECRET_KEY', '')
+ _DEFAULT_CONFIG.setdefault('DISQUS_PUBLIC_KEY', '')
+ if pelican:
+ pelican.settings.setdefault('DISQUS_SECRET_KEY', '')
+ pelican.settings.setdefault('DISQUS_PUBLIC_KEY', '')
+
+def disqus_static(generator):
+ disqus = DisqusAPI(generator.settings['DISQUS_SECRET_KEY'],
+ generator.settings['DISQUS_PUBLIC_KEY'])
+ threads = disqus.threads.list(forum=generator.settings['DISQUS_SITENAME'])
+ thread_dict = {} # disqus thread id => title
+ for thread in threads:
+ thread_dict[thread['id']] = thread['title']
+ posts = disqus.posts.list(forum=generator.settings['DISQUS_SITENAME'])
+ post_dict = {} # title => [post1, post2, ...]
+ for post in posts:
+ if post['thread'] not in thread_dict.keys():
+ continue
+ if thread_dict[post['thread']] not in post_dict.keys():
+ post_dict[thread_dict[post['thread']]] = []
+ post_dict[thread_dict[post['thread']]].append(post)
+ for article in generator.articles:
+ if article.title in post_dict:
+ article.disqus_comments = post_dict[article.title]
+
+def register():
+ signals.initialized.connect(initialized)
+ signals.article_generator_finalized.connect(disqus_static)