--- title: Plugins keywords: fastai sidebar: home_sidebar nb_path: "nbs/plugin.pluginbase.ipynb" ---
{% raw %}
{% endraw %} {% raw %}
{% endraw %} {% raw %}
{% endraw %}

The memri pod uses a plugin system to add features to the backend memri backend. Plugins, can import your data (importers), change your data (indexers), or call other serivces. Users can define their own plugins to add new behaviour to their memri app. Let's use the following plugin as an example of how we can start plugins.

class MyPlugin(PluginBase):
    properties = PluginBase.properties
    edges= PluginBase.edges

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.pluginPackage="pymemri.plugin.pluginbase"

    def run(self, run, client):
        print("running")
{% raw %}
from pymemri.pod.client import PodClient
client = PodClient()
{% endraw %} {% raw %}
assert client.add_to_schema(MyPlugin(name="abc", data_query="abc"))
assert client.add_to_schema(PluginRun())
{% endraw %} {% raw %}
plugin = MyPlugin(name="abc", data_query="abc")
run = PluginRun()
run.add_edge("plugin", plugin)
{% endraw %} {% raw %}
client.create(run)
client.create(plugin)
client.create_edge(run.get_edges("plugin")[0]);
{% endraw %} {% raw %}
run = client.get(run.id)
{% endraw %}

Running your plugin

Plugins can be started using the pymemri run_plugin CLI. To use the CLI, you can either pass your run arguments as parameters, or set them as environment variables. If both are set, the CLI will prefer the passed arguments.

{% raw %}
{% endraw %}

CLI

{% raw %}

run_plugin[source]

run_plugin(pod_full_address:Param object at 0x7f8481390390>=None, plugin_run_id:Param object at 0x7f84809abdd0>=None, database_key:Param object at 0x7f84815d8610>=None, owner_key:Param object at 0x7f84815d8690>=None)

{% endraw %} {% raw %}
{% endraw %} {% raw %}
!run_plugin --pod_full_address=$DEFAULT_POD_ADDRESS --plugin_run_id=$run.id --owner_key=$client.owner_key \
            --database_key=$client.database_key
Used arguments passed to `run_plugin()` (ignoring environment)
pod_full_address=http://localhost:3030
plugin_run_id=5f3073c81b2d6eaf0830c56eff7a27eb
database_key=5690651323268015115922339504648133332175023553283098849468626733
owner_key=1804301080062811175926060907936475088288550309983914208013636550

running
{% endraw %}