Skip to main content

A Python plugin and module introspection library.

Project description

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:

- `Python 3 Import
Process <http://docs.python.org/3/reference/import.html>`_
- `PEP-302 <http://www.python.org/dev/peps/pep-0302/>`_

Latest Release Notes (0.1.7)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Upgrading to this version has the following changes from the release
version 0.1.4.

- **discover\_classes** was renamed to **rlist\_classes**
- **discover\_modules** was renamed to **list\_modules**

Usage
~~~~~

Documentation
^^^^^^^^^^^^^

`Pynsive at Readthedocs <https://pynsive.readthedocs.org>`_

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 Test Examples
------------------

- `Pynsive
Unittest <https://github.com/zinic/pynsive/blob/master/tests/plugin_test.py>`_

Beginner's Tutorial
-------------------

- `Getting started with
Pynsive <http://www.giantflyingsaucer.com/blog/?p=4634>`_

That Legal Thing...
-------------------

This software library is released to you under the `Apache License,
Version 2.0 <http://www.apache.org/licenses/LICENSE-2.0.html>`_. See
`LICENSE <https://github.com/zinic/pynsive/blob/master/LICENSE>`_ for
more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynsive-0.1.8.tar.gz (12.1 kB view details)

Uploaded Source

File details

Details for the file pynsive-0.1.8.tar.gz.

File metadata

  • Download URL: pynsive-0.1.8.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pynsive-0.1.8.tar.gz
Algorithm Hash digest
SHA256 a337c0bc280a558d8d8986ae2365726a5673ee40e5c1a4d134098e7891a85695
MD5 62f404538d6df877a61745ade5dcce18
BLAKE2b-256 252ad4ec42fd6e5cb0ce978184cdb6d12a2a1a11f442cfca7b1d836c350c41f8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page