merge r47140, r47290, r47579 from davisagli-features: fix timezone handling when migrating legacy comments and when indexing
svn path=/plone.app.discussion/trunk/; revision=48358
This commit is contained in:
		
							parent
							
								
									9d83b4f0e6
								
							
						
					
					
						commit
						636bca745c
					
				@ -4,6 +4,14 @@ Changelog
 | 
			
		||||
2.0b1 (Unreleased)
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
- Fix issue where GMT datetimes were converted into local timezone DateTimes
 | 
			
		||||
  during indexing.
 | 
			
		||||
  [davisagli]
 | 
			
		||||
 | 
			
		||||
- Handle timezones correctly while converting dates during the migration of
 | 
			
		||||
  legacy comments.
 | 
			
		||||
  [davisagli]
 | 
			
		||||
 | 
			
		||||
- When returning a comment's title, give preference to its title attribute
 | 
			
		||||
  if set.
 | 
			
		||||
  [davisagli]
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,12 @@ from plone.app.discussion.comment import CommentFactory
 | 
			
		||||
from plone.app.discussion.interfaces import IConversation, IReplies, IComment
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def DT2dt(DT):
 | 
			
		||||
    """Convert a Zope DateTime (with timezone) into a Python datetime (GMT)."""
 | 
			
		||||
    DT = DT.toZone('GMT')
 | 
			
		||||
    return datetime(DT.year(), DT.month(), DT.day(), DT.hour(), DT.minute(), int(DT.second()))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class View(BrowserView):
 | 
			
		||||
    """Migration View
 | 
			
		||||
    """
 | 
			
		||||
@ -78,10 +84,8 @@ class View(BrowserView):
 | 
			
		||||
                    if email:
 | 
			
		||||
                        comment.author_email = email
 | 
			
		||||
 | 
			
		||||
                    comment.creation_date = datetime.fromtimestamp(
 | 
			
		||||
                        reply.creation_date)
 | 
			
		||||
                    comment.modification_date = datetime.fromtimestamp(
 | 
			
		||||
                        reply.modification_date)
 | 
			
		||||
                    comment.creation_date = DT2dt(reply.creation_date)
 | 
			
		||||
                    comment.modification_date = DT2dt(reply.modification_date)
 | 
			
		||||
 | 
			
		||||
                    comment.reply_to = in_reply_to
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -100,7 +100,8 @@ def effective(object):
 | 
			
		||||
                    object.creation_date.day,
 | 
			
		||||
                    object.creation_date.hour,
 | 
			
		||||
                    object.creation_date.minute,
 | 
			
		||||
                    object.creation_date.second)
 | 
			
		||||
                    object.creation_date.second,
 | 
			
		||||
                    'GMT')
 | 
			
		||||
 | 
			
		||||
@indexer(IComment)
 | 
			
		||||
def created(object):
 | 
			
		||||
@ -110,7 +111,8 @@ def created(object):
 | 
			
		||||
                    object.creation_date.day,
 | 
			
		||||
                    object.creation_date.hour,
 | 
			
		||||
                    object.creation_date.minute,
 | 
			
		||||
                    object.creation_date.second)
 | 
			
		||||
                    object.creation_date.second,
 | 
			
		||||
                    'GMT')
 | 
			
		||||
 | 
			
		||||
@indexer(IComment)
 | 
			
		||||
def modified(object):
 | 
			
		||||
@ -120,7 +122,8 @@ def modified(object):
 | 
			
		||||
                    object.modification_date.day,
 | 
			
		||||
                    object.modification_date.hour,
 | 
			
		||||
                    object.modification_date.minute,
 | 
			
		||||
                    object.modification_date.second)
 | 
			
		||||
                    object.modification_date.second,
 | 
			
		||||
                    'GMT')
 | 
			
		||||
 | 
			
		||||
# Override the conversation indexers for comments
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -151,11 +151,11 @@ class CommentIndexersTest(PloneTestCase):
 | 
			
		||||
    def test_dates(self):
 | 
			
		||||
        # Test if created, modified, effective etc. are set correctly
 | 
			
		||||
        self.assertEquals(catalog.created(self.comment)(),
 | 
			
		||||
                          DateTime(2006, 9, 17, 14, 18, 12))
 | 
			
		||||
                          DateTime(2006, 9, 17, 14, 18, 12, 'GMT'))
 | 
			
		||||
        self.assertEquals(catalog.effective(self.comment)(),
 | 
			
		||||
                          DateTime(2006, 9, 17, 14, 18, 12))
 | 
			
		||||
                          DateTime(2006, 9, 17, 14, 18, 12, 'GMT'))
 | 
			
		||||
        self.assertEquals(catalog.modified(self.comment)(),
 | 
			
		||||
                          DateTime(2008, 3, 12, 7, 32, 52))
 | 
			
		||||
                          DateTime(2008, 3, 12, 7, 32, 52, 'GMT'))
 | 
			
		||||
 | 
			
		||||
    def test_searchable_text(self):
 | 
			
		||||
        # Test if searchable text is a concatenation of title and comment text
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,8 @@ class MigrationTest(PloneTestCase):
 | 
			
		||||
        self.doc.talkback.createReply('My Title', 'My Text', Creator='Jim')
 | 
			
		||||
        reply = talkback.getReplies()[0]
 | 
			
		||||
        reply.setReplyTo(self.doc)
 | 
			
		||||
        reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6)
 | 
			
		||||
        reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7)
 | 
			
		||||
        reply.creation_date = DateTime(2003, 3, 11, 9, 28, 6, 'GMT')
 | 
			
		||||
        reply.modification_date = DateTime(2009, 7, 12, 19, 38, 7, 'GMT')
 | 
			
		||||
        self.assertEquals(reply.Title(), 'My Title')
 | 
			
		||||
        self.assertEquals(reply.EditableBody(), 'My Text')
 | 
			
		||||
        self.failUnless('Jim' in reply.listCreators())
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user