Skip to content

Commit 02acdc6

Browse files
committed
has added upgrade step for fixing escaped seo properties
1 parent 5336cd4 commit 02acdc6

File tree

5 files changed

+57
-16
lines changed

5 files changed

+57
-16
lines changed

quintagroup/seoptimizer/profiles.zcml

+7
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,11 @@
3737
sortkey="1"
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>
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0"?>
22
<metadata>
3-
<version>4.0.3</version>
3+
<version>4.0.5</version>
44
</metadata>

quintagroup/seoptimizer/tests/testUtils.py

+17-8
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,41 @@
1+
# -*- coding: utf8 -*-
12
from unittest import TestSuite, makeSuite, TestCase
23
from quintagroup.seoptimizer.util import unescape
34

45

56
class TestUtils(TestCase):
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

3241
def test_suite():

quintagroup/seoptimizer/upgrades.py

+30
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import logging
22
from zope.component import queryMultiAdapter
33

4+
from Products.CMFCore.utils import getToolByName
5+
from Products.CMFPlone.utils import getSiteEncoding, safe_unicode
6+
7+
from quintagroup.seoptimizer.browser.seo_configlet import ISEOConfigletSchema
8+
from quintagroup.seoptimizer.util import unescape
49
from quintagroup.canonicalpath.interfaces import ICanonicalLink
510
from quintagroup.canonicalpath.adapters import PROPERTY_LINK
611

@@ -145,3 +150,28 @@ def upgrade_2_to_3(setuptool):
145150
removeNonUseSeoProperties(plone_tools)
146151
removeSkin(plone_tools)
147152
migrateCanonical(plone_tools)
153+
154+
155+
def 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/util.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def pop(self, k, *args, **kwargs):
5151
def _group_unescape(m):
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)
5757
if m.group("dec"):
@@ -65,9 +65,4 @@ def _group_unescape(m):
6565

6666

6767
def 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)

0 commit comments

Comments
 (0)