#!/usr/bin/env python import re, time class OldOrigin(object): def __init__(self, origin): self.origin = origin self.split(origin) def __str__(self): return self.origin def split(self, origin): if origin and '!' in origin: self.nick, userHost = origin.split('!', 1) if '@' in userHost: self.user, self.host = userHost.split('@', 1) else: self.user, self.host = userHost, None else: self.nick, self.user, self.host = origin, None, None def setSender(self, nickname, args): if (not args) or (len(args) < 2): return target = args[1] if target == nickname: self.sender = self.nick else: self.sender = target class NewOrigin(object): source = re.compile(r'([^!]*)!?([^@]*)@?(.*)') def __init__(self, bot, source, args): match = NewOrigin.source.match(source or '') self.nick, self.user, self.host = match.groups() if len(args) > 1: target = args[1] else: target = None mappings = {bot.nick: self.nick, None: None} self.sender = mappings.get(target, target) source = 'sbp!n=sbp@bia.crschmidt.net' bot = type('Bot', (object,), {}) bot.nick = 'test' args = ['PRIVMSG', '#swhack'] before = time.clock() for i in xrange(100000): origin = OldOrigin(source) origin.setSender(bot.nick, args) del origin after = time.clock() print 'OLD:', after - before before = time.clock() for i in xrange(100000): origin = NewOrigin(bot, source, args) del origin after = time.clock() print 'NEW:', after - before before = time.clock() for i in xrange(500000): origin = OldOrigin(source) origin.setSender(bot.nick, args) del origin after = time.clock() print 'OLD:', after - before before = time.clock() for i in xrange(500000): origin = NewOrigin(bot, source, args) del origin after = time.clock() print 'NEW:', after - before