Skip to content

Commit

Permalink
autoload modules with config registrations
Browse files Browse the repository at this point in the history
  • Loading branch information
fafhrd91 committed Oct 11, 2011
1 parent c05bbac commit daef095
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 8 deletions.
18 changes: 10 additions & 8 deletions memphis/config/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from zope.interface.interface import adapter_hooks
from zope.interface.interfaces import IObjectEvent

mods = set()


class StopException(Exception):
""" Special initialization exception means stop execution """
Expand Down Expand Up @@ -36,23 +38,22 @@ def initialize(packages=None, excludes=(), reg=None):
sys.modules['memphis.config'].registry = reg
sys.modules['memphis.config.api'].registry = reg

def exclude_filter(modname):
if modname in packages:
return True
return exclude(modname, excludes)

# list all packages
if packages is None:
packages = loadPackages(excludes=excludes)
packages.extend([mod for mod in mods if exclude_filter(mod)])
else:
packages = loadPackages(packages, excludes=excludes)

packages.append('__main__')

# scan packages and load all actions
seen = set()
actions = []

def exclude_filter(modname):
if modname in packages:
return True
return exclude(modname, excludes)

for pkg in packages:
actions.extend(directives.scan(pkg, seen, exclude_filter))

Expand Down Expand Up @@ -87,7 +88,6 @@ def loadPackage(name, seen, first=True):

try:
dist = pkg_resources.get_distribution(name)

for req in dist.requires():
pkg = req.project_name
if pkg in seen:
Expand Down Expand Up @@ -156,6 +156,8 @@ def addCleanup(handler):


def cleanUp(*modIds):
mods.clear()

for h in _cleanups:
h()

Expand Down
2 changes: 2 additions & 0 deletions memphis/config/directives.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ def __init__(self, depth=1, moduleLevel = False, allowed_scope=None):
self.module = module
self.codeinfo = codeinfo

api.mods.add(self.module.__name__)

@property
def context(self):
if self.scope == 'module':
Expand Down
30 changes: 30 additions & 0 deletions memphis/config/tests/test_directives.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,3 +415,33 @@ def test_api_loadpackage(self):

packages = api.loadPackage('memphis.config', seen)
self.assertEqual(packages, [])


class BadicTesting(unittest.TestCase):

def test_exclude_test(self):
from memphis.config import api

self.assertFalse(api.exclude('blah.test'))
self.assertFalse(api.exclude('blah.ftest'))
self.assertFalse(api.exclude('blah.subpkg', ('blah.',)))
self.assertTrue(api.exclude('blah.subpkg'))

def test_loadpackages(self):
from memphis.config import api

self.assertEqual(
api.loadPackages(('memphis',), excludes=('memphis',)), [])

self.assertEqual(api.loadPackages(), ['memphis'])
self.assertEqual(api.loadPackages(excludes=('memphis',)), [])

def test_stop_exc(self):
from memphis.config import api

err = ValueError('test')

exc = api.StopException(err)
self.assertIs(exc.exc, err)
self.assertEqual(str(exc), 'test')

0 comments on commit daef095

Please sign in to comment.