File: Install.py

package info (click to toggle)
zope-speedpack 0.3-2
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 156 kB
  • ctags: 66
  • sloc: python: 421; sh: 60; makefile: 38
file content (50 lines) | stat: -rw-r--r-- 1,797 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from Products.CMFCore.utils import getToolByName

def install(self):
    return '\n'.join(_migrateToSkinsCustomFolder(self))

def uninstall(self):
    return '\n'.join(_migrateToFolder(self))


def _migrateToSkinsCustomFolder(portal):
    ps = getToolByName(portal, "portal_skins")
    old_type = ['Folder']
    migrated_add = ps.manage_addProduct['SpeedPack'].manage_addSkinsCustomFolder
    return _migrate(ps, old_type, migrated_add)

def _migrateToFolder(portal):
    ps = getToolByName(portal, "portal_skins")
    old_type = ['Skin Custom Folder']
    migrated_add = ps.manage_addProduct['OFSP'].manage_addFolder
    return _migrate(ps, old_type, migrated_add)

def _migrate(ps, old_type, migrated_add, out=[]):
    """Replaces all Folder objects with Skin Custom Folder
    """
    for old_folder in ps.objectValues(old_type):
        id = old_folder.getId()[:]
        title = old_folder.title
        
        # create a safe migration id
        migrate_id = id[:]
        while hasattr(ps, migrate_id):
            migrate_id += 'x_'

        # create new folder
        migrated_add(migrate_id)
        migrate_folder = getattr(ps, migrate_id)
        migrate_folder.title = title

        # copy all objects to the new folder
        for obj in old_folder.objectValues():
            migrate_folder.manage_clone(obj, obj.getId())

        # remove the old folder and rename new folder to the id of the old folder
        ps.manage_delObjects([id])
        # submit a sub transaction to assign a correct _p_jar to the migrated object
        # without a valid _p_jar it can't be renamed
        get_transaction().commit(1)
        ps.manage_renameObject(migrate_id, id)
        out.append('Migrated portal_skin/%s' % id)
    return out