Initial commit
This commit is contained in:
commit
5cfec13d6f
7 changed files with 635 additions and 0 deletions
79
messages.py
Normal file
79
messages.py
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
from . import message
|
||||
|
||||
class Messages():
|
||||
"""
|
||||
Message storage class which preserves thread hierarchy.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.by_id = {}
|
||||
self.by_parent = {}
|
||||
|
||||
def add_raw(self, raw_message):
|
||||
"""
|
||||
add_raw(raw_message) -> None
|
||||
|
||||
Create a message from raw data and add it.
|
||||
"""
|
||||
|
||||
mes = message.Message(raw_message)
|
||||
|
||||
self.add(mes)
|
||||
|
||||
def add(self, mes):
|
||||
"""
|
||||
add(message) -> None
|
||||
|
||||
Add a message to the structure.
|
||||
"""
|
||||
|
||||
self.remove(mes.id())
|
||||
|
||||
self.by_id[mes.id()] = mes
|
||||
|
||||
if mes.parent():
|
||||
if not mes.parent() in self.by_parent:
|
||||
self.by_parent[parent] = []
|
||||
self.by_parent[mes.parent()].append(mes)
|
||||
|
||||
def remove(self, mes):
|
||||
"""
|
||||
remove(message) -> None
|
||||
|
||||
Remove a message from the structure.
|
||||
"""
|
||||
|
||||
if mes.id() in self.by_id:
|
||||
self.by_id.pop(mes.id())
|
||||
|
||||
if mes.parent() and mes in self.get_children(mes.parent()):
|
||||
self.by_parent[mes.parent()].remove(mes)
|
||||
|
||||
def get(self, mid):
|
||||
"""
|
||||
get(message_id) -> Message
|
||||
|
||||
Returns the message with the given id, if found.
|
||||
"""
|
||||
|
||||
if mid in self.by_id:
|
||||
return self.by_id[mid]
|
||||
|
||||
def get_parent(self, mes):
|
||||
"""
|
||||
get_parent(message) -> str
|
||||
|
||||
Returns the message's parent.
|
||||
Returns None if no parent was found.
|
||||
"""
|
||||
|
||||
return self.get(mes.parent())
|
||||
|
||||
def get_children(self, mes):
|
||||
"""
|
||||
get_children(message) -> list
|
||||
|
||||
Returns a list of children of the given message.
|
||||
"""
|
||||
|
||||
return self.by_parent[mes.id()]
|
||||
Loading…
Add table
Add a link
Reference in a new issue