Log message for revision 114749: Warn on App.ImageFile.ImageFile deprecated assumption of software_home
Changed: U Zope/branches/2.12/src/App/ImageFile.py U Zope/branches/2.12/src/App/config.py A Zope/branches/2.12/src/App/tests/testImageFile.py -=- Modified: Zope/branches/2.12/src/App/ImageFile.py =================================================================== --- Zope/branches/2.12/src/App/ImageFile.py 2010-07-14 14:58:01 UTC (rev 114748) +++ Zope/branches/2.12/src/App/ImageFile.py 2010-07-14 15:07:11 UTC (rev 114749) @@ -18,6 +18,7 @@ import os.path import stat import time +import warnings from AccessControl.SecurityInfo import ClassSecurityInfo from Acquisition import Explicit @@ -34,6 +35,13 @@ os.path.join(os.path.dirname(Zope2.__file__), os.path.pardir) ) +NON_PREFIX_WARNING = ('Assuming image location to be present in the Zope2 ' + 'distribution. This is deprecated and might lead to ' + 'broken code if the directory in question is moved ' + 'to another distribution. Please provide either an ' + 'absolute file system path or a prefix. Support for ' + 'relative filenames without a prefix might be ' + 'dropped in a future Zope2 release.') class ImageFile(Explicit): """Image objects stored in external files.""" @@ -43,9 +51,12 @@ def __init__(self, path, _prefix=None): import Globals # for data if _prefix is None: - _prefix=getattr(getConfiguration(), 'softwarehome', PREFIX) + _prefix=getattr(getConfiguration(), 'softwarehome', None) or PREFIX + if not os.path.isabs(path): + warnings.warn(NON_PREFIX_WARNING, UserWarning, 2 ) elif type(_prefix) is not type(''): _prefix=package_home(_prefix) + # _prefix is ignored if path is absolute path = os.path.join(_prefix, path) self.path=path if Globals.DevelopmentMode: Modified: Zope/branches/2.12/src/App/config.py =================================================================== --- Zope/branches/2.12/src/App/config.py 2010-07-14 14:58:01 UTC (rev 114748) +++ Zope/branches/2.12/src/App/config.py 2010-07-14 15:07:11 UTC (rev 114749) @@ -36,7 +36,7 @@ def setConfiguration(cfg): """Set the global configuration object. - Legacy sources of common configuraiton values are updated to + Legacy sources of common configuration values are updated to reflect the new configuration; this may be removed in some future version. """ Added: Zope/branches/2.12/src/App/tests/testImageFile.py =================================================================== --- Zope/branches/2.12/src/App/tests/testImageFile.py (rev 0) +++ Zope/branches/2.12/src/App/tests/testImageFile.py 2010-07-14 15:07:11 UTC (rev 114749) @@ -0,0 +1,45 @@ +import unittest +import os.path +import App +from Testing.ZopeTestCase.warnhook import WarningsHook + + +class TestImageFile(unittest.TestCase): + + def setUp(self): + # ugly: need to save the old App.config configuration value since + # ImageFile might read it and trigger setting it to the default value + self.oldcfg = App.config._config + self.warningshook = WarningsHook() + self.warningshook.install() + + def tearDown(self): + self.warningshook.uninstall() + # ugly: need to restore configuration, or lack thereof + App.config._config = self.oldcfg + + def test_warn_on_software_home_default(self): + App.ImageFile.ImageFile('App/www/zopelogo.jpg') + self.assertEquals(self.warningshook.warnings.pop()[0], + App.ImageFile.NON_PREFIX_WARNING) + + def test_no_warn_on_absolute_path(self): + path = os.path.join(os.path.dirname(App.__file__), + 'www','zopelogo.jpg') + App.ImageFile.ImageFile(path) + self.failIf(self.warningshook.warnings) + + def test_no_warn_on_path_as_prefix(self): + prefix = os.path.dirname(App.__file__) + App.ImageFile.ImageFile('www/zopelogo.jpg', prefix) + self.failIf(self.warningshook.warnings) + + def test_no_warn_on_namespace_as_prefix(self): + prefix = App.__dict__ # same as calling globals() inside the App module + App.ImageFile.ImageFile('www/zopelogo.jpg', prefix) + self.failIf(self.warningshook.warnings) + +def test_suite(): + return unittest.TestSuite(( + unittest.makeSuite(TestImageFile), + )) _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins