Skip to content

Commit 385a0c4

Browse files
committed
🚑 version 0.6.1
fix plugin finder
1 parent 27605b3 commit 385a0c4

File tree

2 files changed

+32
-27
lines changed

2 files changed

+32
-27
lines changed

arclet/entari/plugin/module.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,6 @@
99
from .model import Plugin, PluginMetadata, _current_plugin, _plugins
1010

1111

12-
class PluginFinder(MetaPathFinder):
13-
def find_spec(
14-
self,
15-
fullname: str,
16-
path: Optional[Sequence[str]],
17-
target: Optional[ModuleType] = None,
18-
):
19-
module_spec = PathFinder.find_spec(fullname, path, target)
20-
if not module_spec:
21-
return
22-
module_origin = module_spec.origin
23-
if not module_origin:
24-
return
25-
26-
module_spec.loader = PluginLoader(fullname, module_origin)
27-
return module_spec
28-
29-
3012
class PluginLoader(SourceFileLoader):
3113
def __init__(self, fullname: str, path: str) -> None:
3214
self.loaded = False
@@ -51,9 +33,9 @@ def exec_module(self, module: ModuleType) -> None:
5133

5234
try:
5335
super().exec_module(module)
54-
# except Exception:
55-
# # _revert_plugin(plugin)
56-
# raise
36+
except Exception:
37+
plugin.dispose()
38+
raise
5739
finally:
5840
# leave plugin context
5941
_current_plugin.reset(_plugin_token)
@@ -64,9 +46,6 @@ def exec_module(self, module: ModuleType) -> None:
6446
return
6547

6648

67-
_finder = PluginFinder()
68-
69-
7049
def find_spec(name, package=None):
7150
fullname = resolve_name(name, package) if name.startswith(".") else name
7251
parent_name = fullname.rpartition(".")[0]
@@ -81,7 +60,14 @@ def find_spec(name, package=None):
8160
) from e
8261
else:
8362
parent_path = None
84-
return _finder.find_spec(fullname, parent_path)
63+
module_spec = PathFinder.find_spec(fullname, parent_path, None)
64+
if not module_spec:
65+
return
66+
module_origin = module_spec.origin
67+
if not module_origin:
68+
return
69+
module_spec.loader = PluginLoader(fullname, module_origin)
70+
return module_spec
8571

8672

8773
def import_plugin(name, package=None):
@@ -94,4 +80,23 @@ def import_plugin(name, package=None):
9480
return
9581

9682

97-
sys.meta_path.insert(0, _finder)
83+
class _PluginFinder(MetaPathFinder):
84+
def find_spec(
85+
self,
86+
fullname: str,
87+
path: Optional[Sequence[str]],
88+
target: Optional[ModuleType] = None,
89+
):
90+
module_spec = PathFinder.find_spec(fullname, path, target)
91+
if not module_spec:
92+
return
93+
module_origin = module_spec.origin
94+
if not module_origin:
95+
return
96+
if module_spec.name in _plugins:
97+
module_spec.loader = PluginLoader(fullname, module_origin)
98+
return module_spec
99+
return
100+
101+
102+
sys.meta_path.insert(0, _PluginFinder())

example_plugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
)
1313
from arclet.entari.command import Match
1414

15-
__plugin_metadata__ = PluginMetadata()
15+
__plugin_metadata__ = PluginMetadata(__file__)
1616

1717
disp_message = MessageCreatedEvent.dispatch()
1818

0 commit comments

Comments
 (0)