wx.lib.agw.persist - false already registered exception

I setup the PM like this:

         # persistance setup
         self._persistMgr = PM.PersistenceManager.Get()
         log.debug("persist base setup: %s" % self)
         log.debug("persist base setup1: %s" % len(self._persistMgr._persistentObjects))
         _configFile = os.path.join(wx.GetApp().persistanceLoc,
                                    self.view.GetName())
         self._persistMgr.SetPersistenceFile(_configFile)
         log.debug("persist base setup2: %s" % len(self._persistMgr._persistentObjects))

For my test case I get this as output:
2012-04-13 19:13:33,947 - twcbsrc.base - DEBUG - base.py - 994 - persist base setup: <twcbsrc.controllers.dtastingevt.Tastingevt; proxy of <Swig Object of type 'wxEvtHandler *' at 0x9a519e8> >
2012-04-13 19:13:33,947 - twcbsrc.base - DEBUG - base.py - 995 - persist base setup1: 48
2012-04-13 19:13:33,948 - twcbsrc.base - DEBUG - base.py - 999 - persist base setup2: 48

The "persist base setup2" output should in my view have a length of zero as I have not yet called:

         self._persistMgr.RegisterAndRestoreAll(self.view)

Depending on the sequence I call up dialogs I run into the following exception if the dialog being called contains a control name which is also used on the parent calling the dialog.

Exception: Object (class=<class 'twcbsrc.libui.textctrl.TextCtrlML'>, name=eNotes) is already registered
....
File "c:\dev\twcbv4\twcbsrc\controllers\base.py", line 926, in persistRegisterControls
   self._persistMgr.RegisterAndRestoreAll(self.view)
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 638, in RegisterAndRestoreAll
   self.RegisterAndRestoreAll(window, child.GetChildren())
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 638, in RegisterAndRestoreAll
   self.RegisterAndRestoreAll(window, child.GetChildren())
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 636, in RegisterAndRestoreAll
   self.RegisterAndRestore(child)
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 612, in RegisterAndRestore
   return self.Register(window) and self.Restore(window)
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 461, in Register
   raise Exception("Object (class=%s, name=%s) is already registered"%(window.__class__, window.GetName()))

Adding the following line to PersistanceManager.SetPersistanceFile fixes the issue.

         self._persistentObjects = {}

Werner

Hi Werner,

<snip>

Adding the following line to PersistanceManager.SetPersistanceFile fixes the
issue.

   self\.\_persistentObjects = \{\}

Thanks, patch applied in SVN.

Andrea.

"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/

···

On 13 April 2012 19:32, Werner wrote: