Hi Eric,

  The case I have been burned by many times is where all globals of ChimeraExtension.py are deleted.  In both the ChimeraExtension.py case and opening a *.py file with File / Open the trouble is that if the Python code registers a callback and the callback function tries to use a name in the global name space like calling another function defined in the same file or a global import then it fails.  This is extremely confusing when it happens.

    Tom


-------- Original Message --------
Subject: Re: [chimera-dev] [Chimera-users] Programmer's Guide feedback....
From: Eric Pettersen
To: chimera-dev
Date: 12/15/09 10:55 AM
On Dec 15, 2009, at 9:36 AM, Tom Goddard wrote:

  4. The ToolbarButton.py doesn't work unless the "import re" and "import chimera" are in the function body.  This is because Chimera deletes all globals after loading a file.  This has often been a headache for me and Chimera should not delete globals.

This is a behavior of Python.  We load scripts into their own temporary module to avoid pollution of the Chimera main namespace (e.g. if the script defined globals named "id" or "sum" or "type" they would override built-in functions of the same name for all future script executions!).  When Chimera unloads the temporary module, Python nulls out it's global namespace (to give garbage collection a shot at working).

Now perhaps Chimera shouldn't unload the module.  I think this would be a reasonable change.  Perhaps it could be discussed at our next internal Chimera developers' meeting to ensure that I'm not forgetting any other ramifications that the change might have.

--Eric

                        Eric Pettersen
                        UCSF Computer Graphics Lab
                        http://www.cgl.ucsf.edu



_______________________________________________ Chimera-dev mailing list Chimera-dev@cgl.ucsf.edu http://www.cgl.ucsf.edu/mailman/listinfo/chimera-dev