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="" 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 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=""/>
> >
> >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"

and a MailHost is indeed a ZODB object.


Wichert Akkerman <[EMAIL PROTECTED]>    It is simple to make things.                   It is hard to make things simple.
Zope-CMF maillist  -

See for bug reports and feature requests

Reply via email to