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ΒΆ
Create and Register Plugins - Creating plugins
Using Plugins - Using plugins