[Product-Developers] Re: How to investigate a "could not adapt"problem

Giovanni Toffoli toffoli at uni.net
Tue Sep 2 08:29:30 UTC 2008


Thank you very much, Christian, for your answer of a few days ago.

By putting a typo in the top configure.zcml file of collective.tin, I 
checked that all the zcml stuff was being loaded.

Then, by some debugging with pdb, I realized that in my case the directive 
involved wasn't
<adapter
    factory="sqlalchemy.orm.session.object_session"
    provides=".interfaces.ISession"
    for="*"
    />
but the folowing more specific one
<adapter
    factory=".utils.get_session_from_database_name"
    provides=".interfaces.ISession"
    for=".interfaces.IDatabaseFromParent"
    />

and that, in the body of get_session_from_database_name, the call
    getUtility(IDatabase, context.database_name)
wasn't returning the utility since the database_name wasn't correct.
Probably a more specific exception raised early in the code would have made 
easier to spot my error.

As to my "question 2"
> How can I access the adapter registry where the adapters defined in the 
> <adapter> directives are registered?
it seems that the related information is rooted in the code
siteinfo = SiteInfo()
inside the module zope/app/component/hooks.py

Now I made some progress in using collective.tin
Then I met another problem, but I'll mention it in another post.

Giovanni Toffoli

----- Original Message ----- 
From: "Christian Klinger" <cklinger at novareto.de>
To: <product-developers at lists.plone.org>
Sent: Wednesday, August 27, 2008 12:17 PM
Subject: [Product-Developers] Re: How to investigate a "could not 
adapt"problem


> Giovanni Toffoli schrieb:
>> Hi all,
>>
>> in developing a product above collective.lead and collective.tin, I get a 
>> TypeError such as:
>> TypeError: ('Could not adapt', <PersonTitleFolder at 
>> /fulbright_db/fulbright/persontitlefolder.2008-08-16.9942504507>, ('Could 
>> not adapt', <PersonTitleFolder at 
>> /fulbright_db/fulbright/persontitlefolder.2008-08-16.9942504507>, 
>> <InterfaceClass collective.tin.interfaces.ISession>)
>>
>> The configure.zclm file of collective.tin includes the following 
>> directive:
>> <adapter
>>    factory="sqlalchemy.orm.session.object_session"
>>    provides=".interfaces.ISession"
>>    for="*"
>>    />
>>
>> On the other hand, using zopepy I can execute
>>>> from sqlalchemy.orm.session import object_session
>>
>> I would like to investigate a little
>> - if and why the configure.zclm file of collective.tin hasn't been loaded
>
> If you use buildout then you have to add collective.tin to the [zcml] of 
> your buildout.cfg
>
> And the suffix of configure should be zcml not zclm.
>
>
>> - if and why some directives inside it aren't effective in my case.
>>
>> Thus I have 2 questions
>> 1.
>> Is there a way of tracing (getting a log of) the loading of all the 
>> configure.zcml files, starting from site.zcml ?
>
> I´m intrested in this as well.
> Btw. you can make a typo in your configure. Then you will get an error on 
> startup.
>
>> 2.
>> How can I access the adapter registry where the adapters defined in the 
>> <adapter> directives are registered?
>> In the documentation of the package zope.interface I find how to create 
>> and lookup directly (by interface) an adapter register, but I don't know 
>> which adapter register is used by my Zope/Plone site.
>
> You can try with queryadapter from zope.component package.
>
>>
>> Obviously I would also appreciate suggestions for other approaches of 
>> investigating the problem.
>>
>> Thank you very much in advance, Giovanni Toffoli
>
> HTH Christian
>
>
> _______________________________________________
> Product-Developers mailing list
> Product-Developers at lists.plone.org
> http://lists.plone.org/mailman/listinfo/product-developers
> 






More information about the Product-Developers mailing list