Changeset 840

Show
Ignore:
Timestamp:
04/11/07 04:27:22
Author:
mylan
Message:

Finish with migration.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • SimpleBlog/branches/optimizations/Extensions/migration.py

    r839 r840  
    11from Products.CMFCore.utils import getToolByName 
     2import transaction 
     3 
     4processed = [] 
    25 
    36def clean(blog, id): 
     
    710        del blog.__dict__[id] 
    811 
    9 def migrateBlog2BTree(blog): 
    10      
    11     processed = [] 
    12     blog._initBTrees() 
     12def migrate2Btree(migrated_ob): 
     13    global processed 
    1314 
    14     obs = list(blog._objects) 
     15    migrated_ob._initBTrees() 
     16    obs = list(migrated_ob._objects) 
     17    for o in obs: 
     18        if o['meta_type']=='BlogFolder': 
     19            oo=getattr(migrated_ob, o['id'], None) 
     20            oo._initBTrees() 
    1521    while obs: 
    1622        ob_data = obs.pop() 
    1723        ob_id, ob_meta = map(lambda i:ob_data[i], ['id','meta_type']) 
    18         object = getattr(blog, ob_id, None) 
    19         clean(blog, ob_id) 
    20          
    21         if object: 
    22             blog._setOb(ob_id, object) 
    23             be = blog._getOb(ob_id,None) 
    24             if not be: 
     24        object = getattr(migrated_ob, ob_id, None) 
     25        clean(migrated_ob, ob_id) 
     26        if object is not None: 
     27            if object.portal_type == 'BlogFolder': 
     28                migrate2Btree(object) 
     29            migrated_ob._setOb(ob_id, object) 
     30            be = migrated_ob._getOb(ob_id,None) 
     31            if be is None: 
    2532                raise Exception("Not set '%s' object on '%s' blog" % (ob_id, blog.getId())) 
    2633            be._p_changed = 1 
    2734            be.reindexObject() 
    28  
    2935        else: 
    3036            raise str("%s - not exist in %s" % (ob_id, self.blog.absolute_url())) 
    31  
    3237        processed.append(ob_id) 
    33          
    34     blog._objects = () 
    35      
    36     blog._p_changed = 1 
    37     blog.reindexObject() 
     38    migrated_ob._objects = () 
     39    migrated_ob._p_changed = 1 
     40    migrated_ob.reindexObject() 
    3841    return processed 
    3942 
    40  
    41  
    42  
    43 from StringIO import StringIO 
    44 from Products.Archetypes.Extensions.migrations import refreshCatalogs 
    45 import transaction 
    46  
    47  
    48 def migrateBlog(self): 
    49     """ Migration from ATCTFolder basee blog (qg2.5.2) to ATCTBTreeFolder base. """ 
    50     portal = getToolByName(self,'portal_url').getPortalObject() 
    51     blog = getToolByName(self,'ttt') 
    52     processed = migrateBlog2BTree(blog) 
    53     transaction.commit() 
    54  
    55     refreshCatalogs(portal, out=StringIO()) 
    56     #catalog = getToolByName(self,'portal_catalog') 
    57     #catalog.refreshCatalog() 
    58     transaction.commit() 
    59      
    60  
    61      
    62     return 'processed %s entries' % processed 
     43def migrateBlogs(self): 
     44    """ Migration all portal's blogs to BTreeFoolder base. """ 
     45    global processed 
     46    catalog = getToolByName(self, 'portal_catalog') 
     47    blogs = [b.getObject() for b in catalog(portal_type="Blog")] 
     48    for blog in blogs: 
     49        processed = migrate2Btree(blog) 
     50    return 'processed: %d blogs with %d objects.' % (len(blogs),len(processed))