# HG changeset patch # User Jeff Hammel # Date 1306547760 25200 # Node ID 0bea5297c15692131d917daba6ad029cbaa8cbd1 # Parent 30979d82c95d4a613d74bd2ee2f0ec831087256e introduce a more betterer test diff -r 30979d82c95d -r 0bea5297c156 pyloader/factory.py --- a/pyloader/factory.py Fri May 27 18:43:14 2011 -0700 +++ b/pyloader/factory.py Fri May 27 18:56:00 2011 -0700 @@ -3,6 +3,9 @@ """ import loader +import os + +__all__ = ['CircularReferenceError', 'PyFactory', 'IniFactory'] class CircularReferenceError(Exception): """factory has detected a circular reference""" @@ -78,3 +81,10 @@ return self.load(value) return value +class IniFactory(PyFactory): + + def __init__(self, inifile, main=''): + assert os.path.exists(inifile), "File not found: %s" % inifile + + def read(self): + """reads configuration from an .ini file""" diff -r 30979d82c95d -r 0bea5297c156 tests/objects.py --- a/tests/objects.py Fri May 27 18:43:14 2011 -0700 +++ b/tests/objects.py Fri May 27 18:56:00 2011 -0700 @@ -5,6 +5,16 @@ def stringsort(*strings): return ''.join(sorted(''.join(strings))) +class StringMunge(object): + def __init__(self, prefix, delimeter=':', callback=None): + self.delimeter = delimeter + self.prefix = prefix + self.callback = callback + def __call__(self, string): + if self.callback: + string = self.callback(string) + return self.prefix + self.delimeter + string + class Foo(object): def __init__(self, a, b): self.factor = a*100 + b diff -r 30979d82c95d -r 0bea5297c156 tests/test_factory.txt --- a/tests/test_factory.txt Fri May 27 18:43:14 2011 -0700 +++ b/tests/test_factory.txt Fri May 27 18:56:00 2011 -0700 @@ -5,6 +5,7 @@ >>> import os >>> from pyloader.factory import PyFactory + >>> objects = os.path.join(here, 'objects.py') Construct a factory:: @@ -12,7 +13,7 @@ Make a configuration:: - >>> config = {'': {'path': os.path.join(here, 'objects.py:stringsort'), 'args': ['foo', 'bar']}} + >>> config = {'': {'path': objects + ':stringsort', 'args': ['foo', 'bar']}} Load it:: @@ -22,3 +23,12 @@ >>> factory.load() 'abfoor' + +Now lets try something better!:: + + >>> config = {'': {'path': objects + ':StringMunge', 'kwargs': {'prefix': 'PRE', 'callback': '%(callback)s'}}, + ... 'callback': {'path': objects + ':stringsort'} } + >>> factory.configure(config) + >>> obj = factory.load() + >>> obj('foobar') + 'PRE:abfoor'