[Zope-CMF] Re: Plone needs a release this week
Wichert Akkerman
wichert at wiggy.net
Tue Aug 7 06:23:18 EDT 2007
Previously yuppie wrote:
> Hi!
>
>
> Wichert Akkerman wrote:
> >Previously yuppie wrote:
> >>Wichert Akkerman wrote:
> >>>Previously yuppie wrote:
> >>>>- The exports created by the new components handler are still flawed,
> >>>>ISiteRoot and placeless components are not exported correctly.
> >>>I'm quite sure I fixed that: I was able to export the components and
> >>>import them again. Has that been broken since?
> >>Don't know since when these things are broken, but in the latest code
> >>there are these 2 bugs:
> >>
> >>
> >>1.) Exporting the ISiteRoot utility, 'object' should be empty. But I get
> >>this instead:
> >>
> >> <utility interface="Products.CMFCore.interfaces._content.ISiteRoot"
> >> object="SITE_ID"/>
> >>
> >>
> >>2.) By placeless components I mean something like this:
> >>
> >> <utility component="foo.bar" interface="foo.IBar"/>
> >>
> >>The import works fine, but the export looks like this:
> >>
> >> <utility factory="foo.Bar" interface="foo.IBar"/>
>
> Attached is a diff for test_components.py. Unfortunately the
> AssertionErrors are a bit cryptic, but they show that the factory is
> exported instead of the component.
I'll take a look at those.
> >I get something else: if I import this:
> >
> > <utility interface="foo.IBar" factory="foo.bar"/>
> >
> >the export looks like this:
> >
> > <utility interface="foo.IBar" object=""/>
>
> That seems to be a similar but different bug.
>
> >this is caused by the zope.component.registerUtility not storing the
> >factory method but the return value from the factory, so we no longer
> >have the factory method available when we export.
> >
> >The only way to fix that appears to be for us to keep a a registry of
> >factory methods in the setup tool. That may be too big of a change
> >in a minor release though.
>
> Not sure if your issue is a problem in real life. AFAICS this only
> happens if you use a factory that is meant for ZODB objects. In that
> case you should register an object.
Ah, that makes sense I guess. My test-case was this:
from Products.MailHost.MailHost import MailHost
def genMail():
return MailHost()
<utility interface="Products.MailHost.interfaces.IMailHost"
factory="Products.GenericSetup.hack.genMail"/>
and a MailHost is indeed a ZODB object.
Wichert.
--
Wichert Akkerman <wichert at wiggy.net> It is simple to make things.
http://www.wiggy.net/ It is hard to make things simple.
More information about the Zope-CMF
mailing list