##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Form-related exception views
$Id: exception.py 29459 2005-03-14 10:45:38Z hdima $
"""
__docformat__ = 'restructuredtext'
from cgi import escape
from zope.interface import implements
from zope.i18n import translate
from zope.app.form.interfaces import IWidgetInputError
from zope.app.form.browser.interfaces import IWidgetInputErrorView
class WidgetInputErrorView(object):
"""Display an input error as a snippet of text."""
implements(IWidgetInputErrorView)
__used_for__ = IWidgetInputError
def __init__(self, context, request):
self.context, self.request = context, request
def snippet(self):
"""Convert a widget input error to an html snippet
>>> from zope.app.form.interfaces import WidgetInputError
>>> class TooSmallError(object):
... def doc(self):
... return "Foo input < 1"
>>> err = WidgetInputError("foo", "Foo", TooSmallError())
>>> view = WidgetInputErrorView(err, None)
>>> view.snippet()
u'Foo input < 1'
The only method that IWidgetInputError promises to implement is
`doc()`. Therefore, other implementations of the interface should also
work.
>>> from zope.app.form.interfaces import ConversionError
>>> err = ConversionError('Could not convert to float.')
>>> view = WidgetInputErrorView(err, None)
>>> view.snippet()
u'Could not convert to float.'
"""
message = self.context.doc()
translated = translate(message, context=self.request, default=message)
return u'%s' % escape(translated)