diff options
author | Yuchen Pei <hi@ypei.me> | 2021-08-26 18:52:59 +1000 |
---|---|---|
committer | Yuchen Pei <hi@ypei.me> | 2021-08-26 18:52:59 +1000 |
commit | 79b22ca49affbd5a56c399c26bce3e19833dbd2c (patch) | |
tree | 3616aeb0387f06d301007c12aecef7b14656245e | |
parent | 4284fd594d8f637a1d6728cb3af67efc25e439bc (diff) |
started generating graphviz dot file
-rw-r--r-- | gentree.py | 33 |
1 files changed, 28 insertions, 5 deletions
@@ -9,13 +9,15 @@ class LogType(Enum): class Message: def __init__(self): + self.id = -1 self.sender = "" self.message = "" self.reply_to_msgs = [] self.previous_msg = -1 def to_dict(self): - return {'sender': self.sender, + return {'id': self.id, + 'sender': self.sender, 'message': self.message, 'reply_to_msgs': self.reply_to_msgs, 'previous_msg': self.previous_msg} @@ -62,6 +64,8 @@ def parse_log_quassel(log): is_me = True else: nick = nick[1:-1] # removes <> + message.message = line + message.id = index # Remove special symbol for op if nick[0] in ['@', '%']: nick = nick[1:] @@ -72,7 +76,6 @@ def parse_log_quassel(log): for participant, msg_id in last_messages.items(): if payload.find(participant) != -1: message.reply_to_msgs.append(msg_id) - message.message = '/me ' + payload if is_me else payload messages.append(message) index += 1 return messages @@ -105,13 +108,33 @@ def parse_log(log): else: raise ValueError('Unknown irc log type.') +def gen_graph(meeting): + dot = """ +digraph meeting { + node [ + shape = box, + width = 40 + ]; +""" + for msg in meeting: + quoted_message = msg.message.replace('"', '\\"') + dot += f'\nm{str(msg.id)} [label="{quoted_message}"];' + if msg.id > 0: + dot += f'\nm{str(msg.id - 1)} -> m{str(msg.id)} [style="invis"];' + if msg.previous_msg > -1: + dot += f'\nm{str(msg.previous_msg)} -> m{str(msg.id)};' + for id in msg.reply_to_msgs: + dot += f'\nm{str(id)} -> m{str(msg.id)};' + dot += '\n}' + return dot def main(): log = open(sys.argv[1]).read() meeting = parse_log(log) - # graph = gen_graph(meeting) - pp = pprint.PrettyPrinter(indent=4) - pp.pprint([msg.to_dict() for msg in meeting]) + graph = gen_graph(meeting) + open(sys.argv[2], 'w').write(graph) + # pp = pprint.PrettyPrinter(indent=4) + # pp.pprint([msg.to_dict() for msg in meeting]) if __name__ == '__main__': main() |