On Friday 28 May 2004 10:15 am, Mohamed Lrhazi wrote:
When I replace :
self.domain = self.ddb.getDomain(REQUEST['YSURLARGS'][1]) self.domainTitle=self.domain.getHTMLDomainName()
with this:
domain = self.ddb.getDomain(REQUEST['YSURLARGS'][1]) self.domainTitle=domain.getHTMLDomainName()
It works.
"domain" above is an instance of a class called Domain, I defined it in a module that lives in /usr/local/zope/lib/python/YSDomain and that does not implement nor extend any Zope classes or interfaces...
Why does instantiating such an object inside my zope application cause "can't pickle function objects" error?
By setting self.domain you are causing the 'domain' instance to be stored in the ZODB, as an attribute of your persistent class. There is apparently some aspect of that 'domain' instance which is not picklable. Unless you really wanted to store/update an instance of that class in the ZODB as an attribute of your Zope object every time you called index_html, the second method is certainly best. Updating that attribute on every call could result in tremendous database bloat. Actually, it seems pretty strange that you are setting any instance attributes during the index_html call, which one wouldn't normally expect to have any side effects. Alec Mitchell