[Zope-Checkins] SVN: Zope/trunk/ Changed policy on handling exceptions during ZCML parsing in ``Products``. We no longer catch any exceptions in non-debug mode. These days most products won't actually do anything useful if their ZCML is not loaded - it's no longer helpful to pretend to get a working instance. We'd rather fail early and visible.
Hanno Schlichting
hannosch at hannosch.eu
Sat Sep 25 18:12:58 EDT 2010
Log message for revision 116950:
Changed policy on handling exceptions during ZCML parsing in ``Products``. We no longer catch any exceptions in non-debug mode. These days most products won't actually do anything useful if their ZCML is not loaded - it's no longer helpful to pretend to get a working instance. We'd rather fail early and visible.
Changed:
U Zope/trunk/doc/CHANGES.rst
U Zope/trunk/src/OFS/metaconfigure.py
U Zope/trunk/src/Products/Five/fiveconfigure.py
-=-
Modified: Zope/trunk/doc/CHANGES.rst
===================================================================
--- Zope/trunk/doc/CHANGES.rst 2010-09-25 22:03:22 UTC (rev 116949)
+++ Zope/trunk/doc/CHANGES.rst 2010-09-25 22:12:57 UTC (rev 116950)
@@ -19,6 +19,9 @@
Features Added
++++++++++++++
+- Changed policy on handling exceptions during ZCML parsing in ``Products``.
+ We no longer catch any exceptions in non-debug mode.
+
- Added a new BooleanIndex to the standard PluginIndexes.
- Update to Zope Toolkit 1.0c1.
Modified: Zope/trunk/src/OFS/metaconfigure.py
===================================================================
--- Zope/trunk/src/OFS/metaconfigure.py 2010-09-25 22:03:22 UTC (rev 116949)
+++ Zope/trunk/src/OFS/metaconfigure.py 2010-09-25 22:12:57 UTC (rev 116950)
@@ -31,14 +31,6 @@
return products
-def handleBrokenProduct(product):
- if debug_mode:
- # Just reraise the error and let Zope handle it.
- raise
- # Not debug mode. Zope should continue to load. Print a log message:
- logger.exception('Could not import Product %s' % product.__name__)
-
-
def loadProducts(_context, file=None, files=None, package=None):
if file is None:
# set the default
@@ -51,10 +43,7 @@
for product in findProducts():
zcml = os.path.join(os.path.dirname(product.__file__), file)
if os.path.isfile(zcml):
- try:
- xmlconfig.include(_context, zcml, package=product)
- except: # Yes, really, *any* kind of error.
- handleBrokenProduct(product)
+ xmlconfig.include(_context, zcml, package=product)
def loadProductsOverrides(_context, file=None, files=None, package=None):
@@ -69,10 +58,7 @@
for product in findProducts():
zcml = os.path.join(os.path.dirname(product.__file__), file)
if os.path.isfile(zcml):
- try:
- xmlconfig.includeOverrides(_context, zcml, package=product)
- except: # Yes, really, *any* kind of error.
- handleBrokenProduct(product)
+ xmlconfig.includeOverrides(_context, zcml, package=product)
def get_registered_packages():
Modified: Zope/trunk/src/Products/Five/fiveconfigure.py
===================================================================
--- Zope/trunk/src/Products/Five/fiveconfigure.py 2010-09-25 22:03:22 UTC (rev 116949)
+++ Zope/trunk/src/Products/Five/fiveconfigure.py 2010-09-25 22:12:57 UTC (rev 116950)
@@ -16,10 +16,12 @@
These directives are specific to Five and have no equivalents outside of it.
"""
+import logging
import os
import glob
import warnings
+from App.config import getConfiguration
from zope.interface import classImplements
from zope.component.interface import provideInterface
from zope.configuration.exceptions import ConfigurationError
@@ -27,7 +29,9 @@
from Products.Five.browser.metaconfigure import page
+logger = logging.getLogger('Products.Five')
+
def implements(_context, class_, interface):
warnings.warn('Using <five:implements /> in %s is deprecated. Please use '
'the <class class="foo.Bar">'
@@ -67,11 +71,18 @@
layer=layer, for_=for_, template=fname)
+def handleBrokenProduct(product):
+ if getConfiguration().debug_mode:
+ # Just reraise the error and let Zope handle it.
+ raise
+ # Not debug mode. Zope should continue to load. Print a log message:
+ logger.exception('Could not import Product %s' % product.__name__)
+
+
from zope.deferredimport import deprecated
deprecated("Please import from OFS.metaconfigure",
findProducts = 'OFS.metaconfigure:findProducts',
- handleBrokenProduct = 'OFS.metaconfigure:handleBrokenProduct',
loadProducts = 'OFS.metaconfigure:loadProducts',
loadProductsOverrides = 'OFS.metaconfigure:loadProductsOverrides',
_register_monkies = 'OFS.metaconfigure:_register_monkies',
More information about the Zope-Checkins
mailing list