zope.formlib's action decorator return Action() object, not the decorated function. Why?
Hi, After years and years of heavily using zope.formlib it suddenly struck me that the zope.formlib.form.action decorator returns an Action() object instead of the decorated function (this action object is also added to the form's actions sequence as a "side effect" of the decorator). I know wonder: Why? I cannot find a use case for wanting the action object added to the class members under the name of the decorated function. But maybe there is? The reason I came across this "issue" is trying to improve the test coverage of the application I'm building somewhat closer to 100% and found that the form actions implementation *appeared* not to be covered at all - even if there clearly are tests for these. I tried having the decorator "just" returning the function, and at least all zope.formlib's tests themselves do pass. Would anyone mind if I would change the behaviour of the decorator? Kind regards, jw
On Fri, Sep 14, 2012 at 01:44:30PM +0200, Jan-Wijbrand Kolman wrote:
After years and years of heavily using zope.formlib it suddenly struck me that the zope.formlib.form.action decorator returns an Action() object instead of the decorated function (this action object is also added to the form's actions sequence as a "side effect" of the decorator).
I know wonder: Why?
(I've no clue.)
I cannot find a use case for wanting the action object added to the class members under the name of the decorated function. But maybe there is?
The reason I came across this "issue" is trying to improve the test coverage of the application I'm building somewhat closer to 100% and found that the form actions implementation *appeared* not to be covered at all - even if there clearly are tests for these.
How are you measuring coverage? How are you testing the handlers? I'm asking because I haven't encountered this issue in my projects -- form action handlers show up in my test coverage just fine.
I tried having the decorator "just" returning the function, and at least all zope.formlib's tests themselves do pass.
Would anyone mind if I would change the behaviour of the decorator?
I have unit tests that invoke view.handle_foo_button.handler() directly, because they assume zope.formlib's @action replaces the handle_foo_button method with an Action. Your change would break my tests, but they would be trivial to fix, so my vote would be -0, with the request of a larger version bump to indicate backwards-incompatibility. Marius Gedminas -- http://pov.lt/ -- Zope 3/BlueBream consulting and development
On Sep 16, 2012, at 07:28, Marius Gedminas <marius@gedmin.as> wrote:
On Fri, Sep 14, 2012 at 01:44:30PM +0200, Jan-Wijbrand Kolman wrote:
After years and years of heavily using zope.formlib it suddenly struck me that the zope.formlib.form.action decorator returns an Action() object instead of the decorated function (this action object is also added to the form's actions sequence as a "side effect" of the decorator).
I know wonder: Why?
(I've no clue.)
Another effect of this is probably that you can use sphinx's autodoc for actions which would be unfortunate. Wichert.
On 9/16/12 09:38 , Wichert Akkerman wrote:
On Sep 16, 2012, at 07:28, Marius Gedminas <marius@gedmin.as> wrote:
On Fri, Sep 14, 2012 at 01:44:30PM +0200, Jan-Wijbrand Kolman wrote:
After years and years of heavily using zope.formlib it suddenly struck me that the zope.formlib.form.action decorator returns an Action() object instead of the decorated function (this action object is also added to the form's actions sequence as a "side effect" of the decorator).
I know wonder: Why?
(I've no clue.)
Another effect of this is probably that you can use sphinx's autodoc for actions which would be unfortunate.
Ah, good catch. Didn't think of that yet... regards, jw
On 9/16/12 07:28 , Marius Gedminas wrote:
On Fri, Sep 14, 2012 at 01:44:30PM +0200, Jan-Wijbrand Kolman wrote:
The reason I came across this "issue" is trying to improve the test coverage of the application I'm building somewhat closer to 100% and found that the form actions implementation *appeared* not to be covered at all - even if there clearly are tests for these.
How are you measuring coverage?
The coverage reports as generated by the zope.testrunner ``--coverage`` option, then z3c.coverage to render the reports into html.
How are you testing the handlers?
In this specific case, I noticed the handlers seemed not be called (according to the coverage report) when using a test browser "submitting" a form. But I didn't try anything else just yet except for running that test again with a patched zope.formlib - where the decorated would return the function - and then the coverage was up :-)
I'm asking because I haven't encountered this issue in my projects -- form action handlers show up in my test coverage just fine.
I tried having the decorator "just" returning the function, and at least all zope.formlib's tests themselves do pass.
Would anyone mind if I would change the behaviour of the decorator?
I have unit tests that invoke view.handle_foo_button.handler() directly, because they assume zope.formlib's @action replaces the handle_foo_button method with an Action. Your change would break my tests, but they would be trivial to fix, so my vote would be -0, with the request of a larger version bump to indicate backwards-incompatibility.
Ok, clear. Thanks for the feedback! regards, jw
participants (3)
-
Jan-Wijbrand Kolman -
Marius Gedminas -
Wichert Akkerman