diff options
| -rw-r--r-- | repoze/bfg/configuration.py | 8 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_configuration.py | 39 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_zcml.py | 74 | ||||
| -rw-r--r-- | repoze/bfg/zcml.py | 25 |
4 files changed, 44 insertions, 102 deletions
diff --git a/repoze/bfg/configuration.py b/repoze/bfg/configuration.py index 6e1185a65..7a761e3d7 100644 --- a/repoze/bfg/configuration.py +++ b/repoze/bfg/configuration.py @@ -537,10 +537,10 @@ class Configurator(object): package = sys.modules[package] override_package = sys.modules[override_package] - if _override is not None: - _override(package, path, override_package, override_prefix) - else: - self._override(package, path, override_package, override_prefix) + if _override is None: + _override = self._override + _override(package, path, override_package, override_prefix, + _info=_info) def _override(self, package, path, override_package, override_prefix, _info=u'', PackageOverrides=PackageOverrides): diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py index 24a6760e2..d7f33534e 100644 --- a/repoze/bfg/tests/test_configuration.py +++ b/repoze/bfg/tests/test_configuration.py @@ -1731,6 +1731,37 @@ class ConfiguratorTests(unittest.TestCase): inner_view, viewname='inner', wrapper_viewname='owrap') result = self.assertRaises(ValueError, wrapped, None, request) + def test_resource_samename(self): + from zope.configuration.exceptions import ConfigurationError + config = self._makeOne() + self.assertRaises(ConfigurationError, config.resource, 'a', 'a') + + def test_resource_override_directory_with_file(self): + from zope.configuration.exceptions import ConfigurationError + config = self._makeOne() + self.assertRaises(ConfigurationError, config.resource, + 'a:foo/', 'a:foo.pt') + + def test_resource_override_file_with_directory(self): + from zope.configuration.exceptions import ConfigurationError + config = self._makeOne() + self.assertRaises(ConfigurationError, config.resource, + 'a:foo.pt', 'a:foo/') + + def test_resource_success(self): + config = self._makeOne() + override = DummyUnderOverride() + config.resource( + 'repoze.bfg.tests.fixtureapp:templates/foo.pt', + 'repoze.bfg.tests.fixtureapp.subpackage:templates/bar.pt', + _override=override) + from repoze.bfg.tests import fixtureapp + from repoze.bfg.tests.fixtureapp import subpackage + self.assertEqual(override.package, fixtureapp) + self.assertEqual(override.path, 'templates/foo.pt') + self.assertEqual(override.override_package, subpackage) + self.assertEqual(override.override_prefix, 'templates/bar.pt') + class TestBFGViewGrokker(unittest.TestCase): def setUp(self): cleanUp() @@ -2257,6 +2288,14 @@ class DummyOverrides: def insert(self, path, package, prefix): self.inserted.append((path, package, prefix)) +class DummyUnderOverride: + def __call__(self, package, path, override_package, override_prefix, + _info=u''): + self.package = package + self.path = path + self.override_package = override_package + self.override_prefix = override_prefix + from zope.interface import Interface class IDummy(Interface): pass diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py index ceb156f27..b1d3cf09d 100644 --- a/repoze/bfg/tests/test_zcml.py +++ b/repoze/bfg/tests/test_zcml.py @@ -488,24 +488,7 @@ class TestResourceDirective(unittest.TestCase): from repoze.bfg.zcml import resource return resource(*arg, **kw) - def test_samename(self): - from zope.configuration.exceptions import ConfigurationError - context = DummyContext() - self.assertRaises(ConfigurationError, self._callFUT, context, 'a', 'a') - - def test_override_directory_with_file(self): - from zope.configuration.exceptions import ConfigurationError - context = DummyContext() - self.assertRaises(ConfigurationError, self._callFUT, context, - 'a:foo/', 'a:foo.pt') - - def test_override_file_with_directory(self): - from zope.configuration.exceptions import ConfigurationError - context = DummyContext() - self.assertRaises(ConfigurationError, self._callFUT, context, - 'a:foo.pt', 'a:foo/') - - def test_no_colons(self): + def test_it(self): from zope.component import getSiteManager from repoze.bfg.configuration import Configurator context = DummyContext() @@ -519,61 +502,6 @@ class TestResourceDirective(unittest.TestCase): self.assertEqual(action['discriminator'], None) self.assertEqual(action['args'], ('a', 'b', None)) - def test_with_colons(self): - from zope.component import getSiteManager - from repoze.bfg.configuration import Configurator - context = DummyContext() - self._callFUT(context, 'a:foo.pt', 'b:foo.pt') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - sm = getSiteManager() - self.assertEqual(action['callable'].im_func, - Configurator.resource.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], ('a:foo.pt', 'b:foo.pt', None)) - - def test_override_module_with_directory(self): - from zope.component import getSiteManager - from repoze.bfg.configuration import Configurator - context = DummyContext() - self._callFUT(context, 'a', 'b:foo/') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - sm = getSiteManager() - self.assertEqual(action['callable'].im_func, - Configurator.resource.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], ('a', 'b:foo/', None)) - - def test_override_directory_with_module(self): - from zope.component import getSiteManager - from repoze.bfg.configuration import Configurator - context = DummyContext() - self._callFUT(context, 'a:foo/', 'b') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - sm = getSiteManager() - self.assertEqual(action['callable'].im_func, - Configurator.resource.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], ('a:foo/', 'b', None)) - - def test_override_module_with_module(self): - from repoze.bfg.configuration import Configurator - from zope.component import getSiteManager - context = DummyContext() - self._callFUT(context, 'a', 'b') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - sm = getSiteManager() - self.assertEqual(action['callable'].im_func, - Configurator.resource.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], ('a', 'b', None)) class TestZCMLConfigure(unittest.TestCase): i = 0 diff --git a/repoze/bfg/zcml.py b/repoze/bfg/zcml.py index 7d6e2a14b..7df36f460 100644 --- a/repoze/bfg/zcml.py +++ b/repoze/bfg/zcml.py @@ -353,31 +353,6 @@ class IResourceDirective(Interface): required=True) def resource(_context, to_override, override_with): - if to_override == override_with: - raise ConfigurationError('You cannot override a resource with itself') - - package = to_override - path = '' - if ':' in to_override: - package, path = to_override.split(':', 1) - - override_package = override_with - override_prefix = '' - if ':' in override_with: - override_package, override_prefix = override_with.split(':', 1) - - if path and path.endswith('/'): - if override_prefix and (not override_prefix.endswith('/')): - raise ConfigurationError( - 'A directory cannot be overridden with a file (put a slash ' - 'at the end of override_with if necessary)') - - if override_prefix and override_prefix.endswith('/'): - if path and (not path.endswith('/')): - raise ConfigurationError( - 'A file cannot be overridden with a directory (put a slash ' - 'at the end of to_override if necessary)') - reg = get_current_registry() config = get_configurator(reg) |
