Pymemri is a python library for creating Plugins for the Memri Personal online datastore (pod). Pymemri has a PodClient to communicate with the pod, and tools to build and test plugins.
Plugins connect and add the information to your Pod. Plugins that import your data from external services are called Importers (Gmail, WhatsApp, etc.). Plugins that connect new data to the existing data are called indexers (face recognition, spam detection, object detection, etc.). Lastly there are plugins that execute actions (sending messages, uploading files). This repository is built with nbdev, which means that the repo structure has a few differences compared to a standard python repo.
All interaction between plugins and the pod goes via the Pymemri
PodClient. To use this client in development, we first need to have a pod running locally. The quickest way to do this is to install from the pod repo, and run
If you have a running pod, you can define and add your own item definitions:
from pymemri.data.itembase import Item from pymemri.pod.client import PodClient class Dog(Item): properties = Item.properties + ["name", "age"] def __init__(self, name: str = None, age: int = None, **kwargs): super().__init__(**kwargs) self.name = name self.age = age # Connect to the pod and add the Dog item definition client = PodClient() client.add_to_schema(Dog) # Add a Dog to the pod dog = Dog("bob", 3) client.create(dog)
After installation, users can use the plugin CLI to manually run a plugin. For more information on how to build a plugin, see
With the pod running, run in your terminal|:
store_keys run_plugin --metadata "example_plugin.json"
This stores a random owner key and database key on your disk for future use, and runs the pymemri example plugin. If everything works correctly, the output should read
Plugin run success.
The Python integrators are written in nbdev (video). With nbdev, it is encouraged to write code in
Jupyter Notebooks. Nbdev syncs all the notebooks in
/nbs with the python code in
/pymemri. Tests are written side by side with the code in the notebooks, and documentation is automatically generated from the code and markdown in the notebooks and exported into the
/docs folder. Check out the nbdev quickstart for an introduction, watch the video linked above, or see the nbdev documentation for a all functionalities and tutorials.