79 lines
1.4 KiB
Python
79 lines
1.4 KiB
Python
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()]
|