Florent Guillaume wrote:
If you change the class of an object, you have to make sure its
container is also re-persisted, because in the ZODB the container of a
persistent object has a reference to its child that includes the class.
Florent
OK, thanks,
it could be -- although I'm not sure how -- that ob.proxyChanged() that
sends events triggered the persistence on the container, since the
persistence problems disappeared after I had added that line.
also I just saw the meta_type must be changed to 'CPS Proxy Folderish
Document'. But the information only seems to be used by tree cache and
for navigation purposes. so I can wait with that...
/JM
On 2 Jun 2006, at 15:12, Jean-Marc Orliaguet wrote:
Jean-Marc Orliaguet wrote:
Julien Anguenot wrote:
Salut Jean-Marc,
Jean-Marc Orliaguet wrote:
I'm about to migrate a couple of documents from "documentish" to
folderish (FolderishProxyDocument)
CPS uses isinstance(ProxyFolderishDocument) in some places, so
changing
to portal type to folderish is not enough.
instances must be changed too.
the current script does:
for brain in brains:
ob = brain.getObject()
if ob is None:
continue
if isinstance(ob, ProxyFolderishDocument):
continue
ob.__class__ = ProxyFolderishDocument
ob._p_changed = 1 # trigger persistence
ob.proxyChanged()
# + some workflow history stuff omitted here
anything more to think about ?
You may need to update the workflow related annotations on the
object as
well and ensure it's compatible with the folferish workflow your
objects
are gonna follow after this migration. I guess you will need to update
your workflow associations as well to specify a folderish workflow
instead of the former one.
Keep us posted about the result.
J.
sorry, I sent the one that didn't work. here is the correct one.
ciao.
/JM
from Acquisition import aq_base
from Products.CMFCore.utils import getToolByName
from Products.CPSCore.ProxyBase import ProxyFolderishDocument
def upgrade_personal_pages(self):
ctool = getToolByName(self, 'portal_catalog')
nchanged = 0
brains = ctool.searchResults(portal_type=('Chalmers personal
page',))
for brain in brains:
ob = brain.getObject()
if ob is None:
continue
if isinstance(ob, ProxyFolderishDocument):
continue
ob.__class__ = ProxyFolderishDocument
ob._p_changed = 1 # trigger persistence
ob.proxyChanged()
workflow_history = getattr(aq_base(ob), 'workflow_history',
None)
if workflow_history is None:
continue
changed = 0
for wf_id, wfh in workflow_history.items():
if wf_id != 'workspace_content_wf':
continue
new_wfh = ()
for wf in wfh:
new_wf = {}
for k, v in wf.items():
if k == 'workflow_id':
if v == 'workspace_content_wf':
v = 'workspace_folderish_content_wf'
new_wf[k] = v
new_wfh += new_wf,
workflow_history['workspace_folderish_content_wf'] = new_wfh
workflow_history._p_changed = 1 # trigger persistence
changed = 1
if changed:
path = '/'.join(ob.getPhysicalPath())
nchanged += 1
return '%s personal pages migrated to folderish documents' %
nchanged
_______________________________________________
cps-devel mailing list
http://lists.nuxeo.com/mailman/listinfo/cps-devel
--Florent Guillaume, Nuxeo (Paris, France) Director of R&D
+33 1 40 33 71 59 http://nuxeo.com [EMAIL PROTECTED]
_______________________________________________
cps-devel mailing list
http://lists.nuxeo.com/mailman/listinfo/cps-devel