Skip to content

Commit

Permalink
Add an extension loader.
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Layman committed Mar 19, 2015
1 parent 97e3b20 commit a916646
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 0 deletions.
1 change: 1 addition & 0 deletions handroll/extensions/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Copyright (c) 2015, Matt Layman
5 changes: 5 additions & 0 deletions handroll/extensions/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Copyright (c) 2015, Matt Layman


class Extension(object):
"""A base extension which hooks handler methods to handroll's signals."""
7 changes: 7 additions & 0 deletions handroll/extensions/blog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Copyright (c) 2015, Matt Layman

from handroll.extensions.base import Extension


class BlogExtension(Extension):
"""Track files marked as blog entries and generate a feed."""
16 changes: 16 additions & 0 deletions handroll/extensions/loader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Copyright (c) 2015, Matt Layman

from pkg_resources import iter_entry_points


class ExtensionLoader(object):
"""A loader for extensions from handroll's extension entry point."""

def __init__(self):
self._available_extensions = {}

def load(self):
"""Load all available extensions from ``handroll.extensions``."""
for entry_point in iter_entry_points('handroll.extensions'):
cls = entry_point.load()
self._available_extensions[entry_point.name] = cls
13 changes: 13 additions & 0 deletions handroll/tests/test_extensions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright (c) 2015, Matt Layman

from handroll.extensions.blog import BlogExtension
from handroll.extensions.loader import ExtensionLoader
from handroll.tests import TestCase


class TestExtensionLoader(TestCase):

def test_loads_available_extensions(self):
loader = ExtensionLoader()
loader.load()
self.assertEqual(BlogExtension, loader._available_extensions['blog'])
3 changes: 3 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ def run(self):
'.sass = handroll.composers.sass:SassComposer',
'.scss = handroll.composers.sass:SassComposer',
'.textile = handroll.composers.txt:TextileComposer',
],
'handroll.extensions': [
'blog = handroll.extensions.blog:BlogExtension',
]
},
include_package_data=True,
Expand Down

0 comments on commit a916646

Please sign in to comment.