Ignore:
Timestamp:
May 30, 2011 8:48:04 AM (13 years ago)
Author:
vmaksymiv
Message:

has added upgrade step for fixing escaped seo properties

Location:
quintagroup.seoptimizer/trunk/quintagroup/seoptimizer
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/profiles.zcml

    r2139 r3223  
    3838      profile="quintagroup.seoptimizer:default" /> 
    3939 
     40  <genericsetup:upgradeStep 
     41      title="Upgrade quintagroup.seoptimizer" 
     42      description="Unescape quintagroup.seoptimizer title and comment properties" 
     43      destination="4.0.5" 
     44      handler=".upgrades.unescapeOldTitle" 
     45      profile="quintagroup.seoptimizer:default" /> 
     46 
    4047</configure> 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/profiles/default/metadata.xml

    r2970 r3223  
    11<?xml version="1.0"?> 
    22<metadata> 
    3   <version>4.0.3</version> 
     3  <version>4.0.5</version> 
    44</metadata> 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/tests/testUtils.py

    r3189 r3223  
     1# -*- coding: utf8 -*- 
    12from unittest import TestSuite, makeSuite, TestCase 
    23from quintagroup.seoptimizer.util import unescape 
     
    67 
    78    def test_unicode_str_unescaping(self): 
    8         self.assertEqual(unescape(u"&&amp;-/&#91;"), u"&&-/[") 
     9        self.assertEqual(unescape("&&amp;-/&#91;"), "&&-/[") 
    910 
    1011    def test_str_unescaping(self): 
    11         self.assertEqual(unescape("&&amp;-/&#91;"), u"&&-/[") 
     12        self.assertEqual(unescape("&&amp;-/&#91;"), "&&-/[") 
     13 
     14    def test_entity_unicode_unescaping(self): 
     15        self.assertEqual(unescape(u"&&amp;ї".encode('utf-8')), 
     16                                  u"&&ї".encode('utf-8')) 
    1217 
    1318    def test_hex_unescaping(self): 
    14         self.assertEqual(unescape('&#x5B;'), u'[') 
     19        self.assertEqual(unescape('&#x5B;'), '[') 
    1520 
    1621    def test_simple_text_unescaping(self): 
    17         self.assertEqual(unescape("Simple text."), u"Simple text.") 
     22        self.assertEqual(unescape("Simple text."), "Simple text.") 
    1823 
    1924    def test_entity_hex_unescaping(self): 
    20         self.assertEqual(unescape('&amp;#x5B;'), u'&#x5B;') 
     25        self.assertEqual(unescape('&amp;#x5B;'), '&#x5B;') 
    2126 
    2227    def test_intity_dec_unescaping(self): 
    23         self.assertEqual(unescape('&amp;#91;'), u'&#91;') 
     28        self.assertEqual(unescape('&amp;#91;'), '&#91;') 
    2429 
    2530    def test_entity_dec_hex_unescaping(self): 
    26         self.assertEqual(unescape('&amp;#38;#x5B;'), u'&#38;#x5B;') 
     31        self.assertEqual(unescape('&amp;#38;#x5B;'), '&#38;#x5B;') 
    2732 
    2833    def test_fake_entity_unescaping(self): 
    29         self.assertEqual(unescape("&asd;"), u"&asd;") 
     34        self.assertEqual(unescape("&asd;"), "&asd;") 
     35 
     36    def test_aentity_unescaping(self): 
     37        self.assertEqual(unescape("&mdash;").encode('utf-8'), 
     38                         u"—".encode('utf-8')) 
    3039 
    3140 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/upgrades.py

    r3141 r3223  
    22from zope.component import queryMultiAdapter 
    33 
     4from Products.CMFCore.utils import getToolByName 
     5from Products.CMFPlone.utils import getSiteEncoding, safe_unicode 
     6 
     7from quintagroup.seoptimizer.browser.seo_configlet import ISEOConfigletSchema 
     8from quintagroup.seoptimizer.util import unescape 
    49from quintagroup.canonicalpath.interfaces  import ICanonicalLink 
    510from quintagroup.canonicalpath.adapters import PROPERTY_LINK 
     
    146151    removeSkin(plone_tools) 
    147152    migrateCanonical(plone_tools) 
     153 
     154 
     155def unescapeOldTitle(setuptool): 
     156    """ Upgrade quintagroup.seoptimizer title and comments properties. 
     157    """ 
     158    portal = getToolByName(setuptool, "portal_url").getPortalObject() 
     159    types = ISEOConfigletSchema(portal).types_seo_enabled 
     160 
     161    catalog = getToolByName(portal, "portal_catalog") 
     162    brains = catalog(portal_type=types) 
     163 
     164    for b in brains: 
     165        obj = b.getObject() 
     166        obj_enc = getSiteEncoding(obj) 
     167 
     168        if obj.hasProperty("qSEO_title"): 
     169            uni_qSEO_title = safe_unicode(obj.qSEO_title, encoding=obj_enc) 
     170            fixed_title = unescape(uni_qSEO_title).encode(obj_enc) 
     171            obj._updateProperty("qSEO_title", fixed_title) 
     172 
     173        if obj.hasProperty("qSEO_html_comment"): 
     174            uni_qSEO_html_comment = safe_unicode(obj.qSEO_html_comment, 
     175                                                 encoding=obj_enc) 
     176            fixed_comment = unescape(uni_qSEO_html_comment).encode(obj_enc) 
     177            obj._updateProperty("qSEO_html_comment", fixed_comment) 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/util.py

    r3189 r3223  
    5252    if m.group("ent"): 
    5353        try: 
    54             return entitydefs[m.group("ent")] 
     54            return unescape(entitydefs[m.group("ent")]) 
    5555        except KeyError: 
    5656            return m.group(0) 
     
    6666 
    6767def unescape(s): 
    68     result = expr.sub(_group_unescape, s) 
    69  
    70     if isinstance(s, unicode): 
    71         return result 
    72     else: 
    73         return unicode(result) 
     68    return expr.sub(_group_unescape, s) 
Note: See TracChangeset for help on using the changeset viewer.