1 Commits
Author SHA1 Message Date
Lerking f21433417d 0.0.3 2025-02-21 21:34:10 +01:00
7 changed files with 41 additions and 32 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
from xtendr.xtendr import XtendR from xtendr.xtendrsystem import XtendRSystem
if __name__ == "__main__": if __name__ == "__main__":
"""Example usage of the PluginSystem. """Example usage of the PluginSystem.
@@ -14,7 +14,7 @@ if __name__ == "__main__":
>>> system.detach("example_plugin") >>> system.detach("example_plugin")
Detached plugin 'example_plugin'. Detached plugin 'example_plugin'.
""" """
system = XtendR() system = XtendRSystem()
system.attach("example_plugin") # Assuming 'example_plugin/plugin_info.json' exists system.attach("example_plugin") # Assuming 'example_plugin/plugin_info.json' exists
system.run("example_plugin") system.run("example_plugin")
system.stop("example_plugin") system.stop("example_plugin")
@@ -2,5 +2,6 @@
"name": "Example Plugin", "name": "Example Plugin",
"version": "1.0", "version": "1.0",
"module": "example_plugin", "module": "example_plugin",
"class": "ExamplePlugin",
"description": "An example plugin that prints a message." "description": "An example plugin that prints a message."
} }
@@ -1,4 +1,4 @@
from xtendr import XtendRBase from xtendr.xtendrbase import XtendRBase
class ExamplePlugin(XtendRBase): class ExamplePlugin(XtendRBase):
"""Example plugin implementation. """Example plugin implementation.
+1 -1
View File
@@ -3,7 +3,7 @@ if __name__ == "__main__":
setup( setup(
name="XtendR", name="XtendR",
version="0.0.1", version="0.0.3",
packages=find_packages(), packages=find_packages(),
install_requires=[], install_requires=[],
author="Jan Lerking", author="Jan Lerking",
+2 -1
View File
@@ -1 +1,2 @@
import xtendr from . import xtendrbase
from . import xtendrsystem
+29
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
+5 -27
View File
@@ -3,32 +3,9 @@ import sys
import os import os
import json import json
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from xtendr.xtendrbase import XtendRBase
class XtendRBase(ABC): class XtendRSystem:
"""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:
"""Plugin system to manage plugins. """Plugin system to manage plugins.
Example: Example:
@@ -50,8 +27,9 @@ class XtendR:
print(f"Plugin '{name}' is already attached.") print(f"Plugin '{name}' is already attached.")
return return
plugin_path = os.path.join(os.getcwd(), name) plugin_path = os.path.join(os.getcwd(), "plugins", name)
info_path = os.path.join(plugin_path, "plugin_info.json") 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): 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.") print(f"Failed to attach plugin '{name}', folder or info file not found.")