This is a simple plugin library that uses the sys.meta_path list along with custom finder and loader definitions to hook into the Python import process.
For more information on the import process hooks, please see:
This version has the following changes from release version <=0.1.4
- discover_classes was renamed to rlist_classes
- discover_modules was renamed to list_modules
The plugin context is a nice way of managing what directories you've plugged into the sys.meta_path variable. Managers may be destroyed when no longer needed. Destroying a manager removes all directories that the manager plugged into from the sys.meta_path variable.
import pynsive
plugin_manager = pynsive.PluginManager()
plugin_manager.plug_into('/some/path')
try:
# Some code goes here
finally:
plugin_manager.destroy()
import pynsive
import test_module
plugin_manager = pynsive.PluginManager()
plugin_manager.plug_into('/some/path')
try:
found_modules = pynsive.list_modules('ext.plugins')
finally:
plugin_manager.destroy()
import pynsive
import test_module
plugin_manager = pynsive.PluginManager()
plugin_manager.plug_into('/some/path')
try:
def subclasses_only(type_to_test):
same = type_to_test is not test_module.MyClass
is_subclass = issubclass(type_to_test, test_module.MyClass)
return not same and is_subclass
classes = pynsive.list_classes('ext.plugins', subclasses_only)
finally:
plugin_manager.destroy()
import pynsive
import test_module
plugin_manager = pynsive.PluginManager()
plugin_manager.plug_into('/some/path')
try:
def subclasses_only(type_to_test):
same = type_to_test is not test_module.MyClass
is_subclass = issubclass(type_to_test, test_module.MyClass)
return not same and is_subclass
# Recursively find classes
classes = pynsive.rlist_classes('ext.plugins', subclasses_only)
finally:
plugin_manager.destroy()
##That Legal Thing...
This software library is released to you under the Apache License, Version 2.0. See LICENSE for more information.