mirror of
https://gitea.com/Lerking/XtendR.git
synced 2026-06-29 13:10:04 +02:00
Merge pull request '0.3.0' (#33) from 0.3.0 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/33
This commit is contained in:
+8
-1
@@ -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,10 @@ 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
|
||||
for i in range(3):
|
||||
print(f"Main program is running iteration {i+1}...")
|
||||
time.sleep(2)
|
||||
system.run("example_plugin", test="Hello!")
|
||||
system.stop("example_plugin")
|
||||
system.run("example_plugin", 25)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import threading
|
||||
import time
|
||||
from xtendr.xtendrbase import XtendRBase
|
||||
|
||||
class ExamplePlugin(XtendRBase):
|
||||
@@ -31,3 +33,7 @@ class ExamplePlugin(XtendRBase):
|
||||
|
||||
def stop(self):
|
||||
print("ExamplePlugin has stopped!")
|
||||
|
||||
def pre_load(self, callback):
|
||||
time.sleep(5) # Indicate long running pre-load.
|
||||
callback()
|
||||
|
||||
@@ -3,7 +3,7 @@ if __name__ == "__main__":
|
||||
|
||||
setup(
|
||||
name="XtendR",
|
||||
version="0.2.1",
|
||||
version="0.3.2",
|
||||
packages=find_packages(),
|
||||
install_requires=[],
|
||||
author="Jan Lerking",
|
||||
|
||||
@@ -23,3 +23,8 @@ class XtendRBase(ABC):
|
||||
@abstractmethod
|
||||
def stop(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def pre_load(self, *args):
|
||||
pass
|
||||
|
||||
@@ -2,9 +2,10 @@ import importlib
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
import threading
|
||||
from xtendr.xtendrbase import XtendRBase
|
||||
|
||||
__version__ = "0.1.3"
|
||||
__version__ = "0.3.2"
|
||||
|
||||
class XtendRSystem:
|
||||
"""Plugin system to manage plugins.
|
||||
@@ -28,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.")
|
||||
@@ -67,6 +68,9 @@ class XtendRSystem:
|
||||
'autorun': False
|
||||
}
|
||||
print(f"Attached plugin '{name}'.")
|
||||
print(f"Running pre-load on '{name}'.")
|
||||
thread = threading.Thread(target=self.plugins[name]['instance'].pre_load, args=(callback,))
|
||||
thread.start()
|
||||
except (ModuleNotFoundError, json.JSONDecodeError, AttributeError) as e:
|
||||
print(f"Failed to attach plugin '{name}': {e}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user