This commit is contained in:
2025-02-21 21:34:10 +01:00
parent e1516e8b45
commit f21433417d
7 changed files with 41 additions and 32 deletions

View File

@@ -1,4 +1,4 @@
from xtendr.xtendr import XtendR
from xtendr.xtendrsystem import XtendRSystem
if __name__ == "__main__":
"""Example usage of the PluginSystem.
@@ -14,7 +14,7 @@ if __name__ == "__main__":
>>> system.detach("example_plugin")
Detached plugin 'example_plugin'.
"""
system = XtendR()
system = XtendRSystem()
system.attach("example_plugin") # Assuming 'example_plugin/plugin_info.json' exists
system.run("example_plugin")
system.stop("example_plugin")

View File

@@ -2,5 +2,6 @@
"name": "Example Plugin",
"version": "1.0",
"module": "example_plugin",
"class": "ExamplePlugin",
"description": "An example plugin that prints a message."
}

View File

@@ -1,4 +1,4 @@
from xtendr import XtendRBase
from xtendr.xtendrbase import XtendRBase
class ExamplePlugin(XtendRBase):
"""Example plugin implementation.

View File

@@ -3,7 +3,7 @@ if __name__ == "__main__":
setup(
name="XtendR",
version="0.0.1",
version="0.0.3",
packages=find_packages(),
install_requires=[],
author="Jan Lerking",

View File

@@ -1 +1,2 @@
import xtendr
from . import xtendrbase
from . import xtendrsystem

29
xtendr/xtendrbase.py Normal file
View File

@@ -0,0 +1,29 @@
import importlib
import sys
import os
import json
from abc import ABC, abstractmethod
class XtendRBase(ABC):
"""Abstract base class for all plugins.
Example:
>>> class TestPlugin(XtendRBase):
... def run(self):
... print("Running TestPlugin")
... def stop(self):
... print("Stopping TestPlugin")
>>> plugin = TestPlugin()
>>> plugin.run()
Running TestPlugin
>>> plugin.stop()
Stopping TestPlugin
"""
@abstractmethod
def run(self):
pass
@abstractmethod
def stop(self):
pass

View File

@@ -3,32 +3,9 @@ import sys
import os
import json
from abc import ABC, abstractmethod
from xtendr.xtendrbase import XtendRBase
class XtendRBase(ABC):
"""Abstract base class for all plugins.
Example:
>>> class TestPlugin(XtendRBase):
... def run(self):
... print("Running TestPlugin")
... def stop(self):
... print("Stopping TestPlugin")
>>> plugin = TestPlugin()
>>> plugin.run()
Running TestPlugin
>>> plugin.stop()
Stopping TestPlugin
"""
@abstractmethod
def run(self):
pass
@abstractmethod
def stop(self):
pass
class XtendR:
class XtendRSystem:
"""Plugin system to manage plugins.
Example:
@@ -50,8 +27,9 @@ class XtendR:
print(f"Plugin '{name}' is already attached.")
return
plugin_path = os.path.join(os.getcwd(), name)
info_path = os.path.join(plugin_path, "plugin_info.json")
plugin_path = os.path.join(os.getcwd(), "plugins", name)
info_path = os.path.join(plugin_path, name + ".json")
print(plugin_path + "\n" + info_path)
if not os.path.isdir(plugin_path) or not os.path.isfile(info_path):
print(f"Failed to attach plugin '{name}', folder or info file not found.")