Add lua loading; Not supporting for now...

This commit is contained in:
Maxim Khomutov 2023-07-20 06:44:23 +03:00
parent 752e981462
commit dbe8b14d7f
2 changed files with 35 additions and 12 deletions

View File

@ -6,3 +6,4 @@ fastapi~=0.100.0
starlette~=0.27.0 starlette~=0.27.0
pydantic~=2.0.2 pydantic~=2.0.2
click~=8.1.4 click~=8.1.4
lupa~=2.0

View File

@ -1,22 +1,33 @@
import asyncio import asyncio
import os import os
# noinspection PyUnresolvedReferences
import lupa.lua53
from lupa.lua53 import LuaRuntime
from core import get_logger from core import get_logger
class MP: class MP:
def __init__(self): def __init__(self, name):
pass self.name = name
self.log = get_logger(f"LuaPlugin | {name}")
def log_info(self, *args):
s = ""
for i in args:
s += i
self.log.info(s)
class LuaPluginsLoader: class LuaPluginsLoader:
def __init__(self, plugins_dir): def __init__(self, plugins_dir):
self.loop = asyncio.get_event_loop() self.loop = asyncio.get_event_loop()
self.plugins_dir = plugins_dir
self.lua_plugins = {} self.lua_plugins = {}
self.lua_plugins_tasks = [] self.lua_plugins_tasks = []
self.plugins_dir = plugins_dir
self.lua_dirs = [] self.lua_dirs = []
self.log = get_logger("LuaPluginsLoader") self.log = get_logger("LuaPluginsLoader")
self.loaded_str = "Lua plugins: " self.loaded_str = "Lua plugins: "
@ -28,18 +39,29 @@ class LuaPluginsLoader:
async def load(self): async def load(self):
self.log.debug("Loading Lua plugins...") self.log.debug("Loading Lua plugins...")
py_folders = ev.call_event("_plugins_get")[0] py_folders = ev.call_event("_plugins_get")[0]
folders = []
for obj in os.listdir(self.plugins_dir): for obj in os.listdir(self.plugins_dir):
path = os.path.join(self.plugins_dir, obj) path = os.path.join(self.plugins_dir, obj)
if os.path.isdir(path) and obj not in py_folders and obj not in "__pycache__": if os.path.isdir(path) and obj not in py_folders and obj not in "__pycache__":
if os.path.isfile(os.path.join(path, "main.lua")): if os.path.isfile(os.path.join(path, "main.lua")):
folders.append(path) self.lua_dirs.append([path, obj])
self.log.debug(f"py_folders {py_folders}, folders {folders}") self.log.debug(f"py_folders {py_folders}, lua_dirs {self.lua_dirs}")
# for dirpath, dirnames, filenames in os.walk(f"/{self.plugins_dir}/{plugin_dir}"): for path, obj in self.lua_dirs:
# if "main.lua" in filenames: lua = LuaRuntime(encoding=config.enc, source_encoding=config.enc)
# return os.path.join(dirpath, "main.lua") mp = MP(obj)
lua.globals().MP = mp
lua.globals().print = mp.log_info
code = f'package.path = package.path.."' \
f';{self.plugins_dir}/{obj}/?.lua' \
f';{self.plugins_dir}/{obj}/lua/?.lua' \
f';modules/PluginsLoader/lua_libs/?.lua"'
with open(os.path.join(path, "main.lua"), 'r', encoding=config.enc) as f:
code += f.read()
lua.execute(code)
async def start(self, _): ... async def start(self, _):
async def unload(self, _): ... ...
async def unload(self, _):
...