Use long timestamps as id
svn path=/plone.app.discussion/trunk/; revision=26964
This commit is contained in:
parent
51b076935e
commit
a2542ea5a8
@ -1,5 +1,6 @@
|
|||||||
"""The default comment class and factory.
|
"""The default comment class and factory.
|
||||||
"""
|
"""
|
||||||
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from zope.interface import implements
|
from zope.interface import implements
|
||||||
from zope.component.factory import Factory
|
from zope.component.factory import Factory
|
||||||
@ -42,8 +43,9 @@ class Comment(Explicit, Traversable, RoleManager, Owned):
|
|||||||
author_name = None
|
author_name = None
|
||||||
author_email = None
|
author_email = None
|
||||||
|
|
||||||
def __init__(self, id=0, conversation=None, **kw):
|
def __init__(self, conversation=None, **kw):
|
||||||
self.comment_id = id
|
self.comment_id = long(time.time() * 1e6)
|
||||||
|
|
||||||
self.__parent__ = conversation
|
self.__parent__ = conversation
|
||||||
self.creation_date = self.modification_date = datetime.now()
|
self.creation_date = self.modification_date = datetime.now()
|
||||||
|
|
||||||
|
@ -20,6 +20,13 @@ from zope.annotation.interfaces import IAnnotatable
|
|||||||
from BTrees.OIBTree import OIBTree
|
from BTrees.OIBTree import OIBTree
|
||||||
from BTrees.IOBTree import IOBTree
|
from BTrees.IOBTree import IOBTree
|
||||||
from BTrees.IIBTree import IIBTree, IISet
|
from BTrees.IIBTree import IIBTree, IISet
|
||||||
|
try:
|
||||||
|
from BTrees.LOBTree import LOBTree
|
||||||
|
from BTrees.LLBTree import LLBTree # TODO: Does this even exist?
|
||||||
|
except ImportError:
|
||||||
|
from BTrees.OOBTree import OOBTree as LOBTree
|
||||||
|
from BTrees.OOBTree import OOSet as LLSet
|
||||||
|
|
||||||
|
|
||||||
from Acquisition import Explicit
|
from Acquisition import Explicit
|
||||||
|
|
||||||
@ -42,11 +49,11 @@ class Conversation(Persistent, Explicit):
|
|||||||
self._last_comment_date = None
|
self._last_comment_date = None
|
||||||
|
|
||||||
# id -> comment - find comment by id
|
# id -> comment - find comment by id
|
||||||
self._comments = IOBTree()
|
self._comments = LOBTree()
|
||||||
|
|
||||||
# id -> IISet (children) - find all children for a given comment. 0 signifies root.
|
# id -> IISet (children) - find all children for a given comment. 0 signifies root.
|
||||||
self._children = IOBTree()
|
self._children = LOBTree()
|
||||||
|
|
||||||
def getId(self):
|
def getId(self):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
@ -64,7 +71,6 @@ class Conversation(Persistent, Explicit):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def last_comment_date(self):
|
def last_comment_date(self):
|
||||||
# TODO
|
|
||||||
return self._last_comment_date
|
return self._last_comment_date
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -76,10 +82,13 @@ class Conversation(Persistent, Explicit):
|
|||||||
return self._comments.values()
|
return self._comments.values()
|
||||||
|
|
||||||
def getThreads(self, start=0, size=None, root=None, depth=None):
|
def getThreads(self, start=0, size=None, root=None, depth=None):
|
||||||
|
# TODO:
|
||||||
return self._comments.values()
|
return self._comments.values()
|
||||||
|
|
||||||
def addComment(self, comment):
|
def addComment(self, comment):
|
||||||
id = len(self._comments) + 1
|
id = comment.comment_id
|
||||||
|
if id in self._comments:
|
||||||
|
id = max(self._comments.keys()) +1
|
||||||
self._comments[id] = comment
|
self._comments[id] = comment
|
||||||
comment.comment_id = id
|
comment.comment_id = id
|
||||||
|
|
||||||
@ -92,7 +101,7 @@ class Conversation(Persistent, Explicit):
|
|||||||
|
|
||||||
reply_to = comment.in_reply_to
|
reply_to = comment.in_reply_to
|
||||||
if not reply_to in self._children:
|
if not reply_to in self._children:
|
||||||
self._children[reply_to] = IISet()
|
self._children[reply_to] = LLSet()
|
||||||
self._children[reply_to].insert(id)
|
self._children[reply_to].insert(id)
|
||||||
|
|
||||||
# Dict API
|
# Dict API
|
||||||
|
@ -37,7 +37,7 @@ class ConversationTest(TestCase):
|
|||||||
conversation.addComment(comment)
|
conversation.addComment(comment)
|
||||||
|
|
||||||
# Check that the conversation methods return the correct data
|
# Check that the conversation methods return the correct data
|
||||||
self.assertEquals(comment.id, '1')
|
self.assert_(isinstance(comment.comment_id, long))
|
||||||
self.assertEquals(len(conversation.getComments()), 1)
|
self.assertEquals(len(conversation.getComments()), 1)
|
||||||
self.assertEquals(len(conversation.getThreads()), 1)
|
self.assertEquals(len(conversation.getThreads()), 1)
|
||||||
self.assertEquals(conversation.total_comments, 1)
|
self.assertEquals(conversation.total_comments, 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user