Fix handling of comments with invalid transforms. Write an error msg to the log and just return the untransformed text.

This commit is contained in:
Timo Stollenwerk 2012-07-12 10:26:39 +02:00
parent 08f11534ea
commit c47689af42
3 changed files with 30 additions and 4 deletions

View File

@ -21,6 +21,10 @@ Changelog
default type is set properly when creating a new comment. default type is set properly when creating a new comment.
[timo] [timo]
- Fix handling of comments with invalid transforms. Write an error msg
to the log and just return the untransformed text.
[timo]
2.1.8 (unreleased) 2.1.8 (unreleased)
------------------ ------------------

View File

@ -142,10 +142,22 @@ class Comment(CatalogAware, WorkflowAware, DynamicType, Traversable,
return '' return ''
if isinstance(text, unicode): if isinstance(text, unicode):
text = text.encode('utf8') text = text.encode('utf8')
return transforms.convertTo(targetMimetype, transform = transforms.convertTo(
text, targetMimetype,
context=self, text,
mimetype=sourceMimetype).getData() context=self,
mimetype=sourceMimetype)
if transform:
return transform.getData()
else:
logger = logging.getLogger("plone.app.discussion")
logger.error(
_(u"Transform '%s' => '%s' not available. Failed to transform comment '%s'." % (
sourceMimetype,
targetMimetype,
self.absolute_url(),
)))
return text
def Title(self): def Title(self):
"""The title of the comment. """The title of the comment.

View File

@ -177,6 +177,16 @@ class CommentTest(unittest.TestCase):
comment1.text = 'para' comment1.text = 'para'
self.assertEqual(comment1.getText(targetMimetype='text/plain'), 'para') self.assertEqual(comment1.getText(targetMimetype='text/plain'), 'para')
def test_getText_invalid_transformation_raises_error(self):
conversation = IConversation(self.portal.doc1)
comment1 = createObject('plone.Comment')
comment1.mime_type = 'text/x-html-safe'
comment1.text = 'para'
conversation.addComment(comment1)
self.assertEqual(
comment1.getText(targetMimetype='text/html'),
'para')
def test_traversal(self): def test_traversal(self):
# make sure comments are traversable, have an id, absolute_url and # make sure comments are traversable, have an id, absolute_url and
# physical path # physical path