Initial commit

This commit is contained in:
Joscha 2016-05-06 11:12:03 +02:00
commit 5cfec13d6f
7 changed files with 635 additions and 0 deletions

79
messages.py Normal file
View 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()]