diff -r 0521cf830eb9 -r 645cf9c4441e log_line.py --- a/log_line.py Tue Feb 10 22:59:52 2009 +0200 +++ b/log_line.py Tue Feb 10 23:00:11 2009 +0200 @@ -4,17 +4,101 @@ class LogTypes : """ - Definitions of the various LogLines types + Definitions of the various LogLines types: + + LogTypes.RAW + LogTypes.LOG_OPEN + LogTypes.LOG_CLOSE + + LogTypes.MSG + LogTypes.NOTICE + LogTypes.ACTION + + LogTypes.JOIN + LogTypes.PART + LogTypes.KICK + LogTypes.MODE + + LogTypes.NICK + LogTypes.QUIT + + LogTypes.TOPIC + + LogTypes.SELF_NOTICE + LogTypes.SELF_NICK """ + + # list of LogType values by name + LIST = [ + ## special + # unknown type, may or may not have a timestamp, no source, only data + ('RAW', 0x01), + + # log opened + ('LOG_OPEN', 0x02), + + # log closed + ('LOG_CLOSE', 0x03), + + ## messages + # normal message + ('MSG', 0x10), + + # notice + ('NOTICE', 0x11), + + # CTCP action + ('ACTION', 0x12), + + ## user-channel stats + # join + ('JOIN', 0x21), + + # part + ('PART', 0x22), + + # kick + ('KICK', 0x25), + + # channel modes + ('MODE', 0x26), + + ## user status + # nick-change + ('NICK', 0x31), + + # quit + ('QUIT', 0x32), + + ## general channel status + # topic changed + ('TOPIC', 0x41), + + ## our own actions + ('SELF_NOTICE', 0x51), + ('SELF_NICK', 0x52), + ] - # unknown type, may or may not have a timestamp, no source, only data - RAW = 0x01 + @classmethod + def name_from_code (cls, code) : + """ + Looks up a LogType name by code + """ + + return dict((type, name) for name, type in cls.LIST)[code] + +# apply as attributes +for name, code in LogTypes.LIST : + setattr(LogTypes, name, code) class LogLine (object) : """ An event on some specific channel """ + # the LogChannel + channel = None + # the offset, only garunteed to be unique for a specific channel and date offset = None @@ -24,20 +108,30 @@ # the UTC timestamp of the event timestamp = None - # the event source + # the event source, this should be a source = None + # possible event target, for certain types (kick, nick) + target = None + # associated data (message, etc) data = None - def __init__ (self, offset, type, timestamp, source, data) : + def __init__ (self, channel, offset, type, timestamp, source, target, data) : """ Initialize with given values """ + self.channel = channel self.offset = offset self.type = type self.timestamp = timestamp self.source = source + self.target = target self.data = data + + def __repr__ (self) : + return "channel=%s, offset=%s, type=%s, timestamp=%s, source=%s, target=%s, data=%s" % ( + self.channel, self.offset, LogTypes.name_from_code(self.type), self.timestamp, self.source, self.target, self.data + )