Skip to content

stevendgonzales/pynsive

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pynsive

Pronounced, "Pensive"

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:

Latest Release Notes

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

Documentation

Examples

Creating a Plugin Context

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()

Dynamically Listing Submodules

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()

Dynamically Finding Classes in a Module

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()

Dynamically Finding Classes in a Module Tree

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()

Unit Tests

##That Legal Thing...

This software library is released to you under the Apache License, Version 2.0. See LICENSE for more information.

About

Python Reflections

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%