New print (Now print tables as json);

Fix _recursive_dict_encode;
Fix lua.globals().onInit();
This commit is contained in:
Maxim Khomutov 2023-07-22 01:48:55 +03:00
parent 1b5ddbdd45
commit d7073d9124

View File

@ -6,7 +6,7 @@ import random
import shutil import shutil
from threading import Thread from threading import Thread
from lupa.lua53 import LuaRuntime from lupa.lua54 import LuaRuntime
from core import get_logger from core import get_logger
@ -31,6 +31,10 @@ class MP:
} }
def _print(self, *args): def _print(self, *args):
args = list(args)
for i, arg in enumerate(args):
if "LuaTable" in str(type(arg)):
args[i] = self._lua.globals().Util.JsonEncode(arg)
s = " ".join(map(str, args)) s = " ".join(map(str, args))
self.log.info(s) self.log.info(s)
@ -240,18 +244,19 @@ class Util:
return [i for i in new_list if i is not None] return [i for i in new_list if i is not None]
def _recursive_dict_encode(self, table): def _recursive_dict_encode(self, table):
new_dict = dict(table)
for k, v in table.items(): for k, v in table.items():
if not isinstance(v, (int, float, bool, str, dict, list)) and "LuaTable" not in str(type(v)): if not isinstance(v, (int, float, bool, str, dict, list)) and "LuaTable" not in str(type(v)):
table[k] = None new_dict[k] = None
continue continue
if "LuaTable" in str(type(v)): if "LuaTable" in str(type(v)):
d = dict(v) d = dict(v)
if all(isinstance(i, int) for i in d.keys()): if all(isinstance(i, int) for i in d.keys()):
table[k] = self._recursive_list_encode(d) new_dict[k] = self._recursive_list_encode(d)
continue continue
else: else:
table[k] = self._recursive_dict_encode(d) new_dict[k] = self._recursive_dict_encode(d)
return {k: v for k, v in dict(table).items() if v is not None} return {k: v for k, v in new_dict.items() if v is not None}
def JsonEncode(self, table): def JsonEncode(self, table):
self.log.debug("requesting JsonEncode()") self.log.debug("requesting JsonEncode()")
@ -516,10 +521,10 @@ class LuaPluginsLoader:
def _start(self, obj, lua, file): def _start(self, obj, lua, file):
try: try:
f = lua.globals().loadfile(os.path.abspath(f"plugins/{obj}/{file}")) lua.globals().loadfile(f"plugins/{obj}/{file}")()
f()
self.lua_plugins[obj]['ok'] = True self.lua_plugins[obj]['ok'] = True
self.loaded_str += f"{obj}:ok, " self.loaded_str += f"{obj}:ok, "
lua.globals().onInit()
lua.globals().MP.TriggerLocalEvent("onInit") lua.globals().MP.TriggerLocalEvent("onInit")
except Exception as e: except Exception as e:
self.loaded_str += f"{obj}:no, " self.loaded_str += f"{obj}:no, "
@ -540,17 +545,18 @@ class LuaPluginsLoader:
for path, obj in self.lua_dirs: for path, obj in self.lua_dirs:
# noinspection PyArgumentList # noinspection PyArgumentList
lua = LuaRuntime(encoding=config.enc, source_encoding=config.enc, unpack_returned_tuples=True) lua = LuaRuntime(encoding=config.enc, source_encoding=config.enc, unpack_returned_tuples=True)
lua.globals().printRaw = lua.globals().print lua_globals = lua.globals()
lua.globals().exit = lambda x: self.log.info(f"{obj}: You can't disable server..") lua_globals.printRaw = lua.globals().print
lua_globals.exit = lambda x: self.log.info(f"{obj}: You can't disable server..")
mp = MP(obj, lua) mp = MP(obj, lua)
lua.globals().MP = mp lua_globals.MP = mp
lua.globals().print = mp._print lua_globals.print = mp._print
lua.globals().Util = Util(obj, lua) lua_globals.Util = Util(obj, lua)
lua.globals().FP = FP(obj, lua) lua_globals.FP = FP(obj, lua)
pa = os.path.abspath(self.plugins_dir) pa = os.path.abspath(self.plugins_dir)
p0 = os.path.join(pa, obj, "?.lua") p0 = os.path.join(pa, obj, "?.lua")
p1 = os.path.join(pa, obj, "lua", "?.lua") p1 = os.path.join(pa, obj, "lua", "?.lua")
lua.globals().package.path += f';{p0};{p1}' lua_globals.package.path += f';{p0};{p1}'
# with open("modules/PluginsLoader/add_in.lua", "r") as f: # with open("modules/PluginsLoader/add_in.lua", "r") as f:
# code += f.read() # code += f.read()
self.lua_plugins.update({obj: {"mp": mp, "lua": lua, "thread": None, "ok": False}}) self.lua_plugins.update({obj: {"mp": mp, "lua": lua, "thread": None, "ok": False}})