Plugin Directory StructureΒΆ

All plugins follow a standard directory layout for consistency.

Standard LayoutΒΆ

my_plugin/
β”œβ”€β”€ __init__.py
β”œβ”€β”€ config.py
└── config/
    └── defaults.json

Configuration ClassΒΆ

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'

Using DataStore with ConfigΒΆ

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

Register Custom GettersΒΆ

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'

See AlsoΒΆ