Status message on form update always says "Error"

Derek Richardson derek.richardson at gatech.edu
Wed Oct 31 03:53:11 UTC 2007


I have a simple form that extends ....Five.formlib.formbase.EditForm. Well, it's 
not really a simple form, but it's simple in this context because it doesn't 
override the 'apply' form action. Here it is:

##########

try:
     # These imports are for zope2 and plone, they'll fail on zope3
     from Products.Five.formlib.formbase import EditForm
     from Products.Five.viewlet.viewlet import ViewletBase
     from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile 
as ViewPageTemplateFile
except ImportError:
     # These are the imports for zope3
     from zope.formlib.form import EditForm
     from zope.viewlet.viewlet import ViewletBase
     from zope.app.pagetemplate import ViewPageTemplateFile

from zope.app.form import CustomWidgetFactory
from zope.app.form.browser.boolwidgets import CheckBoxWidget
from zope.formlib.form import Fields
from plone.syndication.outbound.interfaces import IFeedConfigs
from plone.syndication.outbound.feedconfig import FeedConfig
from plone.syndication.outbound.browser.widgets import ConfigurableObjectWidget
from plone.syndication.outbound.browser.widgets import ConfigurableSequenceWidget


class FeedConfigsEditForm(EditForm):
     """Edit form for feed configurations, used to edit the feeds on a container.
     """

     form_fields = Fields(IFeedConfigs)

     # custom widget factories to be provided for the subwidgets in
     # ConfigurableObjectWidget
     row_custom_widgets = {'recurse_widget': CustomWidgetFactory(CheckBoxWidget),
                           'enabled_widget': CustomWidgetFactory(CheckBoxWidget),
                           'auto_discover_widget': 
CustomWidgetFactory(CheckBoxWidget)}

     ow = CustomWidgetFactory(ConfigurableObjectWidget, FeedConfig,
                              **row_custom_widgets)
     sw = CustomWidgetFactory(ConfigurableSequenceWidget, subwidget=ow)

     form_fields['configs'].custom_widget = sw

     label = u'Configure feeds'

##########

The problem is, this form, when updated, works but always renders the message in 
Plone:


Error    Updated on 2007-10-31 02:59:42.069281

Or something similar, with a different datetime. The key is it always says 
'ERROR' and displays in red and orange, which will be very upsetting for my 
users. How can I flip this to be a simple status message that doesn't say 'ERROR'?

I've tracked down the following code in EditFormBase.handle_edit_action():

##########

             status = _("Updated on ${date_time}",
                        mapping={'date_time':
                                 formatter.format(
                                    datetime.datetime.now(time_zone)
                                    )
                         }
                        )
             self.status = status

##########

However, I can't see where this attribute gets transformed into a status 
message. Furthermore, the default for status messages is 'info', as can be seen 
from the PortalTool:

##########

     def addPortalMessage(self, message, type='info', request=None):
         """\
         Call this once or more to add messages to be displayed at the
         top of the web page.

         Examples:

         >>> ptool = self.portal.plone_utils

         >>> ptool.addPortalMessage(u'A random warning message', 'warning')

         If no type is given it defaults to 'info'
         >>> ptool.addPortalMessage(u'A random info message')

         The arguments are:
             message:   a string, with the text message you want to show,
                        or a HTML fragment (see type='structure' below)
             type:      optional, defaults to 'info'. The type determines how
                        the message will be rendered, as it is used to select
                        the CSS class for the message. Predefined types are:
                        'info' - for informational messages
                        'warning' - for warning messages
                        'error' - for messages about restricted access or errors.

         Portal messages are by default rendered by the global_statusmessage.pt
         page template.

         It is also possible to add messages from page templates, as
         long as they are processed before the portal_message macro is
         called by the main template. Example:

           <tal:block tal:define="temp python:putils.addPortalMessage('A random 
info message')" />
         """
         if request is None:
             request = self.REQUEST
         IStatusMessage(request).addStatusMessage(message, type=type)

##########

So, my conclusion is that either this message is not being called to set the 
messaqe or something that decides the message is really an 'ERROR' is up the 
stack. But I can't find either thing in the code.

Hints and solutions to turn this 'ERROR' into an 'INFO' are appreciated!

Thanks,

Derek





More information about the Product-Developers mailing list