Changeset 2830 in products


Ignore:
Timestamp:
Sep 17, 2010 10:13:14 AM (14 years ago)
Author:
mylan
Message:

#230: Added migration from qPloneGoogleSitemaps to quintagroup.plonegooglesitemaps

Location:
quintagroup.plonegooglesitemaps/branches/migratioin_product/quintagroup/plonegooglesitemaps
Files:
3 added
2 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.plonegooglesitemaps/branches/migratioin_product/quintagroup/plonegooglesitemaps/profiles.zcml

    r2602 r2830  
    22    xmlns="http://namespaces.zope.org/zope" 
    33    xmlns:genericsetup="http://namespaces.zope.org/genericsetup" 
     4    xmlns:zcml="http://namespaces.zope.org/zcml" 
    45    i18n_domain="quintagroup.plonegooglesitemaps"> 
    56 
     
    3738      /> 
    3839 
     40    <genericsetup:registerProfile 
     41      zcml:condition="installed Products.qPloneGoogleSitemaps" 
     42      name="migrage_qPGSM" 
     43      title="Migrate from qPloneGoogleSitemaps to quintagroup.plonegooglesitemaps" 
     44      directory="profiles/migrate_qPGSM" 
     45      description="" 
     46      provides="Products.GenericSetup.interfaces.EXTENSION" 
     47      /> 
     48 
    3949    <genericsetup:upgradeStep 
    4050      title="Upgrade Plone Google Sitemaps 1.0 to 1.1" 
  • quintagroup.plonegooglesitemaps/branches/migratioin_product/quintagroup/plonegooglesitemaps/setuphandlers.py

    r2595 r2830  
     1import sys 
    12import logging 
    23from zope.component import getSiteManager 
    34from zope.component import getGlobalSiteManager 
     5 
     6from Acquisition import aq_parent 
    47from Products.CMFCore.utils import getToolByName 
     8 
    59from quintagroup.plonegooglesitemaps.content.newsextender import NewsExtender 
    610 
     
    3943        logger.log(logging.INFO, "Unregistered \"%s\" configlet." % conf_id) 
    4044 
    41  
    4245def uninstall(context): 
    4346    """ Do customized uninstallation. 
     
    4851    unregisterSchemaExtenderAdapters(site) 
    4952    removeConfiglet(site) 
     53 
     54 
     55def cleanup(site): 
     56    """Clean-up qPloneGoogleSitemaps artefacts.""" 
     57    old_product = "qPloneGoogleSitemaps" 
     58    # Get plone tools 
     59    pp = getToolByName(site, 'portal_properties') 
     60    skins = getToolByName(site, 'portal_skins') 
     61    controlpanel = getToolByName(site, 'portal_controlpanel') 
     62    # Remove old configlet from controlpanel 
     63    controlpanel.unregisterConfiglet(old_product) 
     64    logger.info("Unregistered '%s' configlet from "\ 
     65                "portal_controlpanel tool" % old_product) 
     66    # Remove qPloneGoogleSitemaps skin layer 
     67    for skinName in skins.getSkinSelections(): 
     68        skin_paths = skins.getSkinPath(skinName).split(',')  
     69        paths = [l.strip() for l in skin_paths if not l == old_product] 
     70        logger.info("Removed '%s' from '%s' skin." % (old_product, skinName)) 
     71        skins.addSkinSelection(skinName, ','.join(paths)) 
     72 
     73def recriateSitemaps(smaps): 
     74    msg = "Recriation Sitemaps: " 
     75    if smaps: 
     76        logger.info(msg + "Process %s sitemaps." % ( 
     77                [sm.getPath() for sm in smaps])) 
     78        fields = ['id', 'sitemapType', 'portalTypes', 'states', 
     79                  'blackout_list','reg_exp', 'urls', 'pingTransitions'] 
     80        for smb in smaps: 
     81            # get sitemap properties 
     82            sm_path = smb.getPath() 
     83            sm = smb.getObject() 
     84            container = aq_parent(sm) 
     85            data = {} 
     86            for fn in fields: 
     87                data[fn] = sm.getField(fn).getAccessor(sm)() 
     88            # Replace old GoogleSitemap by new one with 
     89            # previous properties 
     90            container.manage_delObjects(data['id']) 
     91            container.invokeFactory("Sitemap", id=data['id']) 
     92            new_sm = getattr(container, data['id']) 
     93            new_sm.update(**data) 
     94            new_sm.at_post_create_script() 
     95            logger.info("Successfully replaced '%s' Sitemap" % sm_path) 
     96    else: 
     97        logger.info(msg + "No sitemaps found") 
     98 
     99def getOldGSitemaps(site): 
     100    catalog = getToolByName(site, 'portal_catalog') 
     101    smaps = catalog(portal_type="Sitemap") 
     102    old_smb = [smb for smb in smaps \ 
     103               if 'qPloneGoogleSitemaps' in str(smb.getObject().__class__)] 
     104    return old_smb 
     105     
     106def migrate_qPGSM(context): 
     107    """ Clean-up qPloneGoogleSitemaps product artefacts and 
     108        recriate sitemaps from quintagroup.plonegooglesitemaps 
     109        package version 1.0. 
     110    """ 
     111    if context.readDataFile('gsm_migration.txt') is None: 
     112        return 
     113 
     114    site = context.getSite() 
     115    old_gsmaps = getOldGSitemaps(site) 
     116    if old_gsmaps: 
     117        cleanup(site) 
     118        recriateSitemaps(old_gsmaps) 
     119        logger.info("Successfully migrated old GoogleSitemaps.") 
     120    else: 
     121        logger.info("No old GoogleSitemaps found.") 
     122 
     123 
Note: See TracChangeset for help on using the changeset viewer.