On Wed, Apr 01, 2009 at 10:56:30PM +0800, Martin Aspeli wrote:
Tres Seaver wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Martin Aspeli wrote:
Hi,
I'd like to add support for the following:
1) Provider decorator:
@provider(IFoo) def some_function(context) pass
This is an alternative to doing a separate alsoProvides() on the function.
2) An interfaceProvides directive:
class IFoo(Interface): interfaceProvides(ISomeMarker)
This is alternative to doing alsoProvides() on the interface.
The reason for this is that currently, you have to put those alsoProvides() lines after the function or interface. This makes them difficult to find if the bodies of the functions or interfaces are long, and goes against the convention of having the "what is this" information at the top of the entity.
I can probably help implement this. Any thoughts?
You should probably add a "class decorator" 'interfaceProvider', as well, because the "in-suite" versions are problematic for 2to3 conversion (IIRC what Lennart said yesterday).
I'm not sure I understand what you mean by that. Can you show an example?
It's a Python 2.6/3.0 feature: from zope.component import adapter from zope.interface import implementer @adapter(IFoo) @implementer(IBar) class MyClass(object): def __init__(self, context): self.context = context ... which translates to the obvious class MyClass(object): def __init__(self, context): self.context = context ... MyClass = implementer(IBar)(MyClass) MyClass = adapter(IFoo)(MyClass) assuming I got the application order right. I now also wonder if adapter()/implementer() would work when called with classes rather than functions...? Marius Gedminas -- http://pov.lt/ -- Zope 3 consulting and development