mirror of
https://gitea.com/Lerking/XtendR.git
synced 2025-07-21 04:31:15 +02:00
#31 - Creating thread with callback, on pre_load(). /JL
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import time
|
||||
from xtendr.xtendrsystem import XtendRSystem
|
||||
|
||||
def my_callback():
|
||||
print("'example_plugin is finished pre-loading")
|
||||
|
||||
if __name__ == "__main__":
|
||||
"""Example usage of the PluginSystem.
|
||||
|
||||
@@ -15,7 +19,8 @@ if __name__ == "__main__":
|
||||
Detached plugin 'example_plugin'.
|
||||
"""
|
||||
system = XtendRSystem()
|
||||
system.attach("example_plugin") # Assuming 'example_plugin/plugin_info.json' exists
|
||||
system.attach("example_plugin", my_callback) # Assuming 'example_plugin/plugin_info.json' exists
|
||||
time.sleep(6)
|
||||
system.run("example_plugin", test="Hello!")
|
||||
system.stop("example_plugin")
|
||||
system.run("example_plugin", 25)
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import threading
|
||||
import time
|
||||
from xtendr.xtendrbase import XtendRBase
|
||||
|
||||
class ExamplePlugin(XtendRBase):
|
||||
@@ -14,9 +15,6 @@ class ExamplePlugin(XtendRBase):
|
||||
>>> plugin.stop()
|
||||
ExamplePlugin has stopped!
|
||||
"""
|
||||
self.pre_load_done = threading.Event()
|
||||
self.use_pre_load:bool = False #Indicate that pre-loading isn't neccessary
|
||||
|
||||
def run(self, *args, **kwargs):
|
||||
arglen = len(args)
|
||||
keylen = len(kwargs)
|
||||
@@ -36,5 +34,6 @@ class ExamplePlugin(XtendRBase):
|
||||
def stop(self):
|
||||
print("ExamplePlugin has stopped!")
|
||||
|
||||
def pre_load(self):
|
||||
pass
|
||||
def pre_load(self, callback):
|
||||
time.sleep(5) # Indicate long running pre-load.
|
||||
callback()
|
||||
|
@@ -25,6 +25,6 @@ class XtendRBase(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def pre_load(self):
|
||||
def pre_load(self, *args):
|
||||
pass
|
||||
|
@@ -5,7 +5,7 @@ import json
|
||||
import threading
|
||||
from xtendr.xtendrbase import XtendRBase
|
||||
|
||||
__version__ = "0.1.3"
|
||||
__version__ = "0.3.0"
|
||||
|
||||
class XtendRSystem:
|
||||
"""Plugin system to manage plugins.
|
||||
@@ -29,7 +29,7 @@ class XtendRSystem:
|
||||
def version(self) -> str:
|
||||
return "XtendR v" + __version__
|
||||
|
||||
def attach(self, name: str) -> None:
|
||||
def attach(self, name: str, callback) -> None:
|
||||
"""Dynamically load a plugin from its folder."""
|
||||
if name in self.plugins:
|
||||
print(f"Plugin '{name}' is already attached.")
|
||||
@@ -68,15 +68,12 @@ class XtendRSystem:
|
||||
'autorun': False
|
||||
}
|
||||
print(f"Attached plugin '{name}'.")
|
||||
print(f"Running pre-load on '{name}'.")
|
||||
thread = threading.Thread(target=self.plugins[name].pre_load(), args=(callback,))
|
||||
thread.start()
|
||||
except (ModuleNotFoundError, json.JSONDecodeError, AttributeError) as e:
|
||||
print(f"Failed to attach plugin '{name}': {e}")
|
||||
|
||||
def _pre_load(self, name: str):
|
||||
"""Pre-load data if needed"""
|
||||
if name in plugins:
|
||||
if self.plugins[name].use_pre_load: # Is pre-loading neccessary?
|
||||
threading.Thread(target=self.plugins[name].pre_load()).start()
|
||||
|
||||
def run(self, name: str, *args, **kwargs):
|
||||
"""Run the plugin's 'run' method if available."""
|
||||
if name in self.plugins:
|
||||
|
Reference in New Issue
Block a user