Skip to content

Plugin Directory Structure

All plugins follow a standard directory layout for consistency.

my_plugin/
├── __init__.py
├── config.py
└── config/
└── defaults.json

Define a configuration class that extends PluginConfig:

>>> from r2x_core import PluginConfig
>>> class MyConfig(PluginConfig):
... solve_year: int
... scenario: str = "reference"
>>> config = MyConfig(solve_year=2030)
>>> config.solve_year
2030
>>> config.scenario
'reference'

Create a DataStore directly from your plugin configuration:

>>> import tempfile
>>> from pathlib import Path
>>> from r2x_core import DataStore, PluginConfig
>>> class MyConfig(PluginConfig):
... solve_year: int
>>> config = MyConfig(solve_year=2030)
>>> with tempfile.TemporaryDirectory() as tmpdir:
... store = DataStore.from_plugin_config(config, path=tmpdir)
... print(type(store).__name__)
DataStore

Use the getter decorator to register custom field extractors:

>>> from r2x_core import getter
>>> @getter
... def extract_name(component):
... return component.name
>>> extract_name.__name__
'extract_name'