source: products/SimpleBlog/branches/optimizations/Extensions/migration.py @ 1

Last change on this file since 1 was 1, checked in by myroslav, 18 years ago

Building directory structure

  • Property svn:eol-style set to native
File size: 2.5 KB
Line 
1import sys
2from Products.CMFCore.utils import getToolByName
3import transaction, traceback
4
5processed = []
6brakes = []
7
8def clean(blog, id):
9    if hasattr(blog,id):
10        delattr(blog,id)
11    if blog.__dict__.has_key(id):
12        del blog.__dict__[id]
13
14def migrate2Btree(migrated_ob):
15    global processed, brakes
16   
17    try:
18      migrated_ob._initBTrees()
19      obs = list(migrated_ob._objects)
20      for o in obs:
21          if o['meta_type']=='BlogFolder':
22              oo=getattr(migrated_ob, o['id'], None)
23              oo._initBTrees()
24      while obs:
25          ob_data = obs.pop()
26          ob_id, ob_meta = map(lambda i:ob_data[i], ['id','meta_type'])
27          object = getattr(migrated_ob, ob_id, None)
28          clean(migrated_ob, ob_id)
29          if object is not None:
30              if object.meta_type == 'BlogFolder':
31                  migrate2Btree(object)
32              migrated_ob._setOb(ob_id, object)
33              be = migrated_ob._getOb(ob_id,None)
34              if be is None:
35                  raise Exception("Not set '%s' object on '%s' blog" % (ob_id, blog.getId()))
36              be._p_changed = 1
37              be.reindexObject()
38          else:
39              raise str("%s - not exist in %s" % (ob_id, self.blog.absolute_url()))
40          processed.append(ob_id)
41      migrated_ob._objects = ()
42      migrated_ob._p_changed = 1
43      migrated_ob.reindexObject()
44    except:
45      err_type, err_val, traces = sys.exc_info()
46      brakes.append({'url':migrated_ob.absolute_url(), "err_type":str(err_type), "err_val":str(err_val),\
47                     'traces':'\n'.join(traceback.format_exception(err_type, err_val, traces))})
48    return processed, brakes
49
50def migrateBlogs(self):
51    """ Migration all portal's blogs to BTreeFoolder base. """
52    global processed, brakes
53   
54    res = ""
55    catalog = getToolByName(self, 'portal_catalog')
56   
57    # add 'EntryCategory' to portal_catalog Metadata.
58    # Update cataloged object perform on 2nd migration step
59    if not 'EntryCategory' in catalog._catalog.names:
60        catalog.addColumn('EntryCategory')
61
62    # migrate old-fashion blog to btree-based
63    blogs = [b.getObject() for b in catalog(portal_type="Blog")]
64    for blog in blogs:
65        p,b = migrate2Btree(blog)
66        processed.extend(p)
67        brakes.extend(b)
68       
69    res += 'processed: %d blogs with %d objects, brakes - %d objects.' % (len(blogs),len(processed),len(brakes))
70    res += "%s\n\n%s\n\n%s" % (str(blogs),str(processed),str(brakes)) 
71   
72    return res
Note: See TracBrowser for help on using the repository browser.