Stacy Roberts wrote at 2003-1-22 07:38 -0800:
... object created at wrong place ... ... In module CITATION.py, I have the following import statement. This should place this module into my sys.modules dictionary.
import CITEINFO
class CITATION(Folder): <all the class stuff here> add_citeinfo=CITEINFO.add_citeinfo This makes "add_citeinfo" an attribute of "CITATION" instances.
This is where my problem lies. In the class statements, I need to gain access to the CITEINFO.py modules add_citeinfo function. The CITEINFO.py module exists in the sys.modules and I can retireve it with the following statement: module = sys.modules 'Products.METADATA.CITEINFO']
However, I do not know how to gain a reference to the add_citeinfo function.
Do not do it like this! Use "from Products.METADATA.CITEINFO import add_citeinfo" or (when you are in the "METADATA" packages) "from CITEINFO import add_citeinfo".
Inside my 'def add_lworkcit()' function, I make the follwoing call:
withIt.manage_addProduct['METADATA'].add_citeinfo('citeinfo') It appears the add_citeinfo defined in the CITATION.py module is called (since I am unable to define a variable add_citeinfo in my LWORKCIT class. My 'citeinfo' object is added to Zope, but in the wrong namespace. 'withIt' is the LWORKCIT namespace I want the 'citeinfo' object created in. It seems to ignore this and create a citeinfo object in the CITATION object. I expect, you did not register "add_citeinfo" as a contructor in "registerClass" (during your product initialization).
In this case, the product factory dispatcher "manage_addProduct['METADATA']" will not have an attribute "add_citeinfo". "withIt" does neither. Therefore, acquisition gives you the one of "CITATION". And this method create in the "CITATION" instance. The best (easiest) way is to register "add_citeinfo" or to call the function (imported as shown above) directy. Dieter