[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