mirror of
https://github.com/olivierkes/manuskript.git
synced 2024-05-12 00:42:32 +12:00
Implement plugin loading
Signed-off-by: Jacki <jacki@thejackimonster.de>
This commit is contained in:
parent
3d469e671e
commit
87f0e6d871
61
manuskript/plugin/__init__.py
Normal file
61
manuskript/plugin/__init__.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
from manuskript.plugin.abstractPlugin import AbstractPlugin
|
||||
|
||||
import importlib
|
||||
import os
|
||||
import pkgutil
|
||||
import sys
|
||||
|
||||
__path__ = pkgutil.extend_path(__path__, __name__)
|
||||
|
||||
if sys.version_info < (3, 10):
|
||||
from importlib_metadata import entry_points
|
||||
else:
|
||||
from importlib.metadata import entry_points
|
||||
|
||||
from importlib.machinery import FileFinder, SourceFileLoader
|
||||
|
||||
|
||||
def loadPlugins():
|
||||
plugins = []
|
||||
paths = []
|
||||
|
||||
for importer in pkgutil.iter_importers():
|
||||
if not importer or type(importer) is not FileFinder:
|
||||
continue
|
||||
|
||||
paths.append(os.path.join(importer.path, 'manuskript', 'plugin'))
|
||||
|
||||
for module_info in pkgutil.iter_modules(paths):
|
||||
if not module_info or not module_info.ispkg:
|
||||
continue
|
||||
|
||||
name = 'manuskript.plugin.' + module_info.name
|
||||
path = os.path.join(module_info.module_finder.path, module_info.name, '__init__.py')
|
||||
|
||||
try:
|
||||
module = SourceFileLoader(name, path).load_module()
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
try:
|
||||
plugin_cls = module.Plugin
|
||||
except AttributeError:
|
||||
continue
|
||||
|
||||
try:
|
||||
if not issubclass(plugin_cls, AbstractPlugin):
|
||||
continue
|
||||
|
||||
plugin = plugin_cls()
|
||||
except TypeError:
|
||||
continue
|
||||
|
||||
if not plugin:
|
||||
continue
|
||||
|
||||
plugins.append(plugin)
|
||||
|
||||
return plugins
|
8
manuskript/plugin/abstractPlugin.py
Normal file
8
manuskript/plugin/abstractPlugin.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
|
||||
class AbstractPlugin:
|
||||
|
||||
def __init__(self):
|
||||
print(" -> " + str(type(self)))
|
4
manuskript/plugin/test/__init__.py
Normal file
4
manuskript/plugin/test/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
from manuskript.plugin.test.testPlugin import TestPlugin as Plugin
|
10
manuskript/plugin/test/testPlugin.py
Normal file
10
manuskript/plugin/test/testPlugin.py
Normal file
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env python
|
||||
# --!-- coding: utf8 --!--
|
||||
|
||||
from manuskript.plugin import AbstractPlugin
|
||||
|
||||
|
||||
class TestPlugin(AbstractPlugin):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
|
@ -11,6 +11,7 @@ from gi.repository import GObject, Gtk, Handy
|
|||
Handy.init()
|
||||
|
||||
from manuskript.data import Project
|
||||
from manuskript.plugin import loadPlugins
|
||||
from manuskript.ui.views import *
|
||||
|
||||
from manuskript.ui.chooser import openFileDialog, saveFileDialog, FileFilter
|
||||
|
@ -27,6 +28,7 @@ from manuskript.util import parseFilenameFromURL
|
|||
class MainWindow:
|
||||
|
||||
def __init__(self):
|
||||
self.plugins = loadPlugins()
|
||||
self.project = None
|
||||
|
||||
builder = Gtk.Builder()
|
||||
|
|
Loading…
Reference in a new issue