Changeset 2841 in products for quintagroup.plonegooglesitemaps
- Timestamp:
- Sep 22, 2010 11:38:39 AM (14 years ago)
- Location:
- quintagroup.plonegooglesitemaps/trunk
- Files:
-
- 12 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
quintagroup.plonegooglesitemaps/trunk
- Property svn:mergeinfo
-
old new 1 /quintagroup.plonegooglesitemaps/branches/migratioin_product:2826-2839 1 2 /quintagroup.plonegooglesitemaps/branches/plone4:2549-2553 2 3 /quintagroup.plonegooglesitemaps/branches/test_refactoring:2527-2536
-
- Property svnmerge-integrated changed from /quintagroup.plonegooglesitemaps/branches/migratioin_product:1-3864 /quintagroup.plonegooglesitemaps/branches/test_refactoring:1-3576 /quintagroup.plonegooglesitemaps/branches/plone4:1-3593 to /quintagroup.plonegooglesitemaps/branches/migratioin_product:1-3879 /quintagroup.plonegooglesitemaps/branches/test_refactoring:1-3576 /quintagroup.plonegooglesitemaps/branches/plone4:1-3593
- Property svn:mergeinfo
-
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/README.txt
r2426 r2841 1 =============================== 2 quintagroup.plonegooglesitemaps 3 =============================== 4 1 5 Plone Google Sitemaps product allows Plone websites to get better visibility for Google search engine by providing it with complete listing of URLs to website content. 2 6 … … 15 19 Different Sitemap types index their own content and do not depend on other Sitemaps. 16 20 17 Usage 21 USAGE 22 ===== 18 23 19 24 To enable Google Sitemaps on your site: … … 25 30 See more detailed instructions on Plone Google Sitemaps usage at http://projects.quintagroup.com/products/wiki/qPloneGoogleSitemaps 26 31 27 Screencast 32 MIGRATION 33 ========= 34 35 If you UPGRADE older version of quintagroup.plonegooglesitemaps package to newer: 36 -------------------------------------------------------------------------------- 37 1. In your zope instance configuration or buildout - replace old package version 38 with new one. 39 2. Run plone instance and reinstall package with Quickinstaller tool 40 ("Add-on Products" in plone control panel). 41 42 If your MIGRATE from Products.qPloneGoogleSitemaps to quintagroup.plonegooglesitemaps: 43 ------------------------------------------------------------------------------------- 44 1. Add to new plone instance/buildout both qPloneGoogleSitemaps product and 45 last version quintagroup.plonegooglesitemaps package. 46 2. Copy Data.fs from old Plone instance to new one. 47 3. Start your new zope instance/buildout. 48 49 _Following steps performs in the plone instance_ 50 4. With portal_migration (ZMI) - upgrade plone instance. 51 5. With Quickinstaller tool ("Add-on Products" in plone control panel) 52 deinstall old "Plone Google Sitemaps" product and install new version. 53 6. Go to *Import* tab in portal_setup tool (ZMI), choose. 54 Select "Migrate from qPloneGoogleSitemaps to quintagroup.plonegooglesitemaps" 55 profile from selection box and choose same-named import step and push 56 "Import selected steps" button. 57 58 _And last clean-up steps:_ 59 7. Remove qPloneGoogleSitemaps product from your zope instance/buildout 60 configuration. 61 62 63 SCREENCAST 64 ========== 28 65 29 66 Watch Plone Google Sitemaps Screencasts at http://quintagroup.com/cms/screencasts/qplonegooglesitemaps to see how to use this products on your Plone instance. Learn about how to install and configure Sitemaps on your Plone instance, how to create new Google Sitemaps, and how to let Google know about them. 30 67 31 Links 68 LINKS 69 ===== 32 70 33 71 * See "Google Sitemaps": https://www.google.com/webmasters/sitemaps website for more information. … … 44 82 45 83 46 Authors 84 AUTHORS 85 ======= 47 86 48 87 The product was developed by Quintagroup.com team: -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/__init__.py
r1617 r2841 1 import sys 1 2 from AccessControl import allow_module 2 3 -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/browser/configure.zcml
r2517 r2841 13 13 allowed_interface=".commonview.ISitemapView" 14 14 permission="zope.Public" 15 layer="quintagroup.plonegooglesitemaps.interfaces.IGoogleSitemapsLayer" 15 16 /> 16 17 … … 22 23 allowed_interface=".commonview.ISitemapView" 23 24 permission="zope.Public" 25 layer="quintagroup.plonegooglesitemaps.interfaces.IGoogleSitemapsLayer" 24 26 /> 25 27 … … 31 33 allowed_interface=".commonview.ISitemapView" 32 34 permission="zope.Public" 35 layer="quintagroup.plonegooglesitemaps.interfaces.IGoogleSitemapsLayer" 33 36 /> 34 37 … … 39 42 allowed_interface=".configletview.IConfigletSettingsView" 40 43 permission="cmf.ManagePortal" 44 layer="quintagroup.plonegooglesitemaps.interfaces.IGoogleSitemapsLayer" 41 45 /> 42 46 -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/config.py
r2538 r2841 27 27 # DO REBUILDING catalog 28 28 # UPDATE_CATALOG = True 29 30 SUPPORT_BLAYER = True 31 try: 32 from plone import browserlayer 33 except ImportError: 34 SUPPORT_BLAYER = False -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/interfaces.py
r2746 r2841 6 6 7 7 from Products.DCWorkflow.interfaces import IAfterTransitionEvent 8 from plone.browserlayer.interfaces import ILocalBrowserLayerType 8 9 9 10 from quintagroup.plonegooglesitemaps import qPloneGoogleSitemapsMessageFactory as _ … … 16 17 class INewsSitemapProvider(Interface): 17 18 """Marker interface for News sitemap provider.""" 19 20 21 class IGoogleSitemapsLayer(ILocalBrowserLayerType): 22 """Marker interface that defines browser layer for the package.""" -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/profiles.zcml
r2602 r2841 2 2 xmlns="http://namespaces.zope.org/zope" 3 3 xmlns:genericsetup="http://namespaces.zope.org/genericsetup" 4 xmlns:zcml="http://namespaces.zope.org/zcml" 4 5 i18n_domain="quintagroup.plonegooglesitemaps"> 5 6 … … 37 38 /> 38 39 40 <genericsetup:registerProfile 41 zcml:condition="installed Products.qPloneGoogleSitemaps" 42 name="migrate_qPGSM" 43 title="Migrate from qPloneGoogleSitemaps to quintagroup.plonegooglesitemaps" 44 directory="profiles/migrate_qPGSM" 45 description="" 46 provides="Products.GenericSetup.interfaces.EXTENSION" 47 /> 48 39 49 <genericsetup:upgradeStep 40 50 title="Upgrade Plone Google Sitemaps 1.0 to 1.1" -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/setuphandlers.py
r2595 r2841 1 import sys 1 2 import logging 2 3 from zope.component import getSiteManager 3 4 from zope.component import getGlobalSiteManager 5 6 from Acquisition import aq_parent 4 7 from Products.CMFCore.utils import getToolByName 8 9 from config import SUPPORT_BLAYER 5 10 from quintagroup.plonegooglesitemaps.content.newsextender import NewsExtender 6 11 … … 39 44 logger.log(logging.INFO, "Unregistered \"%s\" configlet." % conf_id) 40 45 46 def removeBrowserLayer(site): 47 """ Remove browser layer. 48 """ 49 if not SUPPORT_BLAYER: 50 return 51 52 from plone.browserlayer.utils import unregister_layer 53 from plone.browserlayer.interfaces import ILocalBrowserLayerType 54 55 name="quintagroup.plonegooglesitemaps" 56 site = getSiteManager(site) 57 registeredLayers = [r.name for r in site.registeredUtilities() 58 if r.provided == ILocalBrowserLayerType] 59 if name in registeredLayers: 60 unregister_layer(name, site_manager=site) 61 logger.log(logging.INFO, "Unregistered \"%s\" browser layer." % name) 41 62 42 63 def uninstall(context): … … 48 69 unregisterSchemaExtenderAdapters(site) 49 70 removeConfiglet(site) 71 removeBrowserLayer(site) 72 73 74 def cleanup(site): 75 """Clean-up qPloneGoogleSitemaps artefacts.""" 76 old_product = "qPloneGoogleSitemaps" 77 # Get plone tools 78 pp = getToolByName(site, 'portal_properties') 79 skins = getToolByName(site, 'portal_skins') 80 controlpanel = getToolByName(site, 'portal_controlpanel') 81 # Remove old configlet from controlpanel 82 configlet_ids = [ai['id'] for ai in controlpanel.listActionInfos()] 83 if old_product in configlet_ids: 84 controlpanel.unregisterConfiglet(old_product) 85 logger.info("Unregistered '%s' configlet from "\ 86 "portal_controlpanel tool." % old_product) 87 # Remove qPloneGoogleSitemaps skin layer 88 for skinName in skins.getSkinSelections(): 89 skin_paths = skins.getSkinPath(skinName).split(',') 90 paths = [l.strip() for l in skin_paths if not l == old_product] 91 if len(paths) < len(skin_paths): 92 logger.info("Removed '%s' from '%s' skin." % (old_product, skinName)) 93 skins.addSkinSelection(skinName, ','.join(paths)) 94 95 def recriateSitemaps(smaps): 96 msg = "Recriation Sitemaps: " 97 if smaps: 98 logger.info(msg + "Process %s sitemaps." % ( 99 [sm.getPath() for sm in smaps])) 100 fields = ['id', 'sitemapType', 'portalTypes', 'states', 101 'blackout_list','reg_exp', 'urls', 'pingTransitions'] 102 for smb in smaps: 103 # get sitemap properties 104 sm_path = smb.getPath() 105 sm = smb.getObject() 106 container = aq_parent(sm) 107 data = {} 108 for fn in fields: 109 data[fn] = sm.getField(fn).getAccessor(sm)() 110 # Replace old GoogleSitemap by new one with 111 # previous properties 112 container.manage_delObjects(data['id']) 113 container.invokeFactory("Sitemap", id=data['id']) 114 new_sm = getattr(container, data['id']) 115 new_sm.update(**data) 116 new_sm.at_post_create_script() 117 logger.info("Successfully replaced '%s' Sitemap" % sm_path) 118 119 def getOldGSitemaps(site): 120 catalog = getToolByName(site, 'portal_catalog') 121 smaps = catalog(portal_type="Sitemap") 122 old_smb = [smb for smb in smaps \ 123 if 'qPloneGoogleSitemaps' in str(smb.getObject().__class__)] 124 return old_smb 125 126 def migrate_qPGSM(context): 127 """ Clean-up qPloneGoogleSitemaps product artefacts and 128 recriate sitemaps from quintagroup.plonegooglesitemaps 129 package version 1.0. 130 """ 131 if context.readDataFile('gsm_migration.txt') is None: 132 return 133 134 site = context.getSite() 135 cleanup(site) 136 old_gsmaps = getOldGSitemaps(site) 137 if old_gsmaps: 138 recriateSitemaps(old_gsmaps) 139 logger.info("Successfully migrated old GoogleSitemaps.") 140 else: 141 logger.info("No old GoogleSitemaps found.") 142 143 -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/tests/base.py
r2555 r2841 11 11 from zope.interface import Interface 12 12 from zope.component import testing 13 from zope.interface import alsoProvides 13 14 from Testing import ZopeTestCase as ztc 14 15 … … 27 28 from quintagroup.plonegooglesitemaps.config import PROJECTNAME 28 29 from quintagroup.plonegooglesitemaps.config import ping_googlesitemap 30 from quintagroup.plonegooglesitemaps.config import SUPPORT_BLAYER 29 31 from quintagroup.plonegooglesitemaps.browser import mobilesitemapview 32 from quintagroup.plonegooglesitemaps.interfaces import IGoogleSitemapsLayer 30 33 31 34 quintagroup.plonegooglesitemaps.config.testing = 1 … … 70 73 self.workflow = self.portal.portal_workflow 71 74 self.orig_mobile_ifaces = None 75 alsoProvides(self.portal.REQUEST, IGoogleSitemapsLayer) 72 76 73 77 def patchMobile(self): -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/tests/testInstallation.py
r2747 r2841 103 103 self.assertEqual(brain.gsm_stock, gsm_stock) 104 104 105 def test_browser_layer(self): 106 if not SUPPORT_BLAYER: 107 return 108 109 from plone.browserlayer import utils 110 self.assert_(IGoogleSitemapsLayer in utils.registered_layers(), 111 "Not registered 'IGoogleSitemapsLayer' browser layer") 112 105 113 106 114 class TestGoogleSitemapsUninstallation(TestCase): … … 125 133 'Configlet found after uninstallation') 126 134 135 def test_browserlayer_uninstall(self): 136 if not SUPPORT_BLAYER: 137 return 138 139 from plone.browserlayer import utils 140 self.assertEqual(IGoogleSitemapsLayer in utils.registered_layers(), False, 141 "Still registered 'IGoogleSitemapsLayer' browser layer") 142 127 143 128 144 def test_suite(): -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/tests/testNewsSitemaps.py
r2750 r2841 259 259 sitemapType="news") 260 260 context = self.portal['news-sitemaps'] 261 self.nsmv = queryMultiAdapter((context, TestRequest()), name="news-sitemap.xml") 261 request = TestRequest() 262 alsoProvides(request, IGoogleSitemapsLayer) 263 self.nsmv = queryMultiAdapter((context, request), name="news-sitemap.xml") 262 264 263 265 self.brain = self.portal.portal_catalog(portal_type="Document")[0] -
quintagroup.plonegooglesitemaps/trunk/quintagroup/plonegooglesitemaps/tests/testUpgrade.py
r2601 r2841 3 3 # 4 4 5 import logging 5 6 from base import * 6 7 from zope.component import getSiteManager 8 from StringIO import StringIO 7 9 8 10 from Products.CMFPlone.utils import _createObjectByType … … 11 13 from quintagroup.plonegooglesitemaps import config 12 14 from quintagroup.plonegooglesitemaps import upgrades as gsm_upgrades 15 from quintagroup.plonegooglesitemaps import setuphandlers as sh 13 16 from quintagroup.canonicalpath.interfaces import ICanonicalPath 14 17 from quintagroup.canonicalpath.interfaces import ICanonicalLink … … 104 107 self.setup.setLastVersionForProfile(self.profile, orig_ver) 105 108 109 try: 110 from Products.qPloneGoogleSitemaps.content.sitemap import Sitemap as OldSitemap 111 except ImportError: 112 PRESENT_OLD_PRODUCT = False 113 else: 114 PRESENT_OLD_PRODUCT = True 115 116 class TestMigrationFromProduct(TestCase): 117 118 def afterSetUp(self): 119 super(TestMigrationFromProduct, self).afterSetUp() 120 self.patch_logger() 121 self.gs = self.portal.portal_setup 122 self.profile = u'profile-quintagroup.plonegooglesitemaps:migrate_qPGSM' 123 self.step = "migrate_qPGSM" 124 125 def patch_logger(self): 126 logger = logging.Logger("test:GSM", logging.NOTSET) 127 self.log = StringIO() 128 self.thndlr = logging.StreamHandler(self.log) 129 self.thndlr.setLevel(logging.DEBUG) 130 self.thndlr.setFormatter(logging.Formatter("%(message)s")) 131 logger.addHandler(self.thndlr) 132 133 self.orig_logger = sh.logger 134 sh.logger = logger 135 136 def beforeTearDown(self): 137 sh.logger = self.orig_logger 138 139 def chkLog(self, chkstr): 140 self.thndlr.flush() 141 self.log.seek(0) 142 logs = self.log.getvalue().split('\n') 143 return chkstr in logs 144 145 def testRemoveOldConfiglet(self): 146 chk_str = "Unregistered 'qPloneGoogleSitemaps' "\ 147 "configlet from portal_controlpanel tool." 148 # 1. No qPloneGoogleSitemaps configlet 149 self.gs.runImportStepFromProfile(self.profile, self.step) 150 self.assert_(not self.chkLog(chk_str), self.log.getvalue()) 151 # 2. qPloneGoogleSitemaps configlet in portal 152 self.portal.portal_controlpanel.registerConfiglet( 153 id="qPloneGoogleSitemaps", name="qPloneGoogleSitemaps", 154 action="string:") 155 self.gs.runImportStepFromProfile(self.profile, self.step) 156 self.assert_(self.chkLog(chk_str), self.log.getvalue()) 157 158 def testRemoveOldSkinLayer(self): 159 chk_str = "Removed 'qPloneGoogleSitemaps' from 'Plone Default' skin." 160 # 1. No qPloneGoogleSitemaps layer in portal_skins 161 self.gs.runImportStepFromProfile(self.profile, self.step) 162 self.assert_(not self.chkLog(chk_str), self.log.getvalue()) 163 # 2. qPloneGoogleSitemaps layer in portal_skins 164 skins = self.portal.portal_skins 165 skinpath = 'qPloneGoogleSitemaps,' + skins.getSkinPath("Plone Default") 166 skins._getSelections()["Plone Default"] = skinpath 167 self.gs.runImportStepFromProfile(self.profile, self.step) 168 self.assert_(self.chkLog(chk_str), self.log.getvalue()) 169 170 def testRecriateOldSitemaps(self): 171 chk_str = "Successfully replaced '/%s/sitemap.xml' Sitemap" \ 172 % self.portal.id 173 # 1. No old sitemap present in portal 174 self.gs.runImportStepFromProfile(self.profile, self.step) 175 self.assert_(not self.chkLog(chk_str), self.log.getvalue()) 176 # 2. Add old sitemap object in to portal 177 self.portal.invokeFactory("Sitemap", 'sitemap.xml') 178 self.assert_('sitemap.xml' in self.portal.objectIds(), self.portal.objectIds()) 179 sm = self.portal['sitemap.xml'] 180 sm.__class__ = OldSitemap 181 self.gs.runImportStepFromProfile(self.profile, self.step) 182 self.assert_(self.chkLog(chk_str), self.log.getvalue()) 183 106 184 107 185 def test_suite(): … … 109 187 suite = TestSuite() 110 188 suite.addTest(makeSuite(TestUpgrade)) 189 if PRESENT_OLD_PRODUCT: 190 suite.addTest(makeSuite(TestMigrationFromProduct)) 191 111 192 return suite 112 193
Note: See TracChangeset
for help on using the changeset viewer.