From c5a63c953a0f9e068a2563a9c5ab11045eaf4c1e Mon Sep 17 00:00:00 2001 From: Alexis Metaireau Date: Fri, 17 Jun 2011 23:37:08 +0200 Subject: [PATCH] Remove the dependency to pkgutil for the plugins --- pelican/__init__.py | 29 +++++++------------ pelican/generators.py | 4 +-- pelican/plugins/__init__.py | 0 .../plugins}/global_license.py | 6 ++-- .../plugins}/gravatar.py | 19 ++++++------ .../plugins}/initialized.py | 3 +- 6 files changed, 28 insertions(+), 33 deletions(-) create mode 100644 pelican/plugins/__init__.py rename {plugins_samples => pelican/plugins}/global_license.py (72%) rename {plugins_samples => pelican/plugins}/gravatar.py (60%) rename {plugins_samples => pelican/plugins}/initialized.py (57%) diff --git a/pelican/__init__.py b/pelican/__init__.py index 846e2554..515434cc 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -1,7 +1,6 @@ import argparse import os import time -import pkgutil from blinker import signal @@ -46,15 +45,18 @@ class Pelican(object): else: raise Exception("Impossible to find the theme %s" % theme) - plugins_path = plugins_path or settings['PLUGINS_PATH'] - if plugins_path: - plugins_path = os.path.abspath(os.path.expanduser(plugins_path)) - self.load_plugins(plugins_path) - else: - self.plugins = None - + self.init_plugins() signal('pelican_initialized').send(self) + def init_plugins(self): + self.plugins = self.settings['PLUGINS'] + for plugin in self.plugins: + # if it's a string, then import it + if isinstance(plugin, str): + plugin = __import__(plugin, globals(), locals(), 'module') + + plugin.register() + def run(self): """Run the generators and return""" @@ -97,13 +99,6 @@ class Pelican(object): def get_writer(self): return Writer(self.output_path, settings=self.settings) - def load_plugins(self, path): - loaded = [] - for module_loader, name, ispkg in pkgutil.walk_packages(path=[path,]): - loaded.append(module_loader.find_module(name).load_module(name)) - self.plugins = loaded - - def main(): @@ -136,8 +131,6 @@ def main(): parser.add_argument('-r', '--autoreload', dest='autoreload', action='store_true', help="Relaunch pelican each time a modification occurs on the content" "files") - parser.add_argument('-p', '--plugins', default=None, dest='plugins_path', - help='the path of plugins to use') args = parser.parse_args() log.init(args.verbosity) @@ -155,7 +148,7 @@ def main(): try: pelican = cls(settings, args.path, args.theme, args.output, markup, - args.delete_outputdir, args.plugins_path) + args.delete_outputdir) if args.autoreload: while True: try: diff --git a/pelican/generators.py b/pelican/generators.py index b6619d0e..eb74aff9 100755 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -13,7 +13,7 @@ from blinker import signal from jinja2 import Environment, FileSystemLoader from jinja2.exceptions import TemplateNotFound -from pelican.utils import copytree, get_relative_path, process_translations, open +from pelican.utils import copy, get_relative_path, process_translations, open from pelican.contents import Article, Page, is_valid_content from pelican.readers import read_file from pelican.log import * @@ -214,7 +214,7 @@ class ArticlesGenerator(Generator): and self.settings['FALLBACK_ON_FS_DATE']: metadata['date'] = datetime.fromtimestamp(os.stat(f).st_ctime) - self.signal['pelican_article_generate_context'].send(self, metadatas=metadatas) + self.signal['pelican_article_generate_context'].send(self, metadata=metadata) article = Article(content, metadata, settings=self.settings, filename=f) if not is_valid_content(article, f): diff --git a/pelican/plugins/__init__.py b/pelican/plugins/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/plugins_samples/global_license.py b/pelican/plugins/global_license.py similarity index 72% rename from plugins_samples/global_license.py rename to pelican/plugins/global_license.py index eeb20965..b6913831 100644 --- a/plugins_samples/global_license.py +++ b/pelican/plugins/global_license.py @@ -14,10 +14,10 @@ Add LICENSE to your settings file to define default license. """ -def add_license(generator, metadatas): - if 'license' not in metadatas.keys()\ +def add_license(generator, metadata): + if 'license' not in metadata.keys()\ and 'LICENSE' in generator.settings.keys(): - metadatas['license'] = generator.settings['LICENSE'] + metadata['license'] = generator.settings['LICENSE'] signal('pelican_article_generate_context').connect(add_license) diff --git a/plugins_samples/gravatar.py b/pelican/plugins/gravatar.py similarity index 60% rename from plugins_samples/gravatar.py rename to pelican/plugins/gravatar.py index 9887e97e..2601ada0 100644 --- a/plugins_samples/gravatar.py +++ b/pelican/plugins/gravatar.py @@ -13,7 +13,7 @@ Settings: Add AUTHOR_EMAIL to your settings file to define default author email -Article metadatas: +Article metadata: ------------------ :email: article's author email @@ -22,18 +22,19 @@ If one of them are defined the author_gravatar variable is added to article's context. """ -def add_gravatar(generator, metadatas): +def add_gravatar(generator, metadata): #first check email - if 'email' not in metadatas.keys()\ + if 'email' not in metadata.keys()\ and 'AUTHOR_EMAIL' in generator.settings.keys(): - metadatas['email'] = generator.settings['AUTHOR_EMAIL'] + metadata['email'] = generator.settings['AUTHOR_EMAIL'] #then add gravatar url - if 'email' in metadatas.keys(): + if 'email' in metadata.keys(): gravatar_url = "http://www.gravatar.com/avatar/" + \ - hashlib.md5(metadatas['email'].lower()).hexdigest() - metadatas["author_gravatar"] = gravatar_url + hashlib.md5(metadata['email'].lower()).hexdigest() + metadata["author_gravatar"] = gravatar_url - -signal('pelican_article_generate_context').connect(add_gravatar) + +def register(): + signal('pelican_article_generate_context').connect(add_gravatar) diff --git a/plugins_samples/initialized.py b/pelican/plugins/initialized.py similarity index 57% rename from plugins_samples/initialized.py rename to pelican/plugins/initialized.py index f104c275..076ba06d 100644 --- a/plugins_samples/initialized.py +++ b/pelican/plugins/initialized.py @@ -4,4 +4,5 @@ from blinker import signal def test(sender): print "%s initialized !!" % sender -signal('pelican_initialized').connect(test) +def register(): + signal('pelican_initialized').connect(test)