[CPS-devel] transtyping documents to folderish documents

Jean-Marc Orliaguet jmo at ita.chalmers.se
Sat Jun 3 21:54:22 CEST 2006


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   fg at nuxeo.com
>
>
>



More information about the cps-devel mailing list

This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.