--- 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
+ )