def __repr__(self): return "<Channel %r>" % (self.name)
def __init__(self, cfg):
+ self.mustquit = None
self.starttime = time.time()
self.cfg = cfg
self.trigger = cfg.trigger
self.fdlist = []
def query(self, *args, **kwargs):
- if 'norecurse' in kwargs:
- norecurse = kwargs['norecurse']
- del kwargs['norecurse']
+ if 'noretry' in kwargs:
+ noretry = kwargs['noretry']
+ del kwargs['noretry']
else:
- norecurse = False
+ noretry = False
self.log("[SQL]", "?", "query(%s, %s)" % (', '.join([repr(i) for i in args]), ', '.join([str(key)+"="+repr(kwargs[key]) for key in kwargs])))
try:
return res
except MySQLdb.MySQLError as e:
self.log("[SQL]", "!", "MySQL error! %r" % (e))
- if not norecurse:
+ if not noretry:
dbsetup()
- return self.query(*args, norecurse=True, **kwargs)
+ return self.query(*args, noretry=True, **kwargs)
else:
raise e
+ def querycb(self, cb, *args, **kwargs):
+ def run_query():
+ cb(self.query(*args, **kwargs))
+ threading.Thread(target=run_query).start()
+
def newbot(self, nick, user, bind, authname, authpass, server, port, realname):
if bind is None: bind = ''
obj = bot.Bot(self, nick, user, bind, authname, authpass, server, port, realname)
return chan
def poll(self):
+ timeout_seconds = 30
if self.potype == "poll":
- return [fd for (fd, ev) in self.po.poll()]
+ pollres = self.po.poll(timeout_seconds * 1000)
+ return [fd for (fd, ev) in pollres]
elif self.potype == "select":
- return select.select(self.fdlist, [], [])[0]
+ return select.select(self.fdlist, [], [], timeout_seconds)[0]
def connectall(self):
for bot in self.bots.values():
for fileno in poready:
for line in main.fd(fileno).getdata():
main.fd(fileno).parse(line)
+ if main.mustquit is not None:
+ raise main.mustquit
if __name__ == '__main__':
try: os.rename('logfile', 'oldlogs/%s' % (time.time()))