Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dec115c596 | |||
| 591cc49933 | |||
| 36807b7aa6 | |||
| afc38c32b3 | |||
| 798165c501 | |||
| fc247d4888 | |||
| 394f72d383 | |||
| f21433417d |
@@ -1,3 +1,17 @@
|
||||
# XtendR
|
||||
|
||||
A python 3 extension system to ease the use of plugins.
|
||||
A very basic python 3 extension system to ease the use of plugins.
|
||||
|
||||
At the moment only 4 functions are available:
|
||||
- Attach
|
||||
- Run
|
||||
- Stop
|
||||
- Detach
|
||||
|
||||
Attach and Detach are used for registrering/unregistrering a module on the system.
|
||||
The Run and Stop functions are mandatory in the plugin modules.
|
||||
|
||||
The system expects a folder called 'plugins', placed at the root, along side your main python file.
|
||||
Each plugin should be placed in subfolders, named as the plugin, inside the 'plugins' folder.
|
||||
|
||||
The example.py along with the example_plugin.py/json shows the workings of this plugin system.
|
||||
+2
-2
@@ -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")
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
"name": "Example Plugin",
|
||||
"version": "1.0",
|
||||
"module": "example_plugin",
|
||||
"class": "ExamplePlugin",
|
||||
"description": "An example plugin that prints a message."
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
from xtendr import XtendRBase
|
||||
from xtendr.xtendrbase import XtendRBase
|
||||
|
||||
class ExamplePlugin(XtendRBase):
|
||||
"""Example plugin implementation.
|
||||
@@ -3,13 +3,13 @@ if __name__ == "__main__":
|
||||
|
||||
setup(
|
||||
name="XtendR",
|
||||
version="0.0.1",
|
||||
version="0.0.4",
|
||||
packages=find_packages(),
|
||||
install_requires=[],
|
||||
author="Jan Lerking",
|
||||
author_email="",
|
||||
description="A modular plugin system for Python.",
|
||||
url="",
|
||||
url="www.gitea.com/Lerking/XtendR",
|
||||
classifiers=[
|
||||
"Programming Language :: Python :: 3.12",
|
||||
"License :: OSI Approved :: MIT License",
|
||||
|
||||
+2
-1
@@ -1 +1,2 @@
|
||||
import xtendr
|
||||
from . import xtendrbase
|
||||
from . import xtendrsystem
|
||||
@@ -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
|
||||
@@ -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.")
|
||||
Reference in New Issue
Block a user