Refresh ZEO interactive python when changing product's code?
This is OT, but I have a deadline approaching and needed to go where the ZEO users are so I can get this figured out as soon as possible, in case zope-general doesn't yield a suggestion. Thanks in advance for any help anyone can offer, hopefully this is old-hat to some of the people on this list. I'm using CVS ZEO2 with Zope 2.5.1 connected via ClientStorage on the same machine. My python console is PythonWin installed under Zope's python. Long story short, I'm adding a few methods to Formulator, but the question here is about python product development in general. My console isn't aware of product refreshes. What should I be doing to get the python console to recognize the updated python product code when I run a refresh from the ZEO-connected Zope ZMI? Here's a sample console problem demonstrating the symptoms, and some of the things I've tried to avoid closing out the python console each time I change python code in a product. This is probing how to get the console to recognize that __setitem__'s implementation has changed from 'print test1' to 'print test2' after the first call. PythonWin 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] on win32. Portions Copyright 1994-2001 Mark Hammond (mhammond@skippinet.com.au)
import Zope, Products, ZEO, ZODB storage = ZEO.ClientStorage.ClientStorage(('localhost', 8800)) db = ZODB.DB(storage) conn = db.open() dbroot = conn.root() app = dbroot.get('Application') app.Formulator.form3.str1['required'] = 0 test1 app.Formulator.form3.str1['required'] = 0 # Prod refresh in ZMI, expecting 'test2' test1 storage.close() storage = ZEO.ClientStorage.ClientStorage(('localhost', 8800)) db = ZODB.DB(storage) conn = db.open() dbroot = conn.root() app = dbroot.get('Application') app.Formulator.form3.str1['required'] = 0 # looking for 'test2' test1 reimport Products.Formulator.Form app.Formulator.form3.str1['required'] = 0 # looking for 'test2' test1 reload(Products.Formulator) <module 'Products.Formulator' from 'C:\PROGRA~1\Zope\lib\python\Products\Formulator\__init__.pyc'> app.Formulator.form3.str1['required'] = 0 # expecting 'test2' test1 Zope.ZPublisher.Zope('/Control_Panel/Products/Formulator/manage_performRefresh', u='Username:password') Status: 200 OK (snip) app.Formulator.form3.str1['required'] = 0 # looking for 'test2' test1
Jeff Kowalczyk wrote:
This is OT, but I have a deadline approaching and needed to go where the ZEO users are so I can get this figured out as soon as possible, in case zope-general doesn't yield a suggestion. Thanks in advance for any help anyone can offer, hopefully this is old-hat to some of the people on this list.
For the current refresh code, you have to close and re-open the database connection, and you have to discard any references to the old connection (meaning you need to do the conn.root()['Application'] dance again). The old objects *will* fall out of sync. AFAIK No one has tried to use refresh and the interactive console together before. :-) Shane
participants (2)
-
Jeff Kowalczyk -
Shane Hathaway