[~] console.del_command

[!] FIX plugins load | reload
This commit is contained in:
2024-07-29 15:20:35 +03:00
parent 7796e3970d
commit 243177ee6f
4 changed files with 35 additions and 8 deletions

View File

@@ -10,7 +10,7 @@ __title__ = 'KuiToi-Server'
__description__ = 'BeamingDrive Multiplayer server compatible with BeamMP clients.'
__url__ = 'https://github.com/kuitoi/kuitoi-Server'
__version__ = '0.4.8 (pre)'
__build__ = 2511 # Я это считаю лог файлами
__build__ = 2542 # Я это считаю лог файлами
__author__ = 'SantaSpeen'
__author_email__ = 'admin@kuitoi.su'
__license__ = "FPA"

View File

@@ -177,8 +177,10 @@ class TCPServer:
raise e
except KeyboardInterrupt:
pass
except ConnectionResetError as e:
self.log.debug(f"ConnectionResetError {e}")
except Exception as e:
self.log.error(f"Error: {e}")
self.log.exception(e)
raise e
finally:
self.run = False

View File

@@ -15,10 +15,12 @@ from prompt_toolkit import PromptSession, print_formatted_text, HTML
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.completion import NestedCompleter
from prompt_toolkit.history import FileHistory
try:
from prompt_toolkit.output.win32 import NoConsoleScreenBufferError
except AssertionError:
class NoConsoleScreenBufferError(Exception): ...
class NoConsoleScreenBufferError(Exception):
...
from prompt_toolkit.patch_stdout import patch_stdout
from core import get_logger
@@ -123,6 +125,22 @@ class Console:
def __update_completer(self):
self.completer = NestedCompleter.from_nested_dict(self.__alias)
def del_command(self, func):
self.__debug(f"delete command: func={func};")
keys = []
for k, v in self.__func.items():
if v['f'] is func:
keys.append(k)
for key in keys:
self.__debug(f"Delete: key={key}")
self.__alias.pop(key)
self.__alias["man"].pop(key)
self.__func.pop(key)
self.__man.pop(key)
self.__desc.pop(key)
self.__debug("Deleted.")
self.__update_completer()
def add_command(self, key: str, func, man: str = None, desc: str = None, custom_completer: dict = None) -> dict:
key = key.format(" ", "-")
@@ -258,6 +276,8 @@ class Console:
self.log(self.__not_found % cmd)
except KeyboardInterrupt:
raise KeyboardInterrupt
except ConnectionResetError as e:
self.__debug(f"ConnectionResetError {e}")
except Exception as e:
print(f"Error in console.py: {e}")
self.__logger.exception(e)

View File

@@ -31,7 +31,7 @@ class KuiToi:
self.__name = name
self.__dir = Path(self._plugins_dir) / self.__name
os.makedirs(self.__dir, exist_ok=True)
self.__events_funcs = []
self.__funcs = []
self.register_event = self.register
@property
@@ -67,11 +67,12 @@ class KuiToi:
def register(self, event_name, event_func):
self.log.debug(f"Registering event {event_name}")
self.__events_funcs.append(event_func)
self.__funcs.append(event_func)
ev.register(event_name, event_func)
def _unload(self):
for f in self.__events_funcs:
for f in self.__funcs:
console.del_command(f)
ev.unregister(f)
def call_event(self, event_name, *args, **kwargs):
@@ -106,6 +107,7 @@ class KuiToi:
def add_command(self, key, func, man, desc, custom_completer) -> dict:
self.log.debug("Requests add_command")
self.__funcs.append(func)
return console.add_command(key, func, man, desc, custom_completer)
@@ -139,12 +141,15 @@ class PluginsLoader:
ok, _, file, _ = await self._unload_by_name(x[1], True)
if ok:
if await self._load_by_file(file):
self.plugins[x[1]]['plugin'].start()
return f"Plugin reloaded ({time.monotonic() - t1:.1f}sec)"
return "Plugin not found"
return usage
case 'load':
if len(x) == 2:
if await self._load_by_file(x[1]):
name = await self._load_by_file(x[1])
if name:
self.plugins[name]['plugin'].start()
return "Plugin loaded"
return usage
case 'unload':
@@ -241,7 +246,7 @@ class PluginsLoader:
th.join()
self.loaded.append((pl_name, True))
self.log.debug(f"Plugin loaded: {file}. Settings: {self.plugins[pl_name]}")
return True
return pl_name
except Exception as e:
self.loaded.append((file, False))
self.log.error(i18n.plugins_error_loading.format(file, f"{e}"))