ij.plugins.plugin_manager

Plugin manager for extensible functionality.

class ij.plugins.plugin_manager.Plugin[source]

Base class for plugins.

initialize()[source]

Initialize plugin (called once when loaded).

process(diagram: DiagramIR, **kwargs) DiagramIR[source]

Process diagram (override in subclass).

class ij.plugins.plugin_manager.PluginManager[source]

Manage and execute plugins.

apply_transform(transform_name: str, diagram: DiagramIR, **kwargs) DiagramIR[source]

Apply a registered transform.

Parameters:
  • transform_name – Name of transform

  • diagram – DiagramIR to transform

  • **kwargs – Transform arguments

Returns:

Transformed DiagramIR

execute_plugin(plugin_name: str, diagram: DiagramIR, **kwargs) DiagramIR[source]

Execute a plugin on a diagram.

Parameters:
  • plugin_name – Name of plugin to execute

  • diagram – DiagramIR to process

  • **kwargs – Plugin-specific arguments

Returns:

Transformed DiagramIR

list_plugins() List[Dict[str, str]][source]

List all registered plugins.

Returns:

List of plugin information dictionaries

list_transforms() List[str][source]

List all registered transforms.

load_plugin_file(file_path: str)[source]

Load plugin from a Python file.

Parameters:

file_path – Path to plugin file

Example

>>> manager.load_plugin_file('plugins/my_plugin.py')
load_plugins_directory(directory: str)[source]

Load all plugins from a directory.

Parameters:

directory – Directory containing plugin files

Example

>>> manager.load_plugins_directory('~/.ij/plugins')
register_hook(event: str, func: Callable)[source]

Register a hook for an event.

Parameters:
  • event – Event name (‘pre_render’, ‘post_parse’, etc.)

  • func – Hook function

Example

>>> def on_render(diagram):
...     print(f"Rendering {len(diagram.nodes)} nodes")
>>> manager.register_hook('pre_render', on_render)
register_plugin(plugin: Plugin)[source]

Register a plugin.

Parameters:

plugin – Plugin instance to register

Example

>>> class MyPlugin(Plugin):
...     name = "my_plugin"
...     def process(self, diagram, **kwargs):
...         # Transform diagram
...         return diagram
>>> manager = PluginManager()
>>> manager.register_plugin(MyPlugin())
register_transform(name: str, func: Callable)[source]

Register a transform function.

Parameters:
  • name – Transform name

  • func – Transform function (diagram, **kwargs) -> diagram

Example

>>> def highlight_critical(diagram, start, end):
...     # Highlight path from start to end
...     return diagram
>>> manager.register_transform('highlight-critical', highlight_critical)
trigger_hooks(event: str, *args, **kwargs)[source]

Trigger all hooks for an event.

Parameters:
  • event – Event name

  • *args – Event arguments

  • **kwargs – Event keyword arguments

ij.plugins.plugin_manager.get_global_manager() PluginManager[source]

Get the global plugin manager.

ij.plugins.plugin_manager.register_plugin(plugin: Plugin)[source]

Register plugin with global manager.

ij.plugins.plugin_manager.register_transform(name: str)[source]

Decorator to register a transform function.

Example

>>> @register_transform('my-transform')
... def my_transform(diagram, **kwargs):
...     return diagram