24 Commits
Author SHA1 Message Date
Lerking 8c19c4a97b Merge pull request '0.1.0 #23 Added 'Autorun' flag to XtendRSystem Attach() method. Also added a new version() method. /JL' (#24) from 0.1.0 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/24
2025-03-08 17:28:27 +00:00
Lerking c7662a5d47 0.1.0 #23 Added 'Autorun' flag to XtendRSystem Attach() method. Also added a new version() method. /JL 2025-03-08 18:20:34 +01:00
Lerking 68d3aa3ed2 Merge pull request '0.0.9 build. /JL' (#22) from 0.0.9 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/22
2025-03-01 20:14:52 +00:00
Lerking 2ea29fe5ea 0.0.9 build. /JL 2025-03-01 21:14:15 +01:00
Lerking 1195d399b6 Merge pull request '0.0.8 update. /JL' (#21) from 0.0.8 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/21
2025-03-01 12:19:32 +00:00
Lerking b709e4d942 0.0.8 update. /JL 2025-03-01 13:18:10 +01:00
Lerking 96bb0f0f3d Merge pull request '0.0.7' (#20) from 0.0.7 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/20
2025-02-25 06:28:11 +00:00
Lerking 993617976f Add Makefile 2025-02-25 06:27:47 +00:00
Lerking 828213912e Update setup.py 2025-02-25 06:26:29 +00:00
Lerking 44136c33b8 Merge pull request 'Update setup.py' (#17) from lerking-patch-1 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/17
2025-02-25 06:22:07 +00:00
Lerking 490423e94a Update setup.py 2025-02-25 06:21:51 +00:00
Lerking fa2c25d6c5 Merge pull request 'Update setup.py' (#15) from lerking-patch-1 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/15
2025-02-24 16:08:07 +00:00
Lerking 0db2e1dfca Update setup.py 2025-02-24 16:07:16 +00:00
Lerking 7200cb0bf8 Merge pull request 'Updated. /JL' (#14) from 0.0.6 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/14
2025-02-24 11:19:02 +00:00
Jan Lerking da3d09d3b1 Updated. /JL 2025-02-24 12:17:07 +01:00
Lerking 00173e73ae Merge pull request '0.0.5' (#12) from 0.0.5 into main
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/12
2025-02-24 08:23:28 +00:00
Jan Lerking c849d32f73 0.0.5 #8 Cleaned up unused imports. /JL 2025-02-24 09:20:08 +01:00
Lerking ffc7baa394 Update README.md 2025-02-24 08:16:07 +00:00
Lerking ea1ba5d5ab Update README.md 2025-02-24 08:15:18 +00:00
Lerking b01a9cca3e Update README.md 2025-02-24 07:29:42 +00:00
Lerking 485d7a28d8 Merge pull request 'main' (#11) from main into 0.0.5
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/11
2025-02-24 07:28:21 +00:00
Lerking d22861622b Merge pull request 'main' (#10) from main into 0.0.5
Reviewed-on: https://gitea.com/Lerking/XtendR/pulls/10
2025-02-24 07:24:30 +00:00
Lerking b58be97d1f Update setup.py 2025-02-24 06:53:16 +00:00
Lerking eb03302323 Update xtendr/xtendrsystem.py 2025-02-24 06:16:04 +00:00
5 changed files with 33 additions and 17 deletions
+13
View File
@@ -0,0 +1,13 @@
dist:
python -m build
test:
twine upload --repository testpypi dist/*
publish:
twine upload --repository pypi dist/*
all:
$(dist)
$(test)
$(publish)
+6 -6
View File
@@ -1,11 +1,11 @@
# XtendR
A very basic Python >= 3.12 plugin system based on the K.I.S.S principle.
A very basic Python 3.12 plugin system based on the K.I.S.S principle.
I was in need of a new plugin system, which should meet these requirements:
- Simple to use
- Work well with Python 3.12
- Maintainable - Don't expect to see new releases every month. __If it ain't broken, don't fix it!!!__
I was in need of a new plugin system, which should meet these requirements:
:heavy_plus_sign: Simple to use
:heavy_plus_sign: Work well with Python 3.12
:heavy_plus_sign: Maintainable - Don't expect to see new releases every month. __If it ain't broken, don't fix it!!!__
I previously used yapsy, but it doesn't meet the requirements anymore.
:x: No longer simple, and simple to use (Simplicity in use has been sacrificed for more complexity. It has become bloated)
@@ -27,4 +27,4 @@ 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.
The example.py along with the plugins/example_plugin/example_plugin.py and plugins/example_plugin/example_plugin.json shows the workings of this plugin system.
+4 -4
View File
@@ -3,17 +3,17 @@ if __name__ == "__main__":
setup(
name="XtendR",
version="0.0.4",
version="0.0.9",
packages=find_packages(),
install_requires=[],
author="Jan Lerking",
author_email="",
description="A modular plugin system for Python.",
url="www.gitea.com/Lerking/XtendR",
url="https://www.gitea.com/Lerking/XtendR",
classifiers=[
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.11",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.12',
python_requires='>=3.11',
)
-4
View File
@@ -1,7 +1,3 @@
import importlib
import sys
import os
import json
from abc import ABC, abstractmethod
class XtendRBase(ABC):
+10 -3
View File
@@ -2,15 +2,18 @@ import importlib
import sys
import os
import json
from abc import ABC, abstractmethod
from xtendr.xtendrbase import XtendRBase
__version__ = "0.1.0"
class XtendRSystem:
"""Plugin system to manage plugins.
Example:
>>> system = XtendRSystem()
>>> system.attach("example_plugin") # Assuming 'example_plugin/plugin_info.json' exists
>>> system.version()
XtendR v0.1.0
>>> system.attach("example_plugin") # Assuming 'example_plugin/example_plugin.json' exists
>>> system.run("example_plugin")
ExamplePlugin is running!
>>> system.stop("example_plugin")
@@ -21,6 +24,9 @@ class XtendRSystem:
def __init__(self):
self.plugins = {}
def version(self) -> str:
return "XtendR v" + __version__
def attach(self, name: str) -> None:
"""Dynamically load a plugin from its folder."""
if name in self.plugins:
@@ -56,7 +62,8 @@ class XtendRSystem:
self.plugins[name] = {
'instance': instance,
'running': False,
'info': plugin_info
'info': plugin_info,
'autorun': False
}
print(f"Attached plugin '{name}'.")
except (ModuleNotFoundError, json.JSONDecodeError, AttributeError) as e: