Commit 5e1c82d9 authored by Chris McDonough's avatar Chris McDonough

Add <warnfilter> section, which allows you to configure Python warning filters...

Add <warnfilter> section, which allows you to configure Python warning filters in zope.conf.  Useful for suppressing the USELESS DeprecationWarnings that emanate from TALGenerator wrt i18n.
parent 55106703
......@@ -58,4 +58,12 @@
<multisection type="zLOG.loghandler" attribute="handlers" name="*"/>
</sectiontype>
<sectiontype name="warnfilter" datatype=".warning_filter_handler">
<key name="action" datatype=".warn_action" default="default"/>
<key name="message" default=""/>
<key name="category" datatype=".warning_subclass" default="Warning"/>
<key name="module" default=""/>
<key name="lineno" datatype="integer" default="0"/>
</sectiontype>
</component>
......@@ -238,3 +238,50 @@ class EventLogFactory(Factory):
if handler_level < lowest:
lowest = factory.getLevel()
return lowest
def importable_name(name):
try:
components = name.split('.')
start = components[0]
g = globals()
package = __import__(start, g, g)
modulenames = [start]
for component in components[1:]:
modulenames.append(component)
try:
package = getattr(package, component)
except AttributeError:
n = '.'.join(modulenames)
package = __import__(n, g, g, component)
return package
except ImportError:
raise ValueError, (
'The object named by "%s" could not be imported' % name )
def warning_subclass(val):
ob = importable_name(val) # will fail in course
try:
if not issubclass(ob, Warning):
raise ValueError, (
'warning category "%s" must be a Warning subclass' % val)
except TypeError:
raise ValueError, (
'warning category "%s" must be a Warning subclass' % val)
return ob
def warn_action(val):
OK = ("error", "ignore", "always", "default", "module", "once")
if val not in OK:
raise ValueError, "warning action %s not one of %s" % (val, OK)
return val
def warning_filter_handler(section):
import warnings
# add the warning filter
warnings.filterwarnings(section.action, section.message, section.category,
section.module, section.lineno, 1)
return section
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment