Modify context reload for better maintainability

This commit is contained in:
nemunaire 2014-10-09 07:39:38 +02:00
parent 4dd837cf4b
commit 4776fbe931
7 changed files with 83 additions and 16 deletions

31
bot.py
View File

@ -429,6 +429,9 @@ class Bot(threading.Thread):
def hotswap(bak): def hotswap(bak):
bak.stop = True bak.stop = True
if bak.event_timer is not None:
bak.event_timer.cancel()
new = Bot(str(bak.ip), bak.modules_paths, bak.data_path) new = Bot(str(bak.ip), bak.modules_paths, bak.data_path)
new.servers = bak.servers new.servers = bak.servers
new.modules = bak.modules new.modules = bak.modules
@ -436,6 +439,8 @@ def hotswap(bak):
new.events = bak.events new.events = bak.events
new.hooks = bak.hooks new.hooks = bak.hooks
new.network = bak.network new.network = bak.network
new._update_event_timer()
return new return new
def reload(): def reload():
@ -455,10 +460,8 @@ def reload():
import hooks import hooks
imp.reload(hooks) imp.reload(hooks)
import hooks.manager
imp.reload(hooks.manager) hooks.reload()
import hooks.messagehook
imp.reload(hooks.messagehook)
import importer import importer
imp.reload(importer) imp.reload(importer)
@ -466,28 +469,24 @@ def reload():
import message import message
imp.reload(message) imp.reload(message)
message.reload()
import prompt import prompt
imp.reload(prompt) imp.reload(prompt)
import prompt.builtins
imp.reload(prompt.builtins) prompt.reload()
import server import server
rl,wl,xl = server._rlist,server._wlist,server._xlist rl,wl,xl = server._rlist,server._wlist,server._xlist
imp.reload(server) imp.reload(server)
server._rlist,server._wlist,server._xlist = rl,wl,xl server._rlist,server._wlist,server._xlist = rl,wl,xl
import server.socket
imp.reload(server.socket) server.reload()
import server.IRC
imp.reload(server.IRC)
import tools import tools
imp.reload(tools) imp.reload(tools)
import tools.countdown
imp.reload(tools.countdown) tools.reload()
import tools.date
imp.reload(tools.date)
import tools.web
imp.reload(tools.web)
import xmlparser import xmlparser
imp.reload(xmlparser) imp.reload(xmlparser)

View File

@ -16,6 +16,8 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import imp
from exception import IRCException from exception import IRCException
def call_game(call, *args, **kargs): def call_game(call, *args, **kargs):
@ -74,3 +76,11 @@ def hook(store, *args, **kargs):
last_registered.append((store, MessageHook(call, *args, **kargs))) last_registered.append((store, MessageHook(call, *args, **kargs)))
return call return call
return sec return sec
def reload():
import hooks.manager
imp.reload(hooks.manager)
import hooks.messagehook
imp.reload(hooks.messagehook)

View File

@ -17,6 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime, timezone from datetime import datetime, timezone
import imp
class AbstractMessage: class AbstractMessage:
@ -158,3 +159,13 @@ class OwnerCommand(Command):
"""This class represents a special command incomming from the owner""" """This class represents a special command incomming from the owner"""
pass pass
def reload():
import message.visitor
imp.reload(message.visitor)
import message.printer
imp.reload(message.printer)
message.printer.reload()

View File

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Nemubot is a smart and modulable IM bot.
# Copyright (C) 2012-2014 nemunaire
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import imp
def reload():
import message.printer.IRC
imp.reload(message.printer.IRC)

View File

@ -101,3 +101,7 @@ class Prompt:
def hotswap(prompt): def hotswap(prompt):
return Prompt(prompt.HOOKS_CAPS, prompt.HOOKS_LIST) return Prompt(prompt.HOOKS_CAPS, prompt.HOOKS_LIST)
def reload():
import prompt.builtins
imp.reload(prompt.builtins)

View File

@ -17,6 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import io import io
import imp
import logging import logging
import socket import socket
import queue import queue
@ -143,3 +144,11 @@ class AbstractServer(io.IOBase):
"""Exception occurs in fd""" """Exception occurs in fd"""
self.logger.warning("Unhandle file descriptor exception on server %s", self.logger.warning("Unhandle file descriptor exception on server %s",
self.id) self.id)
def reload():
import server.socket
imp.reload(server.socket)
import server.IRC
imp.reload(server.IRC)

View File

@ -31,3 +31,14 @@ def ipToInt(ip):
for b in ip.split("."): for b in ip.split("."):
sum = 256 * sum + int(b) sum = 256 * sum + int(b)
return sum return sum
def reload():
import tools.countdown
imp.reload(tools.countdown)
import tools.date
imp.reload(tools.date)
import tools.web
imp.reload(tools.web)