Implement loading new modules at runtime

This commit is contained in:
Mark Veidemanis 2018-02-23 23:26:21 +00:00
parent cb7142ef88
commit 378c4d9bba
5 changed files with 49 additions and 8 deletions

23
commands/loadmod.py Normal file
View File

@ -0,0 +1,23 @@
from core.main import *
from utils.loaders.single_loader import loadSingle
class Loadmod:
def __init__(self, register):
register("loadmod", self.loadmod)
def loadmod(self, addr, authed, data, obj, spl, success, failure, info, incUsage, length):
if authed:
if length == 2:
rtrn = loadSingle(spl[1], register)
if rtrn == True:
success("Loaded module %s" % spl[1])
return
else:
failure("Error loading module %s: %s" % (spl[1], rtrn))
return
else:
incUsage("loadmod")
return
else:
incUsage(None)
return

View File

@ -15,5 +15,6 @@
"stats": "stats [<name>]",
"save": "save <config|keyconf|pool|help|wholist|all>",
"load": "load <config|keyconf|pool|help|wholist|all>",
"dist": "dist"
}
"dist": "dist",
"loadmod": "loadmod <module>"
}

View File

@ -23,7 +23,7 @@ def parseCommand(addr, authed, data):
failure("No text was sent")
return
for i in CommandMap.keys():
if data.startswith(i):
if spl[0] == i:
CommandMap[i](addr, authed, data, obj, spl, success, failure, info, incUsage, length)
return
incUsage(None)

View File

@ -8,8 +8,8 @@ def loadCommands(func):
if filename.endswith('.py') and filename != "__init__.py":
commandName = filename[0:-3]
className = commandName.capitalize()
#try:
__import__('commands.%s' % commandName)
eval('commands.%s.%s(func)' % (commandName, className))
#except Exception as err:
# error("Exception while loading command %s:\n%s" % (commandName, err))
try:
__import__('commands.%s' % commandName)
eval('commands.%s.%s(func)' % (commandName, className))
except Exception as err:
error("Exception while loading command %s:\n%s" % (commandName, err))

View File

@ -0,0 +1,17 @@
from os import listdir
from core.main import *
from utils.logging.log import *
import commands
def loadSingle(command, func):
if command+".py" in listdir("commands"):
try:
if command in CommandMap.keys():
return "Cannot reload modules"
else:
className = command.capitalize()
__import__("commands.%s" % command)
eval("commands.%s.%s(func)" % (command, className))
return True
except Exception as err:
return err